2018年12月7日 星期五
Sony VAIO 筆電重灌
光碟開機設定
按 F2 進 BIOS
BOOT
External device boot 改 enabled
BOOT Priority 按 F5 上升把 external device 調到第一個
按 F10 儲存設定並重新開機
form: http://pejslin.blogspot.com/2017/02/sony-vaio.html
2018年8月28日 星期二
如何藉由使用 Excel 中的 Visual Basic 程序選取儲存格/範圍
from: https://support.microsoft.com/zh-tw/help/291308/how-to-select-cells-ranges-by-using-visual-basic-procedures-in-excel
或者,您可以啟動工作表,然後使用上述的方法 1 來選取儲存格:
或者,您可以啟動工作表,然後使用上述的方法 1 來選取儲存格:
或者,您可以啟動工作表,然後使用上述的方法 4 來選取範圍:
或者,您可以啟動工作表,然後使用上述的方法 4 來選取範圍:
或者,您可以啟動工作表,然後使用上述的方法 7 來選取具名範圍:
或者,您可以啟動工作表,然後使用上述的方法 7 來選取具名範圍:
若要選取位於使用中儲存格上方兩列和右邊三欄之間的儲存格,您可以使用下列範例:
注意 如果嘗試選取「不在工作表之內」的儲存格,將會發生錯誤。 如果使用中儲存格是在欄 A 到 D 之間,則上面的第一個範例將會傳回錯誤,因為向左移動四欄會讓使用中儲存格置於無效的儲存格位址。
如果具名範圍是在另一個 (不是使用中) 工作表上,請先啟動該工作表,然後使用下列範例來選取範圍:
請注意,這兩個範圍都必須在相同的工作表中,此範例才能正常運作。 另請注意,Union 方法無法同時在不同工作表之間使用。 例如,這一行沒有問題
但這一行
會傳回錯誤訊息:
請注意,這兩個範圍都必須在相同的工作表中,此範例才能正常運作。
本文中的範例 17-21 會參照下列範例資料集。 每一個範例都會陳述在範例資料中所選取的儲存格範圍。
當這個程式碼與範例資料表搭配使用時,會選取儲存格 A4。
當這個程式碼與範例資料表搭配使用時,會選取儲存格 A5。
當這個程式碼與範例資料表搭配使用時,會選取儲存格 A1 到 A4。
當這個程式碼與範例資料表搭配使用時,會選取儲存格 A1 到 A6。
這個程式碼會選取儲存格 A1 到 C4。 下面列出選取相同儲存格範圍的其他範例:
在某些情況下,您可能需要選取儲存格 A1 到 C6。 在此範例中,CurrentRegion 方法沒有作用,因為第 5 列是空白行。 下列範例會選取所有儲存格:
當這個程式碼與範例資料表搭配使用時,會選取儲存格 A1:A3 和 C1:C6。
1: 如何在使用中的工作表上選取儲存格
若要在使用中的工作表上選取儲存格 D5,您可以使用下列其中一個範例:ActiveSheet.Cells(5, 4).Select
- 或 -
ActiveSheet.Range("D5").Select
2: 如何在相同的活頁簿中選取另一個工作表上的儲存格
若要在相同的活頁簿中選取另一個工作表上的儲存格 E6,您可以使用下列其中一個範例:Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
- 或 -
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select
3: 如何在不同的活頁簿中選取工作表上的儲存格
若要在不同的活頁簿中選取工作表上的儲存格 F7,您可以使用下列其中一個範例:Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
- 或 -
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).Select
4: 如何在使用中的工作表上選取儲存格範圍
若要在使用中的工作表上選取範圍 C2:D10,您可以使用下列其中一個範例:ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select
ActiveSheet.Range("C2:D10").Select
ActiveSheet.Range("C2", "D10").Select
5: 如何在相同的活頁簿中選取另一個工作表上的儲存格範圍
若要在相同的活頁簿中選取另一個工作表上的範圍 D3:E11,您可以使用下列其中一個範例:Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")
Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select
6: 如何在不同的活頁簿中選取工作表上的儲存格範圍
若要在不同的活頁簿中選取工作表上的範圍 E4:F12,您可以使用下列其中一個範例:Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")
Application.Goto _
Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select
7: 如何在使用中的工作表上選取具名的範圍
若要在使用中的工作表上選取具名範圍 "Test",您可以使用下列其中一個範例:Range("Test").Select
Application.Goto "Test"
8: 如何在相同的活頁簿中選取另一個工作表上的具名範圍
若要在相同的活頁簿中選取另一個工作表上的具名範圍 "Test",您可以使用下列範例:Application.Goto Sheets("Sheet1").Range("Test")
Sheets("Sheet1").Activate
Range("Test").Select
9: 如何在不同的活頁簿中選取工作表上的具名範圍
若要在不同的活頁簿中選取工作表上的具名範圍 "Test",您可以使用下列範例:Application.Goto _
Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")
Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select
10: 如何選取相對於使用中儲存格的儲存格
若要選取位於使用中儲存格下方五列和左邊四欄之間的儲存格,您可以使用下列範例:ActiveCell.Offset(5, -4).Select
ActiveCell.Offset(-2, 3).Select
11: 如何選取相對於另一個 (不是使用中) 儲存格的儲存格
若要選取位於儲存格 C7 下方五列和右邊四欄之間的儲存格,您可以使用下列其中一個範例:ActiveSheet.Cells(7, 3).Offset(5, 4).Select
ActiveSheet.Range("C7").Offset(5, 4).Select
12: 如何選取從指定範圍位移的儲存格範圍
若要選取與具名範圍 "Test" 大小相同,但向下移動四列和向右移動三欄的儲存格範圍,您可以使用下列範例:ActiveSheet.Range("Test").Offset(4, 3).Select
Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select
13: 如何選取指定範圍和調整選取範圍大小
若要選取具名範圍 "Database",然後將選取範圍延伸五列,您可以使用下列範例:Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, _
Selection.Columns.Count).Select
14: 如何選取指定範圍、進行位移,然後調整大小
若要選取位於具名範圍 "Database" 下方四列和右邊三欄的範圍,並包括大於具名範圍兩列和一欄,您可以使用下列範例:Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, _
Selection.Columns.Count + 1).Select
15: 如何選取兩個指定範圍以上的聯集
若要選取兩個具名範圍 "Test" 和 "Sample" 的聯集 (亦即合併區域),您可以使用下列範例:Application.Union(Range("Test"), Range("Sample")).Select
Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))
Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))
Union method of application class failed (應用程式類別的 Union 方法失敗)
16: 如何選取兩個指定範圍以上的交集
若要選取兩個具名範圍 "Test" 和 "Sample" 的交集,您可以使用下列範例:Application.Intersect(Range("Test"), Range("Sample")).Select
本文中的範例 17-21 會參照下列範例資料集。 每一個範例都會陳述在範例資料中所選取的儲存格範圍。
A1: Name B1: Sales C1: Quantity A2: a B2: $10 C2: 5 A3: b B3: C3: 10 A4: c B4: $10 C4: 5 A5: B5: C5: A6: Total B6: $20 C6: 20
17: 如何選取連續資料欄的最後一個儲存格
若要選取連續欄中的最後一個儲存格,請使用下列範例:ActiveSheet.Range("a1").End(xlDown).Select
18: 如何選取連續資料欄下方的空白儲存格
若要選取連續儲存格範圍下面的儲存格,請使用下列範例:ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select
19: 如何在欄中選取連續儲存格的整個範圍
若要在欄中選取連續儲存格範圍,請使用下列其中一個範例:ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
- 或 -
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _
End(xlDown).Address).Select
20: 如何在欄中選取非連續儲存格的整個範圍
若要選取非連續的儲存格範圍,請使用下列其中一個範例:ActiveSheet.Range("a1",ActiveSheet.Range("a65536").End(xlUp)).Select
- 或 -
ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536"). _
End(xlUp).Address).Select
21: 如何選取矩形儲存格範圍
若要選取某儲存格四周的矩形儲存格範圍,請使用 CurrentRegion 方法。 透過 CurrentRegion 方法選取的範圍,是以任何組合的空白列與空白欄為邊界的區域。 下列範例說明如何使用 CurrentRegion 方法:ActiveSheet.Range("a1").CurrentRegion.Select
ActiveSheet.Range("a1", _
ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
- 或 -
ActiveSheet.Range("a1:" & _
ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
- 或 -
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & _
ActiveSheet.Cells(lastRow, lastCol).Address).Select
22: 如何選取不同長度的多個非連續欄
若要選取不同長度的多個非連續欄,請使用下列範例資料表和巨集範例:A1: 1 B1: 1 C1: 1 D1: 1 A2: 2 B2: 2 C2: 2 D2: 2 A3: 3 B3: 3 C3: 3 D3: 3 A4: B4: 4 C4: 4 D4: 4 A5: B5: 5 C5: 5 D5: A6: B6: C6: 6 D6:
StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a,b).Select
範例的注意事項
- 通常可以省略 ActiveSheet 屬性,因為如果未命名特定工作表,則會隱含該屬性。 例如,與其使用
ActiveSheet.Range("D5").Select
Range("D5").Select
- 通常也可以省略 ActiveWorkbook 屬性。 除非已命名特定活頁簿,否則會隱含使用中的活頁簿。
- 使用 Application.Goto 方法時,當指定的範圍是在另一個 (不是使用中) 工作表的情況下,如果要在 Range 方法內使用兩個 Cells 方法,則每次都必須包括 Sheets 物件。 例如:
Application.Goto Sheets("Sheet1").Range( _ Sheets("Sheet1").Range(Sheets("Sheet1").Cells(2, 3), _ Sheets("Sheet1").Cells(4, 5)))
- 針對引號中的任何項目而言 (例如,具名範圍 "Test"),您也可以使用其值是文字字串的變數。 例如,與其使用
ActiveWorkbook.Sheets("Sheet1").Activate
ActiveWorkbook.Sheets(myVar).Activate
2018年5月29日 星期二
2018年4月26日 星期四
win10 開啟 SMB v1
win10預設smb1是關閉的 錯誤訊息如下
因為檔案共享不安全,所以你不能連線到檔案共享。 共享需要過時的 SMB1 協議,而此協議是不安全的,可能會使你的系統遭受攻擊。你的系統需要 SMB2 或更高版本。
如果需要使用,需要使用管理員開啟 Powershell 輸入下面程式碼
Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
輸入之後需要重新啟動,如果還是無法使用,請輸入下面程式碼
Get-WindowsFeature FS-SMB1
參考連結:https://support.microsoft.com/en-us/help/2696547/how-to-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and-windows-server
2018年3月9日 星期五
探索Facebook 隱藏的秘密: 使用Graph API
- 什麼是網路爬蟲?
- 開始使用Python撰寫網路爬蟲 ( Crawler )
- 如何安裝 Jupyter (Ipython Notebook)
- Jupyter 操作入門 (1)
- 如何使用GET 抓取網頁內容?
- 如何使用POST 抓取網頁內容?
- 如何使用Python 套件: BeautifulSoup4 剖析網頁內容?
- 如何使用Python 的requests 及BeautifulSoup4 完成淘寶爬蟲?
- 探索Facebook 隱藏的秘密: 使用Graph API
- 探索Facebook 隱藏的秘密: 使用Python 存取 Facebook 資訊
- 如何徹底解決在Windows上安裝Python 套件的惱人問題?
R語言
使用 R 語言建立自己的演算法交易事業
https://www.slideshare.net/tw_dsconf/r-71023024
搭配部位控管,使用R語言六個步驟輕鬆上手
https://m.moneydj.com/f1a.aspx?a=3c3bfe06-0843-4613-9617-0a485065a551&c=LIFENEWS
由於雅虎股市下載的資料從2007-01-05到現在,可以發現這將近10年的績效沒有很好,扣掉手續費後賺賺賠賠。別灰心,我們先使出大絕招: 馬丁格爾。(註:這是風險很高的做法,哥有練過,只是為了示範教學別亂用。)
使用馬丁格爾:上次輸,這次加倍壓;上次贏,這次壓1張。
績效瞬間變的還不差,這十年來來賺了將近30萬,最大壓的張數為64張,也就是連輸6次。
當然,馬丁的風險絕對很大,過去成功更不代表未來,我們當然不可能實際上線這樣做。來看保險一點的類馬丁。
等差類馬丁:上次輸,這次多壓1張;上次贏,這次壓1張。
雖然等差類馬丁賺得更少,但似乎更穩定了。這十年來賺了將近20萬,但最大張數只壓了7張。這樣的風險一般民眾應該還可接受。
當然,上面還是過於激進的做法。我們用一個較為保守的方法:上次輸,這次壓2張;上次贏,這次壓1張。
;;
很明顯的,綠色的回檔被有效控制住,總績效雖然只有 NT 108,757,但回檔只有NT 10,636。這個策略,再搭配部分分數資金控管法,我想就是一個可以上線的策略了。週一買,週五賣,中間過程請專心上班不用盯盤,還蠻適合上班族的朋友的。
另外申明,已上皆為教學內容,如果你覺得合理可上場廝殺,後果就要自行負責唷。當然你也可以測其他股票,其他策略,但最終還是那句話,交易的資金控管還是最重要的!
上場前請先規劃好想清楚,再來就是徹底執行瞜!! 祝大家操作順利!!
https://www.slideshare.net/tw_dsconf/r-71023024
搭配部位控管,使用R語言六個步驟輕鬆上手
https://m.moneydj.com/f1a.aspx?a=3c3bfe06-0843-4613-9617-0a485065a551&c=LIFENEWS
最近給了幾場實做的課程,原本是為了教學R語言與quantmod套件,沒想到隨意開發的結果,這績效竟然也還能看,似乎真的可以拿來上線操作。於是我決定把他寫下來分享,但我也沒實際玩過,所以後過自負。畢竟有些我使用了很有";;致命吸引力";;的馬丁。在風險沒控制好的前提下,這絕對不是一個好的做法!!
;;
;;
第二步:安裝quantmod套件,兩行指令如下:(輸入後按ctrl+a 全選,ctrl+r 執行就對了)
install.packages(";;quantmod";;)
library(qantmod)
;;
第三步:下載雅虎股市日K資料
STK=get(getSymbols(";;2330.tw";;)) ##下載台積電歷史日K資料
STK=as.matrix(to.weekly(STK)) ##將日K資料轉為週K資料
chartSeries(STK) ##畫出台積電歷史周K
;;
第四步:設定參數與損益向量
profit=setNames(numeric(length(rownames(STK))), rownames(STK))
##設定profit向量紀錄每周損益
;;
lastC=STK[1,4] ##先記錄第一週的收盤價
;;
資料下載ready後,便可開始做回測。我們進場依據為為每周第一天,開低買進台積電一張,週五收盤結束部位。因此實際的行情回測需從第二週開始,第一週只能記錄收盤價:
;;
for (m in rownames(STK)[-1]) { ##開始以每週為單位跑迴圈
;;
fee=ceiling(STK[m,1]*1000*(0.001425*2*0.5+0.003))
;;##設定手續費與稅(假設手續費打5折)
;;##設定手續費與稅(假設手續費打5折)
;;
if(STK[m,1]<;;=lastC){profit[m]=(STK[m,4]-STK[m,1])*1000-fee} ##開低買進的損益
;;
lastC=STK[m,4] ##紀錄本周收盤價,做為下週判斷開高開低的依據
}
;;
第五步:檢查策略程式碼的回測結果是否正確?
head(cbind(STK,profit),20)
## 可觀察前20筆的績效,是否確實執行策略
## 可觀察前20筆的績效,是否確實執行策略
;;
第六步: 畫出績效曲線圖
由於雅虎股市下載的資料從2007-01-05到現在,可以發現這將近10年的績效沒有很好,扣掉手續費後賺賺賠賠。別灰心,我們先使出大絕招: 馬丁格爾。(註:這是風險很高的做法,哥有練過,只是為了示範教學別亂用。)
使用馬丁格爾:上次輸,這次加倍壓;上次贏,這次壓1張。
績效瞬間變的還不差,這十年來來賺了將近30萬,最大壓的張數為64張,也就是連輸6次。
當然,馬丁的風險絕對很大,過去成功更不代表未來,我們當然不可能實際上線這樣做。來看保險一點的類馬丁。
等差類馬丁:上次輸,這次多壓1張;上次贏,這次壓1張。
雖然等差類馬丁賺得更少,但似乎更穩定了。這十年來賺了將近20萬,但最大張數只壓了7張。這樣的風險一般民眾應該還可接受。
當然,上面還是過於激進的做法。我們用一個較為保守的方法:上次輸,這次壓2張;上次贏,這次壓1張。
;;
;;
;;
左圖是原始策略,右圖是資金控管後的損益。總獲利達到NT 121,735,最大回檔為NT 34,289。且最大張數只有2張。當然,我們可以把上面的策略弄得更完美,舉例來說,只有上次輸,這次才會壓1張。
;;
很明顯的,綠色的回檔被有效控制住,總績效雖然只有 NT 108,757,但回檔只有NT 10,636。這個策略,再搭配部分分數資金控管法,我想就是一個可以上線的策略了。週一買,週五賣,中間過程請專心上班不用盯盤,還蠻適合上班族的朋友的。
另外申明,已上皆為教學內容,如果你覺得合理可上場廝殺,後果就要自行負責唷。當然你也可以測其他股票,其他策略,但最終還是那句話,交易的資金控管還是最重要的!
上場前請先規劃好想清楚,再來就是徹底執行瞜!! 祝大家操作順利!!
;;
R_Repository
https://github.com/kaiyu33/R_Repository第一次使用R語言做回測:六分鐘,就上手!
107年底Kotlin將取代Java成為Android平台上最受歡迎的語言
https://www.ithome.com.tw/news/117493
行動程式開發平台Realm去年第四季針對行動開發人員所使用的語言進行研究,並於上周發表研究成果,顯示目前Android平台上最受歡迎的行動開發語言為Java,但Kotlin可望於明年底超越Java。
Realm指出,Kotlin於Android平台上的發展路線類似iOS上的Swift。蘋果在2014年6月發表了可用來撰寫支援macOS、iOS、watchOS、tvOS及Linux等平台的Swift語言,花了14個月便取代Objective-C成為iOS平台上最受歡迎的語言。
而Kotlin則是在今年5月被Google納入Android Studio,於Android平台上提供Kotlin的一級支援。有別於Swift是由蘋果自行開發,Kotlin則是源自俄國JetBrains開發團隊的開源專案,它是一個靜態程式語言,並能與Java程式碼互動,允許開發人員於既有的專案中增加Kotlin程式碼。
Realm表示,在被納入Android Studio之前,Kotlin就是一個頗受歡迎的語言,現在它更將改變整個Android生態體系,估計到明年12月採用Kotlin開發Android程式的比例就會超過Java。
Realm認為,Android平台上的Java將日益枯萎,不只是因為有愈來愈多的Kotlin開發人員,還因為有許多開發人員正把程式從Java改為Kotlin,在今年5月之前以Java所建置的Android程式中,現在已有20%改採Kotlin,那些缺乏Kotlin技能的開發人員很快就會被視為食古不化的恐龍。
Kotlin Tutorial(1)Hello! Kotlin!
另一種JVM程式語言
如果你是一個Android或Java技術開發人員,Groovy、Scala、JRuby或Jython這些JVM Language,或許曾經聽過、看過,甚至已經研究過,不過你可能最後還是回到Java程式語言的懷抱。
Java程式設計語言已經二十幾歲了,如果有人問我「Java是不是一種「好」程式語言?」,我都會這麼回答「只要是可以幫我付帳單和貸款的,都是一種「好」技術」,算是巧妙的迴避問題。因為如果叫我想五個對於Java程式設計語言的形容詞,其中會有三個是比較負面的。如果針對具備三年以上Java程式設計師進行問卷調查,同樣請大家想五個形容詞,不知道會有什麼樣的結果。
Kotlin是一個比較新的JVM程式語言,它是在2011年7月由JetBrains發表的專案,JetBrains是開發工具IntelliJ IDEA的開發商,Android Studio就是以IntelliJ IDEA為基礎的Android官方開發工具。Kotlin v1.0在2016年2月發表,是第一個由JetBrains發佈的Kotlin正式版本。
對我來說,Kotlin跟其它JVM程式語言最大的差異,倒不是架構或語法,而是2017年5月的Google開發人員大會,發佈Android支援Kotlin為官方的程式設計語言。從Android Studio 3開始,開發人員可以直接使用Kotlin開發Android App。
Kotlin FAQ
已經熟悉Java程式設計語言
- 我為什麼要從Java轉換成Kotlin?
這個問題的另外一面,可能是「我花了幾年的時間才完全熟悉Java,現在又要我學另一種程式語言,你最好是給我一個非常好、而且很明確的道理」。雖然這是一個很嚴肅的問題,不過我只能提供自己的幾個想法給你參考:
- 不論是以開發人員或講師的角色來說,Java技術的確是不算簡單的
- 那Kotlin比Java簡單嗎?對我來說,是的
- 同樣功能的程式碼,Kotlin比Java的程式碼清爽多了(官方說最多可以減量40%)
- Kotlin同樣是在JVM運作,Java在這方面的特性Kotlin也有
- Kotlin可以完全取代Java?
- 開發Android App:是的
- 開發Java應用程式,例如WEB、JavaFX:可以(沒有「是的」那麼肯定)
- Kotlin官方網站說未來還會支援嵌入式、MacOS、iOS
- Kotlin可以和Java一起運作?
是的。Kotlin可以使用Java程式碼,Java也可以使用Kotlin程式碼。 - Kotlin和Java的語法很不一樣嗎?
是的。不一樣的程度可以想像成長得有點像的父子或母女。(這其實是廢話,這樣的形容幾乎可以套用在所有不同的程式語言) - Kotlin也有Java 8的Lambda(functional programming)?
有。 - Kotlin採用哪一種授權方式?
Apache Software License, Version 2.0。 - 需要花費多少時間學習Kotlin?
如果選擇一個好的教材,可以很容易把你在Java累積的技能快速轉換到Kotlin。(廣告:例如這個系列專欄就是好的教材,未來可能會出版電子書或實體書)
還不認識Java程式設計語言
- 我想要學習開發Android App,那我應該要先學Java還是Kotlin?
開發Android App使用Java或Kotlin都可以,都是官方正式支援的程式設計語言。你可以從幾個想法去選擇:
- 想要比較快速進入開發Android App的階段:選擇Kotlin
- 以開發Android App為主要的學習目的:選擇Kotlin
- 不知道該怎麼選擇,也沒有任何想法:選擇Kotlin
- Java跟Kotlin哪一個比較容易學習?
我覺得Kotlin比Java容易學習。我的說法應該算是有說服力的,畢竟我已經當了十年以上的講師,而且以Java與Android課程為主。 - 聽說學會Java以後可以寫很多種程式,Kotlin也可以嗎?
Java程式設計語言可以開發網頁、嵌入式、桌面與Android應用程式,Kotlin也可以。 - Kotlin程式設計語言有哪些書和學習資源?
目前只有少數幾本英文書,網路的學習資源以Kotlin官方網站為主,也是英文。(廣告:這個系列專欄是學習Kotlin不錯的資源,未來可能會出版電子書或實體書) - 目前Android App的範例與資源都是用Java寫的,Kotlin也可以使用嗎?
在Android App專案裡面,Kotlin和Java程式碼可以一起使用,也可以互相使用對方寫的程式碼。
建立Kotlin開發環境
開發Kotlin應用程式需要安裝Java SE JDK與開發工具,Kotlin開發環境有下面幾種選擇:
- JetBrains的IntelliJ IDEA
- Eclipse與Kotlin Plugin
- 在終端機編譯與執行
- 使用建置工具,包含常見的Ant、Maven與Gradle
這裡使用的開發工具是IntelliJ IDEA Community,其它方式請參考Kotlin官方網站的說明。
下載與安裝JDK
Kotlin需要Java SE JDK 1.6或更新的版本,如果你的電腦還沒有安裝Java SE JDK,依照下列的步驟下載與安裝,或是參考後面的示範影片:
- 開啟瀏覽器,在網址列輸入這個網址http://www.oracle.com/。
- 將滑鼠游標移到「Downloads」,選擇左側的「Java Developers」。
- 選擇「JDK」的「DOWNLOAD」的下載圖示。
- 進入下載JDK的網頁以後,選擇「Accept License Agreement」,依照你的作業系統版本選擇下載的連結,如果是32位元就選擇「Windows x86」,64位元的話選擇「Windows x64」。
- 儲存下載的檔案,下載完成後執行這個檔案開始安裝的步驟,建議使用預設的安裝路徑,在後續的安裝過程中全部選擇「Next >」。
- 在完成安裝的視窗選擇「Close」。
詳細的操作步驟可以參考下面的示範影片:
下載與安裝IntelliJ IDEA Community
JetBrains提供免費開放版本的IntelliJ IDEA Community,它完整支援Kotlin程式設計語言。依照下面的步驟執行下載與安裝的工作:
- 開啟瀏覽器,在網址列輸入這個網址https://www.jetbrains.com/idea/download/。
- 選擇「Community」的「DOWNLOAD」,儲存與執行下載的安裝程式:
- 啟動安裝程式後,在歡迎畫面選擇「Next>」。
- 在選擇安裝位置(Choose Install Location)畫面選擇「Next>」。
- 在安裝選項(Installation Options)畫面,依照電腦的作業系統,勾選「32-bit launcher」或「64-bit launcher」, 最後選擇「Next>」:
- 在選擇開始功能表(Choose Start Menu Folder)畫面選擇「Install」開始安裝。
- 在完成安裝的畫面,勾選「Run IntelliJ IDEA Community Edition」後選擇「Finish」:
- 安裝程式自動啟動IntelliJ IDEA Community,第一次啟動後在「Complete Installation」對話框選擇「Do not import settings」,最後選擇「OK」:
- 在「Customize IntelliJ IDEA」畫面,選擇開發工具的樣式為「IntelliJ」或「Darcula」,最後選擇「Skil All and Set Defaults」:
- 出現IntelliJ IDEA的主畫面,完成安裝與初始設定:
Hello World!
- 在IntelliJ IDEA的主畫面選擇「Create New Project」:
- 在「New Project」視窗選擇「Java」後,選擇右上角的「New…」:
- 在「Select Home Directory for JDK」視窗,選擇JDK的安裝資料夾後選擇「OK」:
- 回到「New Project」視窗,Project SDK已經設定為上一步驟的選擇:
- 在「New Project」視窗的「Additional Libraries and Frameworks」勾選「Kotlin(Java)」後選擇「Next」:
- 在「Project name」輸入專案名稱,例如「HelloKotlin」,最後選擇「Finish」。
- 在出現「Tip of the Day」對話框,取消「Show Tips on Startup」勾選,再選擇「Close」,以後啟動就不會再出現這個對話框。
- 第一次建立Kotlin專案會花費一些時間執行初始化的工作。
- 完成初始化工作後,在專案的「src」目錄按滑鼠右鍵,選擇「New -> Kotlin File/Class」:
- 在「New Kotlin file/class」對話框的「Name:」輸入程式碼檔案名稱,例如「HelloWorld」,最後選擇「OK」。
- 在新建立的程式碼檔案輸入下面的內容:
123fun main(args: Array
) { println(
"Hello World!"
)
}
- 用滑鼠游標選擇Kotlin圖示後選擇「Run 'HelloWorld.kt'」,也可以使用快速鍵「Ctrl+Shift+F10」:
- 執行程式以後在畫面下方顯示「Hello World!」:
第一個Kotlin程式碼FAQ
- 不需要宣告類別?
是的。 - 「fun」好像是用來宣告main方法?
是的。Kotlin程式的進入點(Java的main方法),是一個名稱為「main」,參數為「Array、字串陣列」的函式。 - println為什麼沒有System.out?
其實println是Kotlin定義在Console.kt裡面的函式。 - 敘述的最後面不需要分號(;)?
是的。你也可以加上分號,不過那是多餘的。如果需要在一行執行多個敘述,可以使用分號隔開。例如:
123fun main(args: Array
) { println(
"One"
); println(
"Two"
)
}
下一步
想要趕快開始寫Kotlin程式?在安裝好開發環境以後,接下來的「10分鐘認識Kotlin」,使用精心挑選的主題,讓你快速認識Kotlin的基本精神。
相關的檔案都可以在GitHub瀏覽與下載。
訂閱:
文章 (Atom)