Kotlin實戰(zhàn)讀書筆記(二 基礎(chǔ))

  1. 函數(shù)和變量
  • 函數(shù)基本結(jié)構(gòu)
    fun max(a: Int,b: Int): Int {  // if是表達(dá)式(有值的是表達(dá)式)
      return if(a>b) a else b
    }
    
  • 表達(dá)式函數(shù)體
    fun max(a: Int,b: Int): Int = if(a > b) a else b 
                    ==
    fun max(a: Int,b: Int) = if(a > b) a else b 
    
  • 可便變量 val(value) 不可變引用啡彬,var(variable)可變引用
    • 盡量使用 val
    val message: String     // 不可變引用可根據(jù)條件賦值
    if (canPerformOperation()){
         message = "Success"
        // do something
    }else{ message = "Failed" }
    
  • 字符串模板
    "Hello,$name"  = ”Hello,${name}"
    "Hello,${obj.name}"
    "Hello, ${ if (array.size > 0)  array[0] else "Guest" }" //在花括號類使用引號
    
  1. 類和屬性
  • 值對象
    public class Person {  // java
      private final String name;
      public Person(String name) {
          this.name = name;
      }
      public getName(){ return name; }
    }
                  ==
    class Person(val name: String)  //kotlin
    
  • 屬性
    class Person( 
        val name: String, //只讀训挡,有g(shù)etter方法
        var isMarried: Boolean //可變十电,有g(shù)etter、setter方法
    )
    
  • 自定義訪問器
    class Rectangle(val height: Int, var width: Int){
        val isSquare: Boolean
            get(){ return height == width }
    }
    
  • 導(dǎo)入和Java差不多,增加了kotlin的頂層函數(shù)和方法而已
  • kotlin一個文件可以放多個類晒他,名字也不必和文件名對應(yīng),由于kotlin有很多小類逸贾,建議將多個小類放在一個文件
  1. 表示和處理選擇: 枚舉和“when”
  • 枚舉類
    enum class Color { RED,ORANGE,BLUE} //  enum 在class前面才是關(guān)鍵字陨仅,所以可做變量名
    enum class Color( val r: Int, val g: Int , val b: Int){
        RED(255,0,0),ORANGE(255,165,0); //kotlin唯一必須使用分好的地方,在枚舉類中將屬性和方法分隔開
        fun rgb() = (r * 265 +g)* 265 + b
    }
    
  • 用when處理枚舉類
    fun getWarmth(color: Color) = when(color){
        Color.RED,Color.ORANGE -> "warm"
        Color.BLUE -> "cold"
    }
    import package.Color.* //導(dǎo)入Color的常量
    fun getWarmth(color: Color) = when(color){
          RED,ORANGE -> "warm" 
          BLUE -> "cold"
    }
    
  • when中使用任意對象
    fun mix(c1: Color,c2: Color) = when (setOf(c1,c2)){
          setOf(RED,YELLOW) -> ORANGE
          setOf(BLUE,YELLOW) -> GREEN
          else -> throw Exception("Dirty color")
    }
                    ==
    fun mixOptimized(c1: Color,c2: Color) = when{ //when沒傳參
        c1 == RED && c2 ==YELLOW || c1 == YELLOW && c2 ==RED -> ORANGE
        c1 == BLUE && c2 ==YELLOW || c1 == YELLOW && c2 ==BLUE -> ORANGE
        else -> throw Exception("Dirty color")
    }
    
  • 智能轉(zhuǎn)換:
    (1+2)+4 = 7 :
    
    interface Expr
    class Num(val value: Int): Expr
    class Sum(val left: Expr,val right: Expr):Expr
    fun eval(e: Expr) : Int = when(e){
        is Num -> { 
            // do something
            e.value  //不用像java一樣判斷了類型還要強轉(zhuǎn)
        } 
        is Sum -> eval(e.left) + eval(e.right)
        else -> throw IllegalArgumentException("Unknown expression")
     }
    eval(Sum(Sum(Num(1),Num(2)),Num(4))) // = 7
    
  1. 迭代
  • while循環(huán)和Java一樣
  • 區(qū)間:
    1..10  // 1-10,閉合的區(qū)間
    100 downTo 1 step 2  // 100-1的偶數(shù)
    0 until size == 0...size-1
    'A'..'Z' // A到Z的字符區(qū)間
    
  • 迭代區(qū)間: for( x in 1..10)
  • 迭代Map
    for((key,value) in map) {
        value == map[key] // map[key] == map.get(key)
        map[key] = newVal // == map.put(key,newVal)
    }
    
  • 迭代數(shù)組
    for( item in list)
    for((index,item) in list.withIndex()) //帶下標(biāo)迭代數(shù)組
    
  • in 運算符(可用于判斷铝侵,也可用于when表達(dá)式)
    'c' in 'a'..'z' // true 底層實現(xiàn):'a' <= 'c' && 'c' <= 'z'
    'c' !in '0'..'9' // false
    param in comparable1..comparable2 // in表達(dá)式對實現(xiàn)了comparable的所有對象有效
    
  1. 異常處理
    和java的不同點:
    • throw結(jié)構(gòu)是一個表達(dá)式
    val value = if ( number in 0..100) number else throw IllegalArgumentException("$number not in 0..100")
    
    • kotlin不用區(qū)分受檢異常和不受檢異常灼伤,比如不用顯式處理IOException
    • try做表達(dá)式
    val number = try { // number = null
          Integer.parseInt("not a number")
      }catch (e: Exception){
          null 
      }  
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咪鲜,隨后出現(xiàn)的幾起案子狐赡,更是在濱河造成了極大的恐慌,老刑警劉巖疟丙,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颖侄,死亡現(xiàn)場離奇詭異,居然都是意外死亡享郊,警方通過查閱死者的電腦和手機览祖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炊琉,“玉大人展蒂,你說我怎么就攤上這事√洌” “怎么了锰悼?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悼泌。 經(jīng)常有香客問我,道長夹界,這世上最難降的妖魔是什么馆里? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮可柿,結(jié)果婚禮上鸠踪,老公的妹妹穿的比我還像新娘。我一直安慰自己复斥,他們只是感情好营密,可當(dāng)我...
    茶點故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著目锭,像睡著了一般评汰。 火紅的嫁衣襯著肌膚如雪纷捞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天被去,我揣著相機與錄音主儡,去河邊找鬼。 笑死惨缆,一個胖子當(dāng)著我的面吹牛糜值,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坯墨,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼寂汇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捣染?” 一聲冷哼從身側(cè)響起骄瓣,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎液斜,沒想到半個月后累贤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡少漆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年臼膏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片示损。...
    茶點故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡渗磅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出检访,到底是詐尸還是另有隱情始鱼,我是刑警寧澤,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布脆贵,位于F島的核電站医清,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卖氨。R本人自食惡果不足惜会烙,卻給世界環(huán)境...
    茶點故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筒捺。 院中可真熱鬧柏腻,春花似錦、人聲如沸系吭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沃缘,卻和暖如春躯枢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孩灯。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工闺金, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人峰档。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓败匹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親讥巡。 傳聞我的和親對象是個殘疾皇子掀亩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,995評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法欢顷,內(nèi)部類的語法槽棍,繼承相關(guān)的語法,異常的語法抬驴,線程的語...
    子非魚_t_閱讀 31,669評論 18 399
  • 《Kotin 編程思想·實戰(zhàn)》 《Kotlin極簡教程》正式上架: 點擊這里 > 去京東商城購買閱讀 點擊這里 >...
    光劍書架上的書閱讀 2,088評論 1 4
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗炼七。 張土汪:刷leetcod...
    土汪閱讀 12,750評論 0 33
  • 制片人方勵為了排片直播下跪 大家第一反應(yīng)就是炒作 直播下跪博關(guān)注確實簡單粗暴有效 本人是不鼓勵這種營銷手段的 但這...
    油條麻辣燙閱讀 162評論 0 0
  • 瓦檐上結(jié)了白霜 階前荒草泛了黃 爐灶漸熄爐灰漸涼 風(fēng)聲漸近蛙聲漸息 誰丟了盤纏走回故鄉(xiāng) 誰一路走來滿面塵霜 誰無花...
    春風(fēng)明月閱讀 216評論 0 0