可變和不可變類似於c++ 中 const 對於指標的限定,而且是頂層const 或者說指正常量。然後變數是可以進行自動型別推斷的,類似於auto,前提是進行了初始化
同時對於val 來說,如果編譯器可以保證val只進行唯一一次初始化,則可以根據條件初始化成不同的值。
val message : string
if(something)
else
同時因為kotlin是靜態語言,在一些無法確定變數型別的地方需要主動宣告,宣告的形式是 『:』 + 『型別』 , 感覺比較友好,就像是對變數的注釋一樣。
fun 函式名 (引數列表) : 返回值型別 (表示式函式體)
或者是用 = 來標識一句話的函式體。(表示式函式體)
" 普通字串 $變數名 $"
列舉類不僅是值的列表,還可以給列舉類附加屬性和方法。
enum
class
color
(val r : int,
val g : int,
val b : int
)
注意的是,當要申明列舉方法時,必須使用乙個 『;』 將列舉常量列表與方法區分開
這個好神奇的東西
是個表示式,所以可以將函式寫成
fun 函式名 (引數列表)
=when()
when 類似於switch
(帶引數的when)
fun max(color : color) = when(color)
when 類似於多重if , else if , else if … else
(不帶引數的when)
fun
fuzzbizz
(i : int)
: string =
when
炫酷,而且編譯器會進行高亮提示
類似使用 is 判斷基類的實際型別 後進行自動進行型別轉換。
inte***ce expr
class
num(
val value : int)
: expr
class
sum(
val left : expr,
val right : expr)
: expr
funeval
(e : expr)
: int =
when
(e)
其實這裡的 『e』 在編譯器裡是高亮變現的,提示 進行了智慧型轉換 太炫酷了!
for (i in 1 .. 100)
for (i in 1 until 100 step 10)
for (i in 100 downto 1 step 10)
命名引數
類似python 可以在函式中顯示的標明一些引數的名稱。
預設引數值
在宣告函式的時候,指定引數的預設值
將那些不屬於任何類的**,放在**檔案的頂層,不用屬於任何類。
這些放在檔案頂層的函式依舊是包內的成員,如果需要從包外訪問,需要import,但不需要額外包一層。
package strings
fun ***
理論上講,擴充套件函式非常簡單,它就是乙個類的成員函式,不過定義在了類的外面。注意的是擴充套件函式並不允許你打破它的封裝性,也就是不能訪問私有變數和被包含的成員。
其次對於你定義的擴充套件函式並不會自動地在整個專案範圍內生效。需要進行匯入,這是為了避免偶然的命名衝突。
注意的是擴充套件函式是乙個靜態的函式,所以被呼叫的時候,並不會展現多型性。
不過可以通過this is ***
來進行物件型別的判斷,從而展現多型性,或者使用訪問者模式來展現多型性。
擴充套件函式
fun string.
lastchar()
: char =
get(length -
1)
擴充套件屬性var stringbuilder.lastchar : char
get()
=get
(this
.length -1)
set(value)
Lucene實戰閱讀筆記1
solr lucene子專案,支援從關聯式資料庫和xml文件中提取原始資料,以及能夠通過整合tika來處理複雜文件。nutch lucene子專案,它包含大規模的爬蟲工具,能夠抓取和分辨web站點資料。heritrix 開源的internet文件搜尋程式。drods lucene子專案,目前正處於籌...
《機器學習實戰》閱讀筆記(三)
接上篇 2.2.3準備資料 歸一化數值 由於數值較大的值會產生較大的影響,所以需要歸一化,公式如下 newvalue oldvalue min max min 歸一化函式如下 def autonorm dataset minvals dataset.min 0 maxvals dataset.max...
C 併發程式設計實戰 閱讀筆記
1.當把函式物件傳入到執行緒建構函式中時,需要避免 最令人頭痛的語法解析 如果傳遞了乙個臨時變數,而不是乙個命名的變數 c 編譯器會將其解析為函式宣告,而不是型別物件的定義。例如 class background task background task f std thread my thread...