Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲国产精品67194成人,亚洲精品一区二区观看,日本国产亚洲

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          VESTA官方手冊(cè) - 第十七章:輸入和輸出文件

          VESTA官方手冊(cè) - 第十七章:輸入和輸出文件

          十七章:輸入和輸出文件

          17.1 體數(shù)據(jù)的文件格式

          體數(shù)據(jù)由三維空間中的規(guī)則網(wǎng)格組成。每個(gè)柵格點(diǎn)的體積元素“體元”表示柵格點(diǎn)上的值。體元類似于像素,它表示2D圖像數(shù)據(jù)。

          通常,有兩種類型的格式用于記錄文件中的體數(shù)據(jù):常規(guī)柵格和周期柵格。圖17.1示意性地說(shuō)明了這兩種格式的一般概念。

          常規(guī)柵格是一個(gè)均勻的網(wǎng)格,位于分子邊界框和晶體單位晶胞內(nèi)。對(duì)于晶體結(jié)構(gòu),由于數(shù)據(jù)的周期性,常規(guī)柵格中的部分?jǐn)?shù)據(jù)是冗余的。例如,(1,1,1)處的數(shù)值等于原點(diǎn)處的數(shù)值,即(0,0,0)。省略了這些冗余點(diǎn)的網(wǎng)格稱為周期柵格。

          VESTA自動(dòng)將網(wǎng)格類型與文件擴(kuò)展名區(qū)分開(kāi)來(lái)。對(duì)于周期柵格格式的體數(shù)據(jù),VESTA通過(guò)添加冗余數(shù)據(jù)點(diǎn)在內(nèi)部生成常規(guī)柵格。在使用自制腳本或程序準(zhǔn)備體數(shù)據(jù)時(shí),用戶必須自己注意文件的柵格類型。

          :不可約數(shù)據(jù)點(diǎn):冗余點(diǎn)(周期性副本)

          圖17.1:平面上體數(shù)據(jù)的兩種網(wǎng)格。(A) 常規(guī)柵格和(B)周期柵格

          17.2 用戶設(shè)置目錄

          VESTA在用戶設(shè)置目錄中加載并保存兩個(gè)文件,VESTA.ini和style/default.ini,分別存儲(chǔ)程序和圖形的用戶設(shè)置。在同一目錄中還創(chuàng)建了一個(gè)用于存儲(chǔ)臨時(shí)文件的目錄tmp。設(shè)置目錄的位置取決于操作系統(tǒng),并按以下優(yōu)先級(jí)順序確定。

          17.2.1 Windows

          · 定義環(huán)境變量VESTA_PREF時(shí),將使用指定的目錄。

          · 當(dāng)%HOMEPATH%\AppData\Roaming\中存在名為VESTA的目錄時(shí),將使用該目錄。

          (%HOMEPATH%表示用戶主目錄的完整路徑,%HOMEPATH%\AppData\是一個(gè)隱藏目錄。)

          · 當(dāng)用戶有權(quán)在VESTA的程序目錄中寫入時(shí),將使用該目錄,以免使主目錄混亂。

          · 第一次執(zhí)行VESTA時(shí)創(chuàng)建目錄%HOMEPATH%\AppData\Roaming\VESTA\,并使用該目錄。

          17.2.2 macOS

          · 定義環(huán)境變量VESTA_PREF時(shí),使用指定的目錄。要為GUI應(yīng)用程序定義環(huán)境變量,必須在名為environment.plist的文本文件中對(duì)其進(jìn)行描述。該文件位于隱藏目錄~/.MacOSX下。為了更容易定義VESTA_PREF,一個(gè)名為set_VESTA_PREF.app的應(yīng)用程序,包含在RIETAN-VENUS軟件包中;有關(guān)詳細(xì)信息,請(qǐng)參閱set_VESTA_PREF.app中的Readme_mac.pdf文件。

          · 第一次執(zhí)行VESTA時(shí)創(chuàng)建目錄~/Library/Application Support/VESTA/,并使用該目錄。請(qǐng)注意,~/Library是主目錄(~/)下的一個(gè)隱藏目錄。

          17.2.3 Linux

          · 定義環(huán)境變量VESTA_PREF時(shí),將使用指定的目錄。

          · 第一次執(zhí)行VESTA時(shí)創(chuàng)建隱藏目錄~/.VESTA/,并使用該目錄。

          17.3 VESTA使用的文件

          表17.1:VESTA使用的文件

          17.4 輸入文件

          17.4.1 結(jié)構(gòu)數(shù)據(jù)

          1、VESTA格式(*.vesta)

          包含整個(gè)結(jié)構(gòu)數(shù)據(jù)和圖形設(shè)置的文本文件。VESTA保存的*.vesta文件,可能包含體數(shù)據(jù)文件的相對(duì)路徑,以及當(dāng)*.vesta文件再次打開(kāi)時(shí),自動(dòng)讀取的晶體數(shù)據(jù)文件。如果*.vesta中包含IMPORT_STRUCTURE、IMPORT_ORFFE、IMPORT _DENSITY和IMPORT_TEXTURE中的任何一個(gè)關(guān)鍵字,且后面是指定數(shù)據(jù)文件相對(duì)路徑的行,當(dāng)*.vesta文件打開(kāi)時(shí),VESTA也會(huì)輸入這些數(shù)據(jù)文件。

          使用RIETAN-FP進(jìn)行Rietveld分析后,如果*.vesta和*.ins在同一個(gè)文件夾中,*.vesta中的晶格和結(jié)構(gòu)參數(shù)會(huì)自動(dòng)更新。

          2、VICS格式(*.vcs)

          http://fujioizumi.verse.jp/visualization/VENUS.html

          VICS是VESTA結(jié)構(gòu)圖部分的前身,現(xiàn)已過(guò)時(shí)。盡管如此,VESTA仍支持此格式以保持兼容性。

          3、American Mineralogist Crystal Structure Database美國(guó)礦物學(xué)晶體結(jié)構(gòu)數(shù)據(jù)庫(kù)(*.amc)

          http://rruff.geo.arizona.edu/AMS/amcsd.php

          在部分AMCSD文本文件中,空間群名稱附加了額外的字符,并使用了非標(biāo)準(zhǔn)的空間群符號(hào)。某些非標(biāo)準(zhǔn)空間群設(shè)置可能無(wú)法正確讀取。在這種情況下,請(qǐng)適當(dāng)修改空間群符號(hào),然后根據(jù)需要在Edit Data對(duì)話框的Unit cell選項(xiàng)卡中更改設(shè)置編號(hào)。有時(shí),如果采用《國(guó)際結(jié)晶學(xué)表》A卷中未描述的非標(biāo)準(zhǔn)設(shè)置,則必須自行轉(zhuǎn)換分?jǐn)?shù)坐標(biāo)。

          4、asse(*.asse)

          http://www.nims.go.jp/cmsc/staff/arai/asse/

          5、Chem3D(*.cc1)

          http://openbabel.org/docs/2.3.1/FileFormats/3D_viewer_Formats.html

          6、Crystallographic Information File晶體學(xué)信息文件(CIF; *.cif)

          http://www.iucr.org/resources/cif/

          CIF有多種晶體數(shù)據(jù)格式??梢詮纳鲜鼍W(wǎng)站獲得有關(guān)CIF的詳細(xì)信息。例如,CIF文件可能包含笛卡爾坐標(biāo),但VESTA無(wú)法輸入它們。請(qǐng)注意,VESTA不支持CIF格式中允許的所有格式。例如,CIF中包含的笛卡爾坐標(biāo)不能輸入到VESTA;CIF中只應(yīng)給出分?jǐn)?shù)坐標(biāo)。有關(guān)可讀格式,請(qǐng)參閱VENUS/examples/VICS/CIF中的示例*.cif文件。

          在*.cif包含多相數(shù)據(jù)的情況下,所有數(shù)據(jù)都輸入到同一個(gè)選項(xiàng)卡中,并且相互重疊。要在這種情況下僅可視化一個(gè)相,請(qǐng)選擇菜單欄中的Edit | Edit Data | Phase...。在列表中選擇一個(gè)不必要的相,然后按下Delete按鈕。

          CIF范式提供了多種輸入空間群對(duì)稱性的方法。VESTA按以下順序搜索條目:

          如果*.cif文件中給出了上述條目之一,VESTA識(shí)別空間群對(duì)稱性。例如,SHELX-97通過(guò)WinGX創(chuàng)建的CIF既不包含空間群編號(hào),也不包含空間群符號(hào),但具有對(duì)稱操作列表。

          如果以上條目均未正確給出,則空間群被視為P1。在這種情況下,請(qǐng)?jiān)诖蜷_(kāi)此類文件后,在Edit Data對(duì)話框的Unit cell選項(xiàng)卡中設(shè)置空間群,或按以下方式修改CIF中與空間群相關(guān)的行:

          7、CrystalMaker text file(*.cmt, *.cmtx)

          http://www.crystalmaker.comCrystalMaker

          是一個(gè)用于構(gòu)建、顯示和操作各種晶體和分子結(jié)構(gòu)的商業(yè)程序。

          8、Crystal Structure Search and Retrieval晶體結(jié)構(gòu)搜索與檢索(CSSR; *.cssr)

          http://www.maciejharanczyk.info/Zeopp/input.html

          在CSSR格式的文件中,可以在“OPT=”后給出設(shè)置編號(hào)。遺憾的是,沒(méi)有關(guān)于以這種格式設(shè)置編號(hào)的信息。如有必要,請(qǐng)?jiān)贓dit Data對(duì)話框的Unit cell選項(xiàng)卡中進(jìn)行更改。

          9、Cambridge Structural Database劍橋結(jié)構(gòu)數(shù)據(jù)庫(kù)(CSD/FDAT; *.csd, *.fdt)

          http://www.ccdc.cam.ac.uk/Solutions/CSDSystem/Pages/CSD.aspx

          10、DL_POLY格式(CONFIG, REVCON, *.config)

          https://www.scd.stfc.ac.uk/Pages/DL_POLY.aspx

          11、FEFF輸入文件(feff.inp)

          http://www.feffproject.org/

          FEFF是原子團(tuán)簇X射線吸收精細(xì)結(jié)構(gòu)(XAFS)和X射線吸收近邊結(jié)構(gòu)(XANES)譜從頭算多重散射的自動(dòng)程序。FEFF的輸入文件名必須為feff.inp或FEFF.inp。

          12、FHI-aims輸入文件(*.in)

          https://aimsclub.fhi-berlin.mpg.de/

          FHI-aims為計(jì)算材料科學(xué)提供準(zhǔn)確的全電子、全電勢(shì)電子結(jié)構(gòu)代碼包。

          13、Elk FP-LAPW代碼的輸出文件(GEOMETRY.OUT)

          Elk是一種全電子全電勢(shì)線性增強(qiáng)平面波(FP-LAPW)代碼,用于測(cè)定晶體固體的性質(zhì)。

          14、GSAS格式(*.EXP)

          http://www.ncnr.nist.gov/xtal/software/gsas.html

          15、Inorganic Crystal Structure Database無(wú)機(jī)晶體結(jié)構(gòu)數(shù)據(jù)庫(kù)(ICSD; *.ics)

          http://www2.fiz-karlsruhe.de/icsd_home.html

          ICSD的兩個(gè)檢索程序,用于MS-DOS的RETRIEVE和用于Windows的FindIt,輸出格式完全不同的文本文件。VESTA能夠讀取兩種類型的晶體數(shù)據(jù)文件。

          在這些*.ics文件中,有時(shí)會(huì)將額外字符附加到空間群名稱,例如“P 42/n m c S”,應(yīng)該是“P 42/n m c”(P42/nmc)。此外,ICSD文本文件中有時(shí)會(huì)給出完整的Hermann-Mauguin空間群符號(hào)。在這種情況下,文本區(qū)域和消息框中都會(huì)顯示錯(cuò)誤消息。請(qǐng)仔細(xì)閱讀以進(jìn)行下一個(gè)操作。遇到此類錯(cuò)誤時(shí),強(qiáng)烈建議輸出CIF而不是*.ics。

          16、ICSD-CRYSTIN:(*.cry)

          17、MDL Molfile(*.mol)

          http://en.wikipedia.org/wiki/Chemical_table_file

          18、Crystallographic Database for Minerals礦物晶體學(xué)數(shù)據(jù)庫(kù)(MINCRYST; *.min)

          http://database.iem.ac.ru/mincryst/

          在部分MINCRYST文本文件中,空間群名稱附加了額外的字符,并使用了非標(biāo)準(zhǔn)的空間群符號(hào)。在這種情況下,文本區(qū)域會(huì)顯示錯(cuò)誤消息。應(yīng)適當(dāng)修改空間群名稱。根據(jù)需要在Edit Data對(duì)話框的Unit cell選項(xiàng)卡中更改設(shè)置編號(hào)。

          19、MOLDA(*.mld)

          http://www3.u-toyama.ac.jp/kihara/cc/mld/readme.html

          MOLDA的網(wǎng)站已經(jīng)關(guān)閉,因?yàn)槠渥髡逪iroshi Yoshida于2005年去世。這里簡(jiǎn)要解釋*.mld的MODRAST/MOLDA格式。此格式由以下行組成:

          (a) 第1行:關(guān)于化合物的注釋,例如其名稱

          (b) 第2行:化合物中的原子數(shù)na

          (c) 第3~(3+na)行:笛卡爾坐標(biāo)(x、y和z)和原子序號(hào)

          (d) 第(4+na)行:化合物中的鍵數(shù)nb

          (e) 第(5+na)~(5+na+nb)行:原子序號(hào)對(duì)

          例如,如果是乙烯,其中na=6,nb=5,則需要以下行:

          20、Protein Data Bank 蛋白質(zhì)數(shù)據(jù)庫(kù)(PDB; *.pdb)

          http://www.wwpdb.org/PDB

          有多種晶體數(shù)據(jù)格式。可以在http://www.wwpdb.org/docs.html網(wǎng)頁(yè)中獲取PDB的詳細(xì)信息。請(qǐng)注意,VESTA不支持這兩種格式中允許的所有格式。有關(guān)可讀格式,請(qǐng)參閱VENUS/examples/VICS/PDB中的*.pdb文件。

          21、RIETAN-FP/2000的輸入文件(*.ins)

          http://fujioizumi.verse.jp/download/download_Eng.html

          VESTA無(wú)法輸入早于RIETAN-2000的RIETAN版本(例如,RIETAN-94)的*.ins文件。如果*.ins中包含多相數(shù)據(jù),只輸入第一相的晶體數(shù)據(jù)。

          在*.ins中,根據(jù)RIETAN-FP中的規(guī)范,國(guó)際表格的卷名不應(yīng)為“I”,而應(yīng)為“A”。例如,“A-230-2”是空間群Fd-3m的第二個(gè)設(shè)置的輸入。輸入“I-230-2”會(huì)導(dǎo)致錯(cuò)誤。晶格參數(shù)必須按以下方式在一行內(nèi)給出:

          22、RIETAN-FP的輸出文件(*.lst)

          http://fujioizumi.verse.jp/download/download_Eng.html

          謹(jǐn)防RIETAN-2000輸出的*.lst文件的輸入。

          23、SHELXL的輸入文件(*.ins)

          24、STRUCTURE TIDY的輸出文件(*.sto)

          25、USPEX輸出的結(jié)構(gòu)數(shù)據(jù)文件(gatheredPOSCARS, BESTgatheredPOSCARS)

          http://han.ess.sunysb.edu/~USPEX/

          26、WIEN2k(*.struct)

          http://www.wien2k.at/

          27、XMol XYZ(*.xyz)

          http://en.wikipedia.org/wiki/XYZ_file_formathttp://openbabel.org/docs/2.3.1/FileFormats/XYZ_cartesian_coordinates_format.html

          明尼蘇達(dá)超級(jí)計(jì)算機(jī)中心開(kāi)發(fā)的XMol是一種用于創(chuàng)建和查看分子圖像的實(shí)用程序。

          28、SCAT的F01,和contrd的C04D

          http://www.dvxa.org/

          如果結(jié)構(gòu)模型與體數(shù)據(jù)重疊,VESTA除了需要讀取f01外,還需要讀取contrd的輸入文件c04d。為此,需要使用c04d中的邊界框(體數(shù)據(jù)輸出到文本文件的區(qū)域)尺寸。有關(guān)contrd的詳細(xì)信息,請(qǐng)參閱VENUS軟件包中的Readme_contrd.txt。當(dāng)然,c04d和f01應(yīng)該放在同一個(gè)文件夾中。如果VESTA未輸入c04d,原子坐標(biāo)將在笛卡爾坐標(biāo)系中處理,就像*.xyz文件的情況一樣。在這種情況下,體數(shù)據(jù)*.scat和*.sca不能與結(jié)構(gòu)模型重疊。

          f01中記錄的所有原子必須包含在上述邊界框內(nèi)。否則,通過(guò)假設(shè)周期性,原子坐標(biāo)將在邊界框內(nèi)標(biāo)準(zhǔn)化,這將導(dǎo)致圖形區(qū)域中出現(xiàn)不正確的結(jié)構(gòu)。

          在執(zhí)行一系列電子狀態(tài)計(jì)算時(shí),使用Hidemaru Editor的DV-Xα方法輔助環(huán)境非常方便。

          岡山理工大學(xué)Genta Sakane的網(wǎng)站:

          http://www.chem.ous.ac.jp/~gsakane/

          對(duì)于想要將contrd計(jì)算的物理量可視化的研究者來(lái)說(shuō)非常有用。詳細(xì)的日語(yǔ)文檔《DV-Xα方法輔助環(huán)境簡(jiǎn)介》,適合初學(xué)者使用DV-Xα法和VESTA。

          29、MXDORTO/MXDTRICL(FILE06.DAT, FILE07.DAT)

          http://kats-labo.jimdo.com/mxdorto-mxdtricl/

          MXDORTO和MXDTRICL是分子動(dòng)力學(xué)模擬的Fortran程序。

          30、XTL格式(*.xtl)

          Cerius2(Accelrys,Inc.)中使用的文本文件。GULP和GSAS能夠以這種格式輸出晶體數(shù)據(jù)。

          17.4.2 體數(shù)據(jù)

          31、二進(jìn)制格式的MEM密度(*.pri, *.prim)

          http://fujioizumi.verse.jp/visualization/VENUS.html

          http://jp-minerals.org/dysnomia/en/

          PRIMA或Dysnomia輸出的3D電子和核密度二進(jìn)制文件以及ALBA輸出的Patterson函數(shù)二進(jìn)制文件。這些文件中記錄的電子密度(嚴(yán)格來(lái)說(shuō),電子數(shù)密度)單位是?-3,核密度單位為fm ?-3。

          32、文本格式的MEM密度(*.den)

          PRIMA、Dysnomia、MEED、MEND和ENIGMA輸出的3D電子和核密度文本文件。這些文件中記錄的電子密度單位是?-3,核密度單位為fm ?-3。

          33、Energy Band能帶(*.eb)

          與*.rho格式幾乎相同的文本文件。文件*.eb用于根據(jù)能帶結(jié)構(gòu)計(jì)算程序(如WIEN2k)獲得的結(jié)果可視化費(fèi)米面。為了方便起見(jiàn),在*.eb中的所有能量本征值上加上一個(gè)常數(shù),使它們大于或等于零。因此,在設(shè)置等值面數(shù)值時(shí)必須考慮到這種修改。

          NIMS的Masao Arai在他的網(wǎng)站上提供了有關(guān)*.eb的詳細(xì)信息:

          http://www.nims.go.jp/cmsc/staff/arai/

          34、通用體數(shù)據(jù)(文本文件格式)(*.?ed)

          具有通用體數(shù)據(jù)格式的文件存儲(chǔ)根據(jù)Tsirelson提出的程序從電子密度轉(zhuǎn)換而來(lái)的以下物理量之一(見(jiàn)14.15節(jié)):

          ?2ρ(r):電子密度的拉普拉斯算符(*.led)。

          g(r):電子動(dòng)能密度(*.ked)。

          ν(r):電子勢(shì)能密度(*.ped)。

          he(r):電子能量密度(*.ted)。

          格式(擴(kuò)展名為?ed的所有文件通用):

          標(biāo)題:標(biāo)題最多80個(gè)字符。

          a、 b、c、α、β、γ:晶格參數(shù),兩個(gè)參數(shù)之間至少有一個(gè)空格(自由格式)。

          N1+1、N2+1、N3+1:分別沿a、b和c軸的體元數(shù)量,兩個(gè)整數(shù)之間至少有一個(gè)空格(自由格式)。

          接下來(lái)為三維數(shù)組元素D:

          每行中有任意數(shù)量的數(shù)據(jù),兩個(gè)真實(shí)數(shù)據(jù)之間至少有一個(gè)空格(自由格式)。請(qǐng)注意,N1+1、N2+1和N3+1的體元分別位于x=1、y=1和z=1。一個(gè)示例*.ted文件的初始幾行如下所示:

          VESTA輸入的*.grd文件,應(yīng)在傅里葉計(jì)算設(shè)置中選擇選項(xiàng)““C – Select section (X, Y, or Z) selection”,然后輸入“X”以顯示提示“Enter section desired (X,Y,Z - choose Z for DSN6 maps”。

          文件格式基本上與通用體數(shù)據(jù)格式相同,但三維數(shù)據(jù)數(shù)組D的輸出范圍如下:

          VESTA同樣允許以這種格式導(dǎo)出體數(shù)據(jù)。

          36、通用體數(shù)據(jù)格式(二進(jìn)制格式)(*.ggrid)

          37、周期體數(shù)據(jù)(二進(jìn)制格式)(*.pgrid)

          38、壓縮體數(shù)據(jù)格式(*.m3d)

          39、SCAT體數(shù)據(jù)格式(*.sca, *.scat)

          http://www.dvxa.org/

          利用contrd從F09和F39文件計(jì)算的電子密度、靜電勢(shì)和波函數(shù),通過(guò)SCAT輸出。使用名為contrd.bat的批處理文件創(chuàng)建的文本文件(CHG3D.SCA、POT3D.SCA、WXXX-3D.SCA、WXXXU-3D.SCA和WXXXU-3D.SCA),可以直接由VESTA輸入,其中XXX表示分配給波函數(shù)的整數(shù)。如要了解*.SCA文件的詳細(xì)信息,請(qǐng)參閱軟件包中的Readme_contrd.txt文件。記錄于*.SCA或*.SCAT的三維數(shù)值數(shù)據(jù)在繪制時(shí)不用進(jìn)行任何轉(zhuǎn)換。

          電子密度、靜電勢(shì)和波函數(shù)的單位分別是bohr-3, Ry (rydberg)和bohr-3/2,其中bohr是長(zhǎng)度的原子單位,即1 bohr=a0=5.29177211×10-11 m=0.529177211 ?(a0:玻爾半徑),1 Ry=Eh/2=2.179 871 9×10-18 J(Eh:hartree)。

          DV-Xα方法的輔助環(huán)境及其用日語(yǔ)編寫的詳細(xì)文件見(jiàn)17.4.1節(jié)第23條。

          40、WIEN2k(*.rho)

          http://www.wien2k.at/ (WIEN2k)

          http://www.nims.go.jp/cmsc/staff/arai/wien/venus.html (wien2venus.py)

          NIMS的Masao Arai用Python編寫的腳本wien2venus.py,可以將用WIEN2k計(jì)算的電子密度導(dǎo)出到文本文件*.rho中,之后使用VESTA將其可視化。這個(gè)文件中存儲(chǔ)的電子密度單位是bohr-3。

          41、WinGX 3D傅里葉映射(*.fou)

          http://www.chem.gla.ac.uk/~louis/software/wingx/

          WinGX輸出的3D Fourier Maps文本文件。如要?jiǎng)?chuàng)建可以用VESTA輸入的*.fou文件,從菜單欄中的Maps | FOURIER MAP | Slant plane,打開(kāi)WinGX的“FOURIER MAP Control Panel”。選擇“33D Fouier (Beevers-Lipson)”和“Write MarchingCubes File”選項(xiàng),并在Z軸設(shè)置“Projection”。對(duì)于所有X、Y和Z軸,“Summation limits”的最小值和最大值應(yīng)設(shè)置為0和1。考慮到以下問(wèn)題,應(yīng)仔細(xì)設(shè)置每個(gè)軸的分辨率。

          在這種格式中,沿每個(gè)軸的數(shù)據(jù)點(diǎn)不是均勻分布的,而是以給定分辨率的間隔放置的。當(dāng)軸的長(zhǎng)度為L(zhǎng)且分辨率設(shè)置為d時(shí),數(shù)據(jù)點(diǎn)的數(shù)量NPIX設(shè)置為L(zhǎng)/d+1的整數(shù)部分。僅當(dāng)L/d接近整數(shù)時(shí),輸出文件具有近似正確周期的通用網(wǎng)格格式。建議特殊位置正好位于數(shù)據(jù)網(wǎng)格上。例如,如果鏡像平面位于x=1/4和x=3/4,則L/d應(yīng)為4的倍數(shù)。

          42、X-PLOR/CNX(*.xplor)

          http://en.wikipedia.org/wiki/X-PLOR (CNX)

          http://superflip.fzu.cz/ (Superflip)

          Superflip是用電荷翻轉(zhuǎn)法從頭算求解晶體結(jié)構(gòu)的計(jì)算機(jī)程序。Superflip使用X-PLOR格式在文件*.x-plor中輸出單位晶胞中的電子密度,可由VESTA直接顯示。

          17.4.3 結(jié)構(gòu)和體數(shù)據(jù)

          43、CASTEP(*.cell, *.charg_frm)

          http://www.castep.org/

          文件*.cell包含晶體結(jié)構(gòu)數(shù)據(jù),而文件*.charg_frm以?-3為單位存儲(chǔ)電子密度。當(dāng)*.cell在VESTA中打開(kāi)時(shí),僅顯示結(jié)構(gòu)模型。另一方面,打開(kāi)*.charg_frm時(shí),顯示結(jié)構(gòu)模型和電子密度分布。因?yàn)閱挝痪О叽缥从涗浽?.charg_frm文件中,必須同時(shí)打開(kāi)*.cell。

          44、GAMESS輸入文件和MacMolPlt輸出的體數(shù)據(jù)文件

          http://www.msg.ameslab.gov/GAMESS/GAMESS.html (GAMESS)

          https://brettbode.github.io/wxmacmolplt/ (MacMolPlt)

          GAMESS輸入文件*.inp,可以很容易地使用MacMolPlt從GAMESS日志文件*.log中獲得。首先,使用文本編輯器檢查該文件中收斂后的最終笛卡爾原子坐標(biāo)單位。然后,運(yùn)行MacMolPlt打開(kāi)*.log。在Windows菜單中,通過(guò)*.log名稱選擇“Coordinates”,并檢查笛卡爾坐標(biāo)的單位是?還是bohr (au)。與VESTA一樣,單位應(yīng)為?。如果單位為bohr,請(qǐng)選擇菜單欄中的Molecule | Convert to Angstroms。然后,在Windows菜單中,通過(guò)*.log名稱選擇“Input Builder”,并單擊Write File按鈕,創(chuàng)建*.inp存儲(chǔ)原子符號(hào)和笛卡爾坐標(biāo)。接下來(lái)是體數(shù)據(jù)文件*.mmp,必須輸出其中記錄的3D網(wǎng)格原點(diǎn)。在Windows菜單中,通過(guò)*.log名稱選擇“Surfaces”。從“3D Orbital”、“3D Total Electron Density”和“3D Molecular Electrostatic Potential”中指定項(xiàng)目。在隨后出現(xiàn)的對(duì)話框中,適當(dāng)更改網(wǎng)格點(diǎn)的數(shù)量和網(wǎng)格大小,選擇一個(gè)軌道(在“3D Orbital”的情況下),然后單擊Update按鈕。等值面和球棍模型將出現(xiàn)在*.log窗口中。單擊Parameters...按鈕,可顯示網(wǎng)格點(diǎn)的數(shù)量、原點(diǎn)和網(wǎng)格增量。然后,單擊Export...按鈕。指定與*.inp同名的*.mmp文件的名稱和位置。請(qǐng)注意*.inp和*.mmp必須在同一文件夾中。

          45、Gaussian Cube格式(*.cube, *.cub)

          http://www.gaussian.com/

          存儲(chǔ)使用Gaussian計(jì)算的電子密度、自旋密度、靜電勢(shì)、波函數(shù)等的文本文件,關(guān)鍵字為“Cube”。Cube文件也可以由Firefly(以前稱為PC GAMESS)創(chuàng)建。

          46、VASP(*.vasp, CHG, CHGCAR, PARCHG, LOCPOT, ELFCAR, POSCAR, CONTCAR)

          http://www.vasp.at/

          http://www.materialsdesign.com/medea(商業(yè)軟件MedeA,包含VASP為其組件)

          以上文件均為存儲(chǔ)VASP輸出的晶體結(jié)構(gòu)和體數(shù)據(jù)的文本文件。

          CHG存儲(chǔ)晶格矢量、原子坐標(biāo)和總電荷密度乘以單位晶胞體積V。PAW單個(gè)中心占據(jù)率添加到CHGCAR中。雖然CHG和CHGCAR提供了相同的價(jià)電子信息,但由于數(shù)值數(shù)據(jù)的精度較低,CHG的文件大小小于CHGCAR。PARCHG具有與CHG相同的格式,存儲(chǔ)特定k點(diǎn)和/或帶的部分電荷密度。當(dāng)讀取這些文件以可視化等值面和切面時(shí),數(shù)據(jù)值除以V(單位為bohr3)。因此,VESTA輸入的電荷密度單位為bohr-3。LOCPOT包含晶格矢量、原子坐標(biāo)和庫(kù)侖勢(shì)(單位:eV),即無(wú)交換相關(guān)分量的總電勢(shì)(除非LEXCHG=-1行在main中被注釋掉)。ELFCAR的格式與CHG相同,它存儲(chǔ)無(wú)量綱電子局域化函數(shù)(ELF)。POSCAR和CONTCAR包括晶格矢量、原子坐標(biāo),以及用于分子動(dòng)力學(xué)計(jì)算的可選初始速度和預(yù)測(cè)-校正坐標(biāo)。POSCAR和CONTCAR分別對(duì)應(yīng)于計(jì)算任務(wù)結(jié)束時(shí)VASP輸出的初始結(jié)構(gòu)和最終結(jié)構(gòu);CONTCAR可用于計(jì)算任務(wù)續(xù)算。由于這些文件中沒(méi)有元素符號(hào)或原子序數(shù),它們必須與另一個(gè)文件OUTCAR一起顯示結(jié)構(gòu)模型。OUTCAR可以重命名為*.out,與*.vasp具有相同的名稱。只有OUTCAR頂部“POTCAR:”后面的行才能讀取元素符號(hào)。

          讀取文件進(jìn)行表面著色時(shí),除非文件名為CHGCAR或PARCHG,否則不會(huì)縮放數(shù)據(jù)值。

          47、XCrySDen XSF格式(*.xsf)

          http://www.xcrysden.org/ (XCrySDen)

          http://www.abinit.org/ (ABINIT)

          http://www.abinit.org/documentation/helpfiles/for-v6.4/users/cut3d_help.html (Cut3D)

          http://www.quantum-espresso.org/ (Quantum ESPRESSO)

          用于材料性質(zhì)從頭算的ABINIT軟件包具有輸出存儲(chǔ)電子密度、靜電勢(shì)和波函數(shù)的二進(jìn)制文件的功能。它們可以使用名為Cut3D的轉(zhuǎn)換器,轉(zhuǎn)換具有XCrySDen的XSF格式的文本文件*.xsf。電子密度的單位是bohr-3。Cut3D支持?jǐn)?shù)據(jù)類型13(XCrySDen/VENUS波函數(shù)實(shí)數(shù)數(shù)據(jù)),因此可以直接在*.xsf中輸出波函數(shù)。用于材料量子力學(xué)模擬的Quantum ESPRESSO還具有輸出XSF格式文件的功能。有關(guān)XSF格式的詳細(xì)信息,請(qǐng)?jiān)L問(wèn)http://www.xcrysden.org/doc/XSF.html

          一般來(lái)說(shuō),*.xsf由一些以關(guān)鍵字開(kāi)頭的部分組成。VESTA從BEGIN_BLOCK_DATAGRID部分讀取體數(shù)據(jù)。為了使等值面與結(jié)構(gòu)模型重疊成為可能,*.xsf還應(yīng)包含(1)PRIMEVEC和PRIMCOORD部分或(2)CONVVEC和CONVCOORD部分。此外,PRIMVEC或CONVVEC部分中的晶格矢量必須與BEGIN_DATAGRID部分中的生成矢量一致。在XSF格式中,基本晶格矢量(PRIMVEC)和笛卡爾坐標(biāo)的單位是?。

          17.5 輸出文件

          17.5.1 數(shù)據(jù)文件

          結(jié)構(gòu)數(shù)據(jù)

          1、VESTA原始格式(*.vesta)

          當(dāng)前顯示的數(shù)據(jù)的全部信息保存在VESTA格式的文本文件*.vesta中。VESTA格式的文件包含所有結(jié)構(gòu)數(shù)據(jù)和圖形設(shè)置,而體數(shù)據(jù)不直接記錄在*.vesta中,而從外部文件導(dǎo)入。存儲(chǔ)體數(shù)據(jù)的文件的目錄和名稱記錄在*.vesta中,作為從*.vesta的目錄到體數(shù)據(jù)文件的相對(duì)路徑。它可以將當(dāng)前數(shù)據(jù)的全部信息保存在一個(gè)小文件中,而無(wú)需復(fù)制龐大的體數(shù)據(jù)。

          可以選擇以相同的方式從外部文件導(dǎo)入結(jié)構(gòu)數(shù)據(jù)。防止結(jié)構(gòu)數(shù)據(jù)直接記錄在*.vesta中,使用帶有Link選項(xiàng)的Import Data對(duì)話框?qū)虢Y(jié)構(gòu)數(shù)據(jù)(見(jiàn)6.3.6節(jié))。文件名*。ORFFE輸出的*.ffe文件的名稱也記錄在*.vesta中,因此在重新打開(kāi)*.vesta文件后,*.ffe中記錄的幾何參數(shù)將自動(dòng)列在Geometrical Parameters對(duì)話框中(見(jiàn)14.2節(jié))。使用RIETAN-FP進(jìn)行Rietveld分析后,如果*.vesta文件和標(biāo)準(zhǔn)輸入文件*.ins在同意文件夾中,*.vesta中的晶格和結(jié)構(gòu)參數(shù)會(huì)自動(dòng)更新。

          2、Chem3D(*.cc1)

          http://openbabel.org/docs/2.3.1/FileFormats/3D_viewer_Formats.html

          3、Crystallographic Information File晶體學(xué)信息文件(CIF; *.cif)

          http://www.iucr.org/resources/cif/

          4、DL_POLY輸入文件(*.config)

          https://www.scd.stfc.ac.uk/Pages/DL_POLY.aspx

          5、Protein Data Bank蛋白質(zhì)數(shù)據(jù)庫(kù)(PDB; *.pdb)

          http://www.wwpdb.org/

          6、RIETAN-FP/2000的用戶輸入文件(*.ins)

          http://fujioizumi.verse.jp/download/download_Eng.html

          輸出*.ins的功能,使得能夠使用VESTA讀取各種格式的晶體數(shù)據(jù)文件,模擬粉末衍射圖譜,并使用RIETAN-FP進(jìn)行后續(xù)的Rietveld精修。請(qǐng)注意,RIETAN-2000和RIETAN-FP的標(biāo)準(zhǔn)輸入文件彼此不兼容。VESTA使用模板文件導(dǎo)出RIETAN-FP/2000的輸入文件,默認(rèn)模板文件template.ins,具有RIETAN-FP格式。如果需要RIETAN-2000格式的標(biāo)準(zhǔn)輸入文件,請(qǐng)?jiān)赑references對(duì)話框中將模板文件更改為RIETAN2000格式的文件(請(qǐng)參見(jiàn)第16章)。

          在Rietveld精修或使用RIETAN-FP模擬粉末衍射圖譜時(shí),應(yīng)選擇嵌入RIETAN-FP的STRUCTURE TIDY的以下標(biāo)準(zhǔn)晶格設(shè)置:

          · 單斜晶系:b軸單獨(dú)設(shè)置(β≠90°),

          · 三方晶系:六邊形晶格(a=b≠c,γ=120°),

          · 中心對(duì)稱空間群:反演心位于原點(diǎn)處(原點(diǎn)選擇2)。

          除非采用這三種標(biāo)準(zhǔn)設(shè)置,被納入RIETAN-FP中的LAZY PULVERIX無(wú)法生成正確的衍射指數(shù)hkl及其多重性。因此,VESTA在導(dǎo)出RIETAN-FP/2000格式的*.ins時(shí),會(huì)自動(dòng)將晶體結(jié)構(gòu)的晶格設(shè)置轉(zhuǎn)換為標(biāo)準(zhǔn)晶格設(shè)置。

          需要指出的是,數(shù)據(jù)庫(kù)中記錄的部分晶體數(shù)據(jù)中的分?jǐn)?shù)坐標(biāo)的有效位數(shù)太小,例如0.3333而不是0.333333。在這種情況下,請(qǐng)?jiān)谳敵?.ins之前將有效位數(shù)增加到6或7。

          7、VASP(POSCAR, *.vasp)

          http://www.vasp.at/

          8、VRML(*.wrl)

          http://www.web3d.org/x3d/specifications/vrml/

          9、XMol XYZ(*.xyz)

          http://en.wikipedia.org/wiki/XYZ_file_format

          http://openbabel.org/docs/2.3.1/FileFormats/XYZ_cartesian_coordinates_format.html

          10、P1結(jié)構(gòu)(*.p1)

          存儲(chǔ)晶格參數(shù)和單位晶胞中所有原子的原子位置的簡(jiǎn)單文本文件。原子位置用分?jǐn)?shù)坐標(biāo)表示,晶體的空間群被轉(zhuǎn)換成P1(三斜晶系,第1號(hào))。在計(jì)算模擬中建立初始原子構(gòu)型時(shí),此格式非常有用。

          11、分?jǐn)?shù)坐標(biāo)(*.xtl)

          xtl文件格式的簡(jiǎn)單文本文件,存儲(chǔ)當(dāng)前圖形區(qū)域中顯示的所有原子的原子位置。原子位置用分?jǐn)?shù)坐標(biāo)表示。為了方便起見(jiàn),晶體的空間群被視為P1(三斜晶系,第1號(hào))。

          12、MADEL輸入文件(*.pme)

          雖然VESTA可以執(zhí)行MADEL(見(jiàn)14.5節(jié)),但MADEL的輸入文件*.pme,應(yīng)手動(dòng)編輯,以計(jì)算間隙(空位)位置的靜電位勢(shì),其分?jǐn)?shù)坐標(biāo)必須輸入*.pme尾部的FORMAT(3F9.6)。強(qiáng)烈建議使用RIETAN-FP系統(tǒng)分發(fā)文件中包含的RIETAN-FP–VENUS集成輔助環(huán)境,編輯*.pme并運(yùn)行MADEL將其輸入Hidemaru Editor。有關(guān)上述輔助環(huán)境的詳細(xì)信息,請(qǐng)閱讀分發(fā)文件中的Readme_macros.txt。

          使用此格式導(dǎo)出文件時(shí),系統(tǒng)會(huì)提示輸入兩個(gè)參數(shù),RADIUS和REGION(請(qǐng)參見(jiàn)14.5節(jié))。有關(guān)要輸入*.pme的這些參數(shù)的詳細(xì)信息,請(qǐng)參閱MADEL的用戶手冊(cè)。13、STRUCTURE TIDY輸入文件(*.sto)

          體數(shù)據(jù)

          14、PRIMA二進(jìn)制格式(*.pri)

          15、通用體數(shù)據(jù)格式(*.3ed)

          16、周期性體數(shù)據(jù)格式(*.grd)

          17、通用體數(shù)據(jù)格式(二進(jìn)制)(*.ggrid)

          導(dǎo)出體數(shù)據(jù)時(shí),最推薦使用通用體數(shù)據(jù)格式。它是無(wú)損的,但是這種格式的文件大小比文本格式甚至其他一些二進(jìn)制格式的文件小得多。對(duì)于周期性體數(shù)據(jù),由于更好的壓縮效率,下面描述的*.pgrid是首選的。

          18、周期性體數(shù)據(jù)格式(二進(jìn)制)(*.pgrid)

          此文件格式與*.ggrid格式相似,但假設(shè)網(wǎng)格具有周期性以最小化數(shù)據(jù)冗余。當(dāng)有兩個(gè)以上的對(duì)稱操作(由空間群信息集生成或由用戶直接編輯)時(shí),只有非對(duì)稱單元中的網(wǎng)格數(shù)據(jù)記錄在*.pgrid中。

          19、壓縮體數(shù)據(jù)格式(*.m3d)

          二維數(shù)據(jù)

          假設(shè)已打開(kāi)2D Data Display窗口,在Create New Slice對(duì)話框中選擇選項(xiàng)“(hkl)plane defined by two vectors”或“project along [hkl] axis”(參見(jiàn)15.5節(jié))。然后,就可以通過(guò)從File菜單中選擇2D Data Display項(xiàng),輸出2D Data Display窗口中顯示的二維數(shù)據(jù)。請(qǐng)注意,當(dāng)選擇第一個(gè)選項(xiàng)“(hkl) plane in the bounding box”時(shí),此功能將被禁用。

          例如,金紅石型TiO2中距離原點(diǎn)0.5d的(100)晶面上的電子密度輸出如下:第六行中的兩個(gè)整數(shù)(65和65)是沿x軸和y軸的分隔數(shù)。每個(gè)數(shù)據(jù)行中的三個(gè)數(shù)據(jù)分別是X、Y和密度,其中X和Y分別是從二維圖的原點(diǎn)算起的X和Y坐標(biāo)(單位:?)。

          17.5.2 光柵圖像

          1、BMP

          2、EPS

          3、JPEG

          4、JPEG 2000

          5、PNG

          6、PPM

          7、RAW

          8、RGB(SGI)

          9、TGA

          10、TIFF

          圖形區(qū)域和2D Data Display窗口中顯示的結(jié)構(gòu)和體數(shù)據(jù)的圖像可以記錄在具有各種圖形格式的文件中。保存存儲(chǔ)位圖圖像的文件時(shí),在File菜單中選擇Export Raster Image...。導(dǎo)出的圖形文件的圖像大小將放大為圖形區(qū)域大小的倍數(shù)。在文件選擇對(duì)話框中輸入文件名后,將輸入比例因子。VESTA可以導(dǎo)出超出窗口最大寬度和高度的巨大圖像,這些圖像在啟動(dòng)VESTA后顯示在文本區(qū)域,例如:

          對(duì)象的分辨率,即原子和鍵的疊層和切片數(shù),也由Preferences對(duì)話框中設(shè)置的兩個(gè)因子Scale和Increasing factor for stacks/slices進(jìn)行縮放(請(qǐng)參見(jiàn)12.1.2、12.1.3節(jié)和第16章)。

          17.5.3 矢量圖像

          1、封裝式PostScript(EPS)

          2、便攜式文檔格式(PDF)

          3、PostScript(PS)

          4、可縮放矢量圖形(SVG)

          圖形區(qū)域和主窗口中顯示的結(jié)構(gòu)和體數(shù)據(jù)的圖像可以保存為矢量圖像。當(dāng)保存存儲(chǔ)矢量圖像的文件時(shí),在File菜單中選擇Export Vector Image...。導(dǎo)出矢量圖像有一些限制。根據(jù)體數(shù)據(jù)著色的等值面和切面的顏色不能用矢量圖像格式表示。多面體、晶面和等值面的半透明多邊形在除PDF以外的所有格式中都變得不透明。

          17.5.4 輸出文本

          通過(guò)在File菜單中選擇Save Output Text...,可以將文本區(qū)的內(nèi)容保存為文本文件。

          欲善其事,必先利其器。要想開(kāi)發(fā)速度高,開(kāi)發(fā)工具要選好。

          接下來(lái)給大家推薦10款CSS代碼編輯器。

          Visual Studio Code

          與其他代碼編輯器相比,VisualStudioCode是一個(gè)相對(duì)較新的代碼編輯器,它已迅速成為當(dāng)前最流行的代碼編輯器之一,尤其是在web開(kāi)發(fā)人員中。

          它為許多現(xiàn)成的語(yǔ)言提供了大量語(yǔ)法高亮顯示,包括CSS和CSS預(yù)處理器,如SCSS和LESS。一些擴(kuò)展,如CSS IntelliSense、CSS Peek和CSS模塊,使其在使用CSS時(shí)更加強(qiáng)大。

          顯著特點(diǎn):速度快,可與Gulp和Grunt等多種語(yǔ)言和工具以及大量擴(kuò)展一起開(kāi)箱即用。

          Notepad++

          一個(gè)免費(fèi)的源代碼編輯器,尤其是Windows中的“記事本”替代品。它簡(jiǎn)單、運(yùn)行速度快,支持多種語(yǔ)言,包括CSS,并具有Word完成、函數(shù)完成和函數(shù)參數(shù)提示等功能,以幫助在編寫CSS時(shí)提高效率。

          顯著特點(diǎn):語(yǔ)法高亮顯示和折疊、宏錄制和回放以及文檔映射。

          WebStorm

          JetBrain的IDE實(shí)現(xiàn)了包括CSS在內(nèi)的所有內(nèi)容的正確自動(dòng)完成,您還可以隨時(shí)獲得有關(guān)CSS問(wèn)題的通知。它還集成了Styleint等開(kāi)箱即用的工具,可以幫助您格式化并保持CSS代碼的一致性。

          顯著特點(diǎn):與Stylent、Grunt、Gulp和NPM等web開(kāi)發(fā)工具無(wú)縫集成。用于調(diào)試和跟蹤的內(nèi)置工具,以及更智能的自動(dòng)完成。

          Coda

          一個(gè)內(nèi)置CSS編輯器的高級(jí)代碼編輯器,為您提供兩種CSS編輯模式,以獲得更靈活的設(shè)計(jì)體驗(yàn),能夠在更改后立即看到結(jié)果。除此之外,您還可以在編輯器中的實(shí)時(shí)預(yù)覽工具中覆蓋網(wǎng)站的CSS。

          顯著特點(diǎn):TouchBar集成、實(shí)時(shí)預(yù)覽和內(nèi)置SFTP/FTP。

          Atom

          Github構(gòu)建的免費(fèi)開(kāi)源代碼編輯器。它不僅僅具有代碼編輯功能。它有一個(gè)與GitHub無(wú)縫集成的嵌入式Git控件。您還可以為CSS安裝許多附加組件,以增強(qiáng)CSS編輯的體驗(yàn)。

          顯著特點(diǎn):可通過(guò)各種API輕松擴(kuò)展和破解,可與CSS和流行的CSS預(yù)處理器一起使用。

          Sublime Text

          一個(gè)流行的web開(kāi)發(fā)代碼編輯器。它跨平臺(tái)工作,本機(jī)支持多種語(yǔ)言和標(biāo)記語(yǔ)言,包括CSS,并提供多種擴(kuò)展以改善編輯器中的CSS編輯體驗(yàn)。它可以說(shuō)是現(xiàn)代代碼編輯器的基本靈感。它引入了多行選擇、"Go to Anywhere"和"Command Pallete"等功能,這也提高了開(kāi)發(fā)人員的工作效率。

          值得注意的功能:超快的高級(jí)代碼編輯功能,如"Go to Anywhere"和多行選擇,以及subl CLI。

          Brackets

          由Adobe Systems專門為web開(kāi)發(fā)創(chuàng)建的免費(fèi)輕量級(jí)編輯器。它是用JavaScript、HTML和CSS編寫的,并且本機(jī)支持CSS預(yù)處理器。

          它介紹了使用所謂的“內(nèi)聯(lián)編輯”進(jìn)行編輯的獨(dú)特體驗(yàn)。您可以按Command/Ctrl+E,它將在內(nèi)聯(lián)窗口中顯示具有該ID的所有CSS選擇器,并允許您直接在當(dāng)前文件中編輯CSS選擇器,而不是在多個(gè)文件之間跳轉(zhuǎn)。

          Espresso

          用于代碼編輯的漂亮macOS應(yīng)用程序。它帶有一個(gè)很好的GUI工具,可以輕松編輯CSS樣式。編輯樣式表時(shí),此工具將顯示在右側(cè)邊欄的下半部分。它允許您調(diào)整文本樣式、文本顏色、對(duì)齊方式、字體、大小、行高以及布局,如填充、邊距、顯示樣式、浮動(dòng)等。

          顯著特點(diǎn):用于編輯CSS的GUI工具,本機(jī)SCSS和LESS支持,自動(dòng)完成。

          TextMate

          macOS的代碼編輯器,具有一些高級(jí)編輯功能,并支持多種編程語(yǔ)言(包括CSS)。TextMate因其TextMate語(yǔ)法.tmLanguage而頗受歡迎,該語(yǔ)法被許多流行的代碼編輯器(如Atom和Sublime Text)采用,以創(chuàng)建語(yǔ)言的自定義語(yǔ)法高亮顯示。

          顯著特點(diǎn):本機(jī)宏支持自動(dòng)化重復(fù)任務(wù)、代碼段和Shell集成

          bbEdit

          bbEdit也稱為TextWrangler,是為macOS構(gòu)建的輕量級(jí)但高級(jí)的代碼編輯器。除了一些基本功能,如各種編程語(yǔ)言的語(yǔ)法著色、代碼折疊和代碼自動(dòng)完成,bbEdit還內(nèi)置了SFTP/FTP支持,并與各種macOS功能(如AppleScript、Automator和Unix腳本)無(wú)縫集成。

          值得注意的功能:macOS集成,以及用于編輯HTML的內(nèi)置GUI工具。

          著環(huán)境問(wèn)題越來(lái)越嚴(yán)重,人們?cè)絹?lái)越重視低碳環(huán)保的生活方式。作為碼農(nóng)的我們自然也應(yīng)該為環(huán)保做出應(yīng)有的貢獻(xiàn)。那么什么是低碳環(huán)保,簡(jiǎn)而言之就是就是低能量、低消耗、低開(kāi)支的生活方式,映射到我們的工作中就是以最低的消耗的來(lái)完成組織交給我們的任務(wù)。

          以下就以 Android 開(kāi)發(fā)為例從庫(kù)和語(yǔ)言兩方面來(lái)討論如何實(shí)現(xiàn)低碳環(huán)保的編程方式。

          從第三方庫(kù)來(lái)說(shuō)

          充分利用現(xiàn)存資源,盡可能不重復(fù)造輪子。從以往來(lái)看,如果你對(duì)現(xiàn)存的輪子有各種不滿試圖從頭寫,那么最終結(jié)局中可能性最大的就是只寫了部分后直接放棄轉(zhuǎn)而成為某個(gè)輪子的支持者,寫完且比現(xiàn)有輪子要好的可能性還不如轉(zhuǎn)行去大學(xué)城門口賣炒面。當(dāng)然如果你寫的是就是 SDK 之類的基礎(chǔ)工具,那還是盡量減少依賴為好。

          那么該如何挑選第三方庫(kù)呢?Android 的應(yīng)用層開(kāi)發(fā)雖然使用 Java 語(yǔ)言,但并不是 Java 上的庫(kù)都適合 Android 開(kāi)發(fā)。Android 使用的不是 Oracle JDK 也不是 Open JDK,而是 Google 改寫過(guò)的 Apache Harmony JDK,很多 Oracle JDK 自帶的類(特別是 javax 包下的)在 Android 中并不存在,所以使用這些方法的庫(kù) Android 不能使用。

          此外 Android 存在 65536 問(wèn)題,這個(gè)坑體現(xiàn)在以下兩點(diǎn):

          1)Android 機(jī)器在應(yīng)用的安裝過(guò)程中,系統(tǒng)會(huì)運(yùn)行 dexopt 工具,將 .dex 文件優(yōu)化為 .odex 文件,其中 dexopt 工具使用了固定的緩沖區(qū)大小來(lái)保存方法的元信息,低版本的 Android 機(jī)器上該緩沖區(qū)非常小,所以一旦方法數(shù)過(guò)多會(huì)直接導(dǎo)致 dexopt 崩潰,應(yīng)用無(wú)法運(yùn)行。

          2)Dalvik 指令集對(duì)于一個(gè) .dex 文件只能保存 65536 個(gè)方法的索引,所以一個(gè) .dex 文件即使可以擁有很多方法,但是那些多余的方法也都是無(wú)法運(yùn)行的。詳細(xì)信息可以閱讀官方的 dalvik-bytecode 的 invoke-kind {vC, vD, vE, vF, vG}, meth@BBBB 條目。

          因此選擇 Android 的第三庫(kù)需要嚴(yán)格注意控制方法的總數(shù)量。

          Android 常用庫(kù) vs J2EE 常用庫(kù)

          以下我總結(jié)了一些 J2EE 和 Android 上的常用庫(kù)的對(duì)比以供參考,使用這些庫(kù)可以有效提供編程效率,減少能量消耗:

          功能J2EEAndroid備注
          JSON 解析JacksonGsonJackson 功能全面,但太大;Gson 速度一般但勝在體積
          RestfulJerseyRetrofitJersey 面向服務(wù)端,符合 JAX-RS 標(biāo)準(zhǔn), Retrofit 面向客戶端,不符合 JAX-RS 標(biāo)準(zhǔn)
          依賴注入GuiceDaggerGuice 使用反射,Dagger 使用預(yù)編譯,效率不是一個(gè)等級(jí)的
          NoSQLMongoDBRealmRealm 兼容 Android,iOS,ReactNative,比起 Sqlite3 快得多
          單元測(cè)試JUnitRobolectric + EspressoJUnit 只能運(yùn)行在 JVM 上,Robolectric 使 Android 代碼可以運(yùn)行在 JVM 上,Espresso 簡(jiǎn)化 UI 測(cè)試流程(雖然很多情況下 UI 測(cè)試沒(méi)什么用)
          異步調(diào)用CompletableFuture/RxJavaRxJava + RxAndroid +RxLifecycle三合一基本是標(biāo)配,除此之外還可以加上 RxBinding,RxPermissions,RxAndroidAudio 等等組成完整的 Rx 大家族
          網(wǎng)絡(luò)請(qǐng)求-OkHttp/VolleyOkHttp 功能強(qiáng)大,F(xiàn)luent API 可以寫出更優(yōu)秀的代碼;Volley 由 Google 開(kāi)發(fā),代碼量小容易擴(kuò)展,有非常優(yōu)秀的隊(duì)列機(jī)制
          時(shí)間處理Java 8/Joda-Time-Java 原生時(shí)間處理 API 非常糟糕,因此 Java 8 直接加入了 Joda-Time。Joda-Time 雖然易用,但一個(gè)只是處理時(shí)間的庫(kù)有 5000 多方法對(duì)于 Android 顯然不實(shí)際,盡管有 joda-time-android 庫(kù)但通常 Android 端需要處理時(shí)間的代碼不多,建議還是直接調(diào)用難用的原生 API

          其它方法

          • 構(gòu)建良好的 Android 架構(gòu),盡量將 Context 相關(guān)的一切和業(yè)務(wù)邏輯進(jìn)行分離,使業(yè)務(wù)邏輯能夠脫離于 UI 組件進(jìn)行本地測(cè)試。MVC,MVP,MVVM,Flux 之類的只有適合自己才是最好的。也可以參考下 Google 最近開(kāi)始編寫的 Android 架構(gòu)的示例代碼,不得不說(shuō) Google 這一步做得是實(shí)在有點(diǎn)晚。

          • 引入 Fragment 后 Android 應(yīng)用的生命周期 過(guò)于恐怖,所以盡管 Google 提倡使用 Fragment,但還是能少用就盡量少用。

          • 使用 Timber + Hugo 記錄 Log 信息而不是使用原生的 Log 工具,這樣無(wú)需再自己拼接類名,方法名,參數(shù)名和參數(shù)值,也不用為了使 Log 更容易被識(shí)別加上一堆=========afafaf=============或者 ~~~~~~~~~~~~~~~~~~~~~ 這樣的提示符。

          • 使用 Android DataBinding,盡管你不一定喜歡它的數(shù)據(jù)綁定方式。但是使用了 DataBinding 后你無(wú)需調(diào)用 findViewById 后再?gòu)?qiáng)制進(jìn)行類型轉(zhuǎn)換,也不用使用 Butter Knife 之類的庫(kù)編寫各種注解。

          • 對(duì)于圖像加載注重質(zhì)量和包大小可以使用 Picasso,注重加載速度或者需要支持 GIF 類型和大圖片可以使用 Google 人出品的 Glide。除此之外還有老牌的 Universal Image Loader 和相對(duì)較新的 Facebook 出品的 Fresco(Fresco 在這里面是重量級(jí)選手,無(wú)論是功能還是體積,剛推出時(shí)坑不少,還有非常嚴(yán)重的內(nèi)存泄露,目前該庫(kù)已經(jīng)作為 React Native 的圖片加載庫(kù),不知道這些問(wèn)題都解決了么)

          • 使用 IDEA Live Template 保存常用的類或方法的模板,這是我最常使用的方式,這樣有時(shí)甚至可以減少近一半的工作量。

          • 強(qiáng)制豎屏,Android 上除了視頻播放和游戲大部分情況下豎屏足以,根據(jù) 2-8 法則很多時(shí)候?qū)iT適配橫屏是很大的資源浪費(fèi)

          從語(yǔ)言本身來(lái)說(shuō)

          以上的方法在實(shí)現(xiàn)低碳環(huán)保的功能上還是非常有限的,還有一種方法比較偏的方法就是直接從最根本的語(yǔ)言層面進(jìn)行著手。

          使用 Lambda 表達(dá)式

          使用 Lambda 表達(dá)式可以省去不少代碼,可惜直到 Java 8 才支持,索性的是 Android 上有一些解決方法。

          使用 Retrolambda Gradle Plugin

          Retrolambda Gradle 插件可以在編譯時(shí)通過(guò)字節(jié)碼轉(zhuǎn)換使 Android 能夠使用 Lambda 表達(dá)式。

          開(kāi)啟 Jack 與 Jill

          在介紹 Jack 與 Jill 之前先來(lái)看看 Android 那坑爹的構(gòu)建系統(tǒng),以下圖片來(lái)自 Google 官方文檔,請(qǐng)注意這只是一個(gè)大綱,而且有些過(guò)時(shí),實(shí)際更復(fù)雜,想想如果沒(méi)有 IDE 自己手動(dòng)敲的痛苦吧:

          而 Jack 與 Jill 就是在 Android M 時(shí) Google 為了簡(jiǎn)化以上流程而推出的構(gòu)建工具。

          以前的主要流程

          為了減小 I/O 讀取的次數(shù),dx 工具將所有 .class 文件合并成 .dex 文件

          javac (.java --> .class) --> dx (.class --> .dex)

          使用 Jack 與 Jill

          Jill 將第三方 .class 文件和 .jar 文件轉(zhuǎn)換為 .jayce 文件。

          Jack 將 .java 和 .jayce 文件合并后轉(zhuǎn)換為優(yōu)化過(guò)的 .dex 文件。

          Jack (.java --> .jack --> .dex)

          Jill (.class --> .jayce)

          當(dāng)然 Jack 實(shí)際是一個(gè)工具鏈,除了以上功能 Jack 還包含了 multidex, proguard 等大量功能,直接替代了原來(lái)構(gòu)建過(guò)程中的很多工具。

          使用 Jack 與 Jill 還有一個(gè)吸引人的特點(diǎn)是可以在今年將發(fā)布的 Android N 平臺(tái)使用上大部分 Java 8 的功能。感興趣的人可以現(xiàn)在就去嘗試一下,但是需要注意的是 IDE 必須大于 Android Studio 2.1 (preview),SDK 平臺(tái)必須為 Android N Preview SDK。

          此外由于 Java 8 提供的 Lambda 表達(dá)式實(shí)際就是通過(guò)函數(shù)式接口實(shí)現(xiàn)的,所以在使用 Jack 與 Jill 后這一功能也可以直接使用在 Android N 以前的平臺(tái),而不用使用 Retrolambda 這些第三方工具(當(dāng)然其它的 Java 8 功能都不支持)

          目前來(lái)說(shuō) Jack 與 Jill 有一個(gè)很大的缺點(diǎn)就是速度較慢,不支持 Instant Run。此外由于不生成中間狀態(tài)的字節(jié)碼文件,所以開(kāi)啟 Jack 與 Jill 后基于字節(jié)碼的各種工具(如 JaCoCo, Mockito)都將無(wú)法使用。(注:Gradle 插件在 1.5 版本提供了 Transform API,可以讓我們直接對(duì)生成的 dex 文件進(jìn)行處理,但是目前 Jack 與 Jill 不支持,所以使用該種方式 JaCoCo 仍然無(wú)法使用)

          換種語(yǔ)言

          相比較 Lambda 表達(dá)式也許換種語(yǔ)言是種更有效的方法。以下就介紹一下適用于 Android 開(kāi)發(fā)的其它語(yǔ)言,當(dāng)然這并不是說(shuō)真的需要在實(shí)際工作中應(yīng)用。更多得是因?yàn)槿绻阒粫?huì)用錘子,那你眼里的所有東西都是釘子,換種語(yǔ)言是為了開(kāi)拓思路,了解在其它語(yǔ)言中是如何實(shí)現(xiàn)同樣的功能的。

          Java + Native

          該方案以 Java 代碼為主,以少量 Native 代碼為輔。主要有兩種實(shí)現(xiàn)方式:

          Java + C/C++

          很明顯這種方法非常不環(huán)保,基于 NDK 的開(kāi)發(fā)非常復(fù)雜,出了錯(cuò)誤也不好調(diào)試,目前這種方式主要用于 Cocos2D-X 這種游戲引擎。

          Java + Go

          Go 從 1.5 版本開(kāi)始同時(shí)支持 Android 和 iOS 開(kāi)發(fā)。由于 Go 是 Google 親兒子所以 1.5 出來(lái)時(shí)大家對(duì)未來(lái)都非常期待。不過(guò)至今為止實(shí)際發(fā)展非常緩慢,文檔非常稀少。相比較使用 C/C++ 方式使用 Go 有這么幾個(gè)特點(diǎn):

          優(yōu)點(diǎn):

          • 語(yǔ)法簡(jiǎn)單,開(kāi)發(fā)迅速,不用寫頭文件,不用寫 Makefile,不用手動(dòng)寫 Native 方法,借助插件 Go 代碼會(huì)被直接編譯成包含 .so 文件的 .aar 庫(kù),導(dǎo)入 Android 工程后就像寫原生 Java 代碼一樣直接使用即可。

          缺點(diǎn):

          • 文檔奇缺,發(fā)展緩慢劇。

          • 目前只支持 arm 架構(gòu)。

          • 有 Bug,我寫的代碼編譯版本選擇 API 22 正常運(yùn)行,選擇 API 23 上直接奔潰。

          Native + Java

          該方案以 Native 代碼為主,以少量 Java 代碼為輔。最大的特點(diǎn)就是提倡以同一種語(yǔ)言為不同平臺(tái)編寫不同代碼,而不是一套代碼到處運(yùn)行。主要代表有以下幾種:

          RubyMotion

          RubyMotion 由 MacRuby 的開(kāi)發(fā)者發(fā)明,可以通過(guò) Ruby 代碼編寫 iOS 和 Android 代碼。

          優(yōu)點(diǎn):

          • 提供了 Android 上的幾乎所有的 API 的 Ruby 實(shí)現(xiàn),也可以直接使用 Java 庫(kù)。

          缺點(diǎn):

          • iOS 還有些文檔,Android 方面則沒(méi)有任何像樣的官方文檔。導(dǎo)致我在寫的時(shí)候需要打開(kāi) IDEA 先用 Java 寫一遍大致框架然后再用 Ruby 進(jìn)行改寫。

          • 不支持直接調(diào)用 Java 代碼,必須使用打包好后的 Java 庫(kù)。

          • 除了官方發(fā)布的包,不支持其它任何 Gem 上的包。

          • 由于沒(méi)有錢付正式版,所以我使用的是試用版,使用時(shí)不但難以調(diào)試,速度慢,而且還 Bug 滿天飛,完全沒(méi)有寫 Ruby 的爽快感,正式版估計(jì)會(huì)好點(diǎn)。

          ReactNative

          ReactNative 由 Facebook 在去年發(fā)布,一經(jīng)發(fā)布瞬間成為 Github 上的網(wǎng)紅??梢允褂?JavaScript 進(jìn)行代碼的編寫以及動(dòng)態(tài)更新是其最大特點(diǎn)。然而相比較 iOS 來(lái)說(shuō) Android 版本并沒(méi)有發(fā)布多少時(shí)間,目前還有不少問(wèn)題。由于最近在看 ReactNative 所以這里寫得稍微詳細(xì)點(diǎn):

          優(yōu)點(diǎn):

          • 使用 JavaScript 編寫,ES 6 語(yǔ)法對(duì)于 Java 程序員可能更有親和力。

          • Flex 布局和 JSX 語(yǔ)法和 Android 原生布局方式非常相近,很多屬性幾乎就是換個(gè)名字,容易上手。

          • 支持 HotLoad,寫個(gè)界面刷一下就行了,Android 開(kāi)發(fā)者終于不用忍受 Gradle 那漫長(zhǎng)的編譯過(guò)程。

          缺點(diǎn):

          • 目前只是 0.2x 版本,不穩(wěn)定,并且 React Native 本身使用了不少已經(jīng)標(biāo)示為廢棄的 API, API 有很大可能會(huì)大更新。

          • 如果碰到框架本身 Bug,基本沒(méi)有修復(fù)的可能性,只能被動(dòng)等待官方出解決方案或者切換為 Java 平臺(tái)。

          • 原生 Android 開(kāi)發(fā)就有各種兼容性問(wèn)題,特別是對(duì)于國(guó)內(nèi)小米,華為,魅族等平臺(tái),國(guó)外的 React Native 是否能處理得好不得而知。

          • ReactNative 框架自身綁定了不少第三方庫(kù),雖然這些庫(kù)都挺有名的,但也不能保證人人喜歡,人人用得到。

          • 沒(méi)有重用機(jī)制,導(dǎo)致 ListView 效率問(wèn)題。

          • 沒(méi)有布局管理器,組件間嵌套嚴(yán)重,實(shí)際代碼中會(huì)有大量 嵌套 的情況,不適合寫復(fù)雜的布局。

          • Android 有多種類型 Resource 文件,還有 10 多種限定修飾符,React Native 基本都無(wú)法使用,意味著在面對(duì)屏幕適配,i18n,切換主題等問(wèn)題時(shí)會(huì)非常蛋疼。

          • 目前只支持老式的 Drawable 目錄下的圖片資源,不支持 5.0 以后的 Mipmap 目錄下的資源。

          • Flux 和在其基礎(chǔ)上的 Redux 架構(gòu)與 Android 傳統(tǒng)開(kāi)發(fā)理念不符,很難吸引到廣大碼農(nóng)。

          除了以上兩個(gè)之外 Xamarin 也屬于這一類,不過(guò)上周微軟的一些決定使我個(gè)人并不看好它,有興趣的人可以自行到 Reddit 和 Twitter 上查閱 Xamarin + Libgdx + Microsoft 的相關(guān)信息。

          其它 JVM 語(yǔ)言

          相比較以上方案,使用其它 JVM 語(yǔ)言的最大特點(diǎn)就是可以和 Java 進(jìn)行無(wú)縫切換,開(kāi)發(fā)方式上沒(méi)有什么變更,很容易讓人接受。

          Groovy

          Groovy 官方從 2.4 開(kāi)始就支持了 Android 開(kāi)發(fā)。Groovy 本身是動(dòng)態(tài)語(yǔ)言,效率較低。但是可以通過(guò)開(kāi)啟靜態(tài)編譯來(lái)提高效率。由于 Groovy 在處理 XML 方面是一絕,所以如果你的應(yīng)用服務(wù)器是基于 SOAP 的話,那么使用 Groovy 替換 Java 無(wú)疑是更好的選擇,原生的 DOM,SAX,PULL 方式使用起來(lái)都太痛苦了。

          替換成 Groovy 后最大的優(yōu)點(diǎn)就是上手沒(méi)有任何什么難度, 畢竟所有 Android 開(kāi)發(fā)者都寫過(guò) Groovy (build.gradle 實(shí)際就是 Groovy 源文件),而缺點(diǎn)就是編譯速度會(huì)更慢。

          Scala

          Android 應(yīng)用中常常需要將上下文傳來(lái)傳去,所以很多人都會(huì)在每個(gè) Activity 寫上 mContext=this 這樣沒(méi)營(yíng)養(yǎng)的代碼。而使用了 Scala 后借助隱式參數(shù) + 隱式轉(zhuǎn)換 + 隱式類這三兄弟就不用寫這些沒(méi)有營(yíng)養(yǎng)的代碼。除此之外借助 Scala 各種 FP 特性代碼量也可以得到大量減少。

          但是替換成 Scala 后有一個(gè)致命的弱點(diǎn)就是主流的 Scala 的 2.11.x 版本核心方法多達(dá) 5w。這意味著加上 Android 的原生代碼,即使你一行代碼沒(méi)寫,僅僅是集成 Scala 運(yùn)行環(huán)境后就超過(guò)了 65536 的限制。即使開(kāi)啟了 proguard 刪除掉那些不用的代碼這個(gè)問(wèn)題也沒(méi)辦法根本解決,所以或許將 Scala 搬到 Android 平臺(tái)并不是一個(gè)好的解決方案。

          Kotlin

          Kotlin 是 JetBrain 研發(fā)的一門運(yùn)行在 JVM 上的語(yǔ)言,官方支持 Android 開(kāi)發(fā),語(yǔ)法和其之后發(fā)布的 Swift 非常相似,所以也有人開(kāi)發(fā)出了 Kotlin 2Swift 的工具,詳細(xì)對(duì)比可以見(jiàn)Swift is like Kotlin。Kotlin 的語(yǔ)法可以看做是 Scala++—,其語(yǔ)法借鑒了 Scala,但是也去除了 Scala 中大量復(fù)雜的概念。

          在所有 JVM 語(yǔ)言中,目前個(gè)人最推薦使用 Kotlin 進(jìn)行 Android 開(kāi)發(fā)。有以下幾個(gè)原因:

          • Kotlin 由 JetBrain 開(kāi)發(fā),所以對(duì) Android Studio 有很好的支持。

          • Android 界舉足輕重的 Jake Wharton 大神和其所在的公司 Square 都很欣賞 Kotlin,將一些 Android 庫(kù)改寫為了 Kotlin 版本。

          • Google Android 項(xiàng)目組也對(duì) Kotlin 感興趣,目前我們常使用的 Databinding 的編譯器就是 Kotlin 寫的。

          • Kotlin 的運(yùn)行庫(kù)只有不到 7000 個(gè)方法,這意味著它比 v4 還要小。

          • Google 目前和 Oracle 的官司越演越烈,以前有傳言 Google 會(huì)使用 Go 作為 Android 的一類語(yǔ)言,但是目前從發(fā)展速度來(lái)看可能性很小。近日又有傳言 Google 會(huì)使用 Swift 來(lái)代替 Java,個(gè)人覺(jué)得相比較而言不如說(shuō) Kotlin 可能性更大。(補(bǔ):寫完這段不久后 Swift 就倉(cāng)庫(kù)就出現(xiàn)了 For Android 的 Pull Request,看了下這玩意是基于 JNI 的,屬于上面說(shuō)的 Java + Native 的開(kāi)發(fā)方式,對(duì)于編寫應(yīng)用來(lái)說(shuō)用處不大,不過(guò)相信會(huì)被不少人炒作一段時(shí)間)

          • Kotlin 學(xué)習(xí) Clojure 也分為 Kotlin on JVM 和 Kotlin on JavaScript 兩個(gè)版本。其中 Kotlin on JavaScript 目前內(nèi)置了 JQuery,但是本身功能很弱,只能寫些原始的 JS 代碼。如果發(fā)展起來(lái)的話,說(shuō)不定將來(lái)可以用于編寫 ReactNative 代碼。

          • Kotlin 沒(méi)有什么歷史負(fù)擔(dān),增加新特性時(shí)無(wú)需像 Java 一樣思考再三。以下為 Kotlin 目前的 RoadMap,可以看到諸如協(xié)程之類的功能 Kotlin 都會(huì)在語(yǔ)言層面實(shí)現(xiàn),而不用像 Java 一樣必須依賴 Quasar 這種第三方庫(kù)在字節(jié)碼方面做文章才行。如果等 Java 實(shí)現(xiàn)的話搞不好需要等到 Java 20.

          就我個(gè)人開(kāi)發(fā)中常使用的 Kotlin 功能有這么幾種:

          • 方法擴(kuò)展,該功能可以給已存在的類添加方法,本質(zhì)上其實(shí)現(xiàn)類似 Scala 中的隱式類。所以你可以直接給 Activity 添加 toast, alert 功能。

          • 使用 DSL 語(yǔ)句來(lái)編寫界面

          • internal 訪問(wèn)權(quán)限。我們知道 Java 中包與包是沒(méi)有任何關(guān)系的,這意味這 a.b 和 a.b.c 實(shí)際是兩個(gè)包。所以在分層時(shí) a.b.c 中不得不暴露大量的 public 方法給 a.b 包中所在的類。而在 SDK 開(kāi)發(fā)中為了有良好的封裝性,盡量暴露更少的接口,所以往往不得不將大部分類都放在同一個(gè)包中,然后通過(guò) default 訪問(wèn)權(quán)限來(lái)限制外部訪問(wèn)。類少的時(shí)候還能夠忍受,類的一多的話就會(huì)非常混亂。Kotlin 中的 internal 訪問(wèn)權(quán)限可以限制只能屬于同一個(gè)模塊中的類進(jìn)行訪問(wèn),其它模塊無(wú)法訪問(wèn)。那么什么是模塊?在 Kotlin 中就是一個(gè) jar 包,所以這功能對(duì) SDK 來(lái)說(shuō)就是神器。

          • Kotlin Android Extension。使用后無(wú)需修改任何代碼,直接就可以在代碼中使用 Xml 中聲明的任何的控件。

          最后附上一段簡(jiǎn)單的 kotlin 代碼

          relativeLayout {

          textView {

          id=android.R.id.text1

          text="Loading..."

          }.lparams {

          centerInParent()

          }

          editText {

          id=android.R.id.edit

          hint="Page Count for retain"

          inputType=InputType.TYPE_NUMBER_VARIATION_NORMAL

          }.lparams {

          below(android.R.id.text1)

          centerInParent()

          }

          button("click") {

          }.lparams {

          below(android.R.id.edit)

          centerInParent()

          }.onClick {

          println("hello world")

          }

          }.style {

          when(it){

          is TextView -> it.textSize=20f

          }

          }

          扯了這么多可能有很多人覺(jué)得就這些怎么可能實(shí)現(xiàn)低碳環(huán)保的編程。沒(méi)錯(cuò),你想的很對(duì),要實(shí)現(xiàn)低碳環(huán)保的編程方式說(shuō)到底只有唯一一個(gè)有效的方法就是說(shuō)服你的項(xiàng)目經(jīng)理或者其他有話語(yǔ)權(quán)的人取消或修改掉那些不環(huán)保的需要,僅此而已。本次扯淡到此為止。以上 Go 和 Ruby 編寫 Android 應(yīng)用的示例可以見(jiàn) AndroidDemoInOtherLanguages。其它 JVM 語(yǔ)言編寫 Android 應(yīng)用的示例可以見(jiàn) AndroidDemoIn4Languages。

          ?―――――――――↓―――――――――?

          原文作者來(lái)自 MaxLeap 團(tuán)隊(duì)_UX成員:Sidney Xu

          歡迎關(guān)注微信訂閱號(hào):從移動(dòng)到云端

          歡迎加入我們的MaxLeap活動(dòng)群:555973817,我們將不定期做技術(shù)分享活動(dòng)。


          主站蜘蛛池模板: 中文字幕av无码一区二区三区电影| 久久精品国产AV一区二区三区| 国产伦精品一区二区三区无广告| 日本一区二区三区在线视频观看免费 | 骚片AV蜜桃精品一区| 国产产一区二区三区久久毛片国语| 91香蕉福利一区二区三区| 久久精品无码一区二区三区| 午夜无码一区二区三区在线观看| 中文字幕一区二区三区久久网站| 精品乱码一区内射人妻无码| 在线播放精品一区二区啪视频| 亚洲av成人一区二区三区| 狠狠色婷婷久久一区二区| 久久综合一区二区无码| 四虎一区二区成人免费影院网址 | 久久精品无码一区二区WWW| 国产成人精品视频一区二区不卡| 激情内射亚州一区二区三区爱妻| 日亚毛片免费乱码不卡一区| 极品少妇伦理一区二区| 国产大秀视频一区二区三区| 日本无卡码免费一区二区三区| 综合一区自拍亚洲综合图区| 韩国一区二区三区| 精品福利一区3d动漫| 无码国产亚洲日韩国精品视频一区二区三区 | 亚洲日韩精品无码一区二区三区| 97精品国产福利一区二区三区| 中文字幕一区日韩在线视频| 国模无码人体一区二区| 亚欧成人中文字幕一区| 香蕉久久av一区二区三区| 成人中文字幕一区二区三区 | 国产成人精品无码一区二区老年人| AV天堂午夜精品一区二区三区| 日韩色视频一区二区三区亚洲| 国产在线视频一区二区三区| 国模吧无码一区二区三区| 无码乱人伦一区二区亚洲一| 亚洲综合av一区二区三区不卡|