學習筆記-01

Kotlin 學習筆記
原視頻資料地址

你好世界

fun main(args: Array<String>) {
    println("Hello, Kotlin!")
}

數(shù)據(jù)類型

數(shù)據(jù)類型

數(shù)據(jù)類型
fun main(args: Array<String>) {
    val aByte:Byte=Byte.MAX_VALUE
    val bByte:Byte=Byte.MIN_VALUE
    println("MAX_VALUE is $aByte, MIN_VALUE is $bByte")
    
    val aInt:Int = 0b011 // 二進制
    println("aInt is $aInt")
}

輸出

MAX_VALUE is 127, MIN_VALUE is -128
aInt is 3

初識函數(shù)

fun main(args: Array<String>) {
    printOneStar()
    printThreeStars()
    printFiveStars()
    println("*******")
    printFiveStars()
    printThreeStars()
    printOneStar()
}

fun printOneStar() {
    println("   *   ")
}

fun printThreeStars() {
    println("  ***  ")
}

fun printFiveStars() {
    println(" ***** ")
}

輸出

   *   
  ***  
 ***** 
*******
 ***** 
  ***  
   *  

Boolean

fun main(args: Array<String>) {
    val num1 = Math.sqrt(5.0) - Math.sqrt(4.0)
    val num2 = Math.sqrt(4.0) - Math.sqrt(3.0)
    println(num1 > num2)
    
    val num3 = Math.pow(2.0, 100.0)
    val num4 = Math.pow(3.0, 75.0)
    println(num3 > num4)
}

輸出

false
false

函數(shù)作業(yè)練習

fun sayHello(name: String) = "Hello $name"

fun checkAge(age: Int) = age > 18

fun saveLog(logLevel: Int) {}

fun main(args: Array<String>) {
    println(sayHello("Leo"))
    println(checkAge(2))
    saveLog(1)
}

輸出

Hello Leo
false

字符串

fun main(args: Array<String>) {
    val template = """
        |今天
        |明天
        """.trimMargin("|")
    println(template)
    
    val template2 = "今天\n明天"
    println(template2)
}

輸出

今天
明天
今天
明天
字符串比較
fun main(args: Array<String>) {
    var str1 = "123"
    var str2 = "123"
    println(str1 == str2)
    println(str1.equals(str2))
    str1 = "ABC"
    str2 = "abc"
    println()
    println(str1 == str2)
    println(str1.equals(str2))
    println(str1.equals(str2, true)) // ignoreCase: true
}

輸出

true
true

false
false
true

空值處理

fun main(args: Array<String>) {
    println(heat("水"))
    println(heat(null))
}

fun heat(str: String?): String {
    return if (str == null) "不加熱" else "加熱$str"
}

輸出

加熱水
不加熱

When表達式

fun gradeStudent(score: Int) = when(score) {
    10 -> println("Great")
    9 -> println("Nice")
    8 -> println("Better")
    7 -> println("Fine")
    6 -> println("Ok")
    else -> println("Bad")
}

fun main(args: Array<String>) {
    gradeStudent(7)
}

輸出

Fine

循環(huán)和范圍

fun main(args: Array<String>) {
    val nums = 1..100 // [1, 100]
    nums.map { it -> println(it) }
    val nums2 = 1 until 100 // [1, 100)
    nums2.map { it -> println(it) }
    val nums3 = 1..100 step 2
    nums3.map { println(it) }
    nums3.reversed().map { println(it) }
    println("total: ${nums3.count()}")
    val nums4 = 100 downTo 1
    nums4.map { println(it) }
}

List

fun main(args: Array<String>) {
    val lists = listOf("a", "b", "c", "d")
    lists.map { println(it) }
    for ((i, e) in lists.withIndex()) {
        println("$i is $e")
    }
}

輸出

a
b
c
d
0 is a
1 is b
2 is c
3 is d

Map

import java.util.*

fun main(args: Array<String>) {
    val map = TreeMap<String, String>()
    map["1"] = "good"
    map["2"] = "better"
    println(map["2"])
    val map2 = mapOf("1" to "good", "2" to "better")
    println(map2["1"])
}

輸出

better
good

函數(shù)表達式

fun main(args: Array<String>) {
    val i = { x: Int, y: Int -> x + y }
    println(i(3, 5))
    println(add(4, 5))
    val j: (Int, Int) -> Int = { x, y -> x + y }
    println(j(4, 5))
}

fun add(x: Int, y: Int) = x + y

輸出

8
9
9

默認參數(shù)和具名參數(shù)

import kotlin.math.PI

fun getCirclePerimeter(pi: Double = PI,radius: Double) = 2 * pi * radius

fun getCirclePerimeter2(pi: Double = PI, diameter:Double) = pi * diameter

fun main(args: Array<String>) {
    println(getCirclePerimeter(radius = 2.0))
    println(getCirclePerimeter2(diameter = 4.0))
}

輸出

12.566370614359172
12.566370614359172

字符串和數(shù)字之間的轉(zhuǎn)換

fun main(args: Array<String>) {
    var a = "13"
    var b = 13
    a = b.toString()
    b = a.toInt()
    var c = "${a}3"
    b = c.toInt()
    println(b)
}

輸出

133

人機交互-打字交互

fun main(args: Array<String>) {
    println("First NUM:")
    val num1str = readLine()
    println("Second NUM:")
    val num2str = readLine()
    val num1 = num1str!!.toInt()
    val num2 = num2str!!.toInt()
    println("$num1 + $num2 = ${num1 + num2}")
}

輸出

First NUM:
12
Second NUM:
13
12 + 13 = 25

異常處理

fun main(args: Array<String>) {
    println("First NUM:")
    val num1str = readLine()
    println("Second NUM:")
    val num2str = readLine()
    try {
        val num1 = num1str!!.toInt()
        val num2 = num2str!!.toInt()
        println("$num1 + $num2 = ${num1 + num2}")
    } catch (e: NumberFormatException) {
        println("Wrong Number Type")
    }
}

輸出

First NUM:
a
Second NUM:
b
Wrong Number Type

遞歸

fun main(args: Array<String>) {
    println(fact(6))
}

fun fact(num: Int): Int = if (num == 1) 1 else num * fact(num - 1)

輸出

720

BigInteger改寫

import java.math.BigInteger

fun main(args: Array<String>) {
    println(fact(BigInteger("100")))
}

fun fact(num: BigInteger): BigInteger = if (num == BigInteger.ONE) BigInteger.ONE else num * fact(num - BigInteger.ONE)

輸出

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

尾遞歸優(yōu)化

fun main(args: Array<String>) {
    println(tailrecAdd(100, 0))
}

tailrec fun tailrecAdd(num: Int, result: Int): Int = if (num == 0) result else tailrecAdd(num - 1, result + num)

輸出

5050

初識面向?qū)ο?/h4>
class Rect(val height: Int, val width: Int)

fun main(args: Array<String>) {
    val rect = Rect(10, 20)
    println("Height is ${rect.height}")
    println("Width is ${rect.width}")
}

輸出

Height is 10
Width is 20

靜態(tài)屬性和動態(tài)行為

class Girl(val character: String, val voice: String) {
    private fun smile() {
        println("Smile")
    }
    
    fun laugh() {
        smile()
        println("Ha Ha")
    }
}

fun main(args: Array<String>) {
    val girl = Girl("Good", "Great")
    girl.laugh()
}

輸出

Smile
Ha Ha

洗衣機實例

class WashMachine(val module: String, var size: Int) {
    private var isDoorOpen = false
    fun openDoor() {
        isDoorOpen = true
        println("Door is opened.")
    }
    
    fun closeDoor() {
        isDoorOpen = false
        println("Door is closed.")
    }
    
    fun start() {
        if (isDoorOpen) {
            println("Close the door first, please.")
        } else {
            println("Start working.")
        }
    }
}

fun main(args: Array<String>) {
    var machine01 = WashMachine("小天鵝", 10)
    machine01.openDoor()
    machine01.start()
    machine01.closeDoor()
    machine01.start()
}

輸出

Door is opened.
Close the door first, please.
Door is closed.
Start working.

封裝

private關(guān)鍵字

繼承

Father.kt

open class Father {
    var character: String = "內(nèi)向"
    open fun action() {
        println("公共場合大聲喧嘩")
    }
}

Son.kt

class Son : Father() {
    override fun action() {
        println("公共場合很有禮貌")
    }
}

Test.kt

fun main(args: Array<String>) {
    val son1 = Son()
    println("The character is ${son1.character}")
    son1.action()
}

輸出

The character is 內(nèi)向
公共場合很有禮貌

抽象類和繼承

Human.kt

abstract class Human(var name: String) {
    abstract fun eat()
}

Man.kt

class Man(name: String) : Human(name) {
    override fun eat() {
        println("$name 大口吃")
    }
}

'Woman.kt`

class Woman(name: String) : Human(name) {
    override fun eat() {
        println("$name 小口吃")
    }
}

Test.kt

fun main(args: Array<String>) {
    val man = Man("Maximus")
    val woman = Woman("Ivy")
    man.eat()
    woman.eat()
}

輸出

Maximus 大口吃
Ivy 小口吃

抽象類和接口

  • 接口是事物的能力
  • 抽象類是事物的本質(zhì)
    Human.kt
abstract class Human(var name: String) {
    abstract fun eat()
}

InterfaceMan.kt

interface InterfaceMan {
    fun action()
}

Test.kt

class PersonMan(name: String) : Human(name), InterfaceMan {
    override fun eat() {
        println("${name}大口吃飯")
    }
    
    override fun action() {
        println("${name}長胡子")
    }
    
}

fun main(args: Array<String>) {
    val person = PersonMan("Maximus")
    person.eat()
    person.action()
}

輸出

Maximus大口吃飯
Maximus長胡子

區(qū)別:抽象類是事物的本質(zhì),是一類事物都具備的東西;接口是事物的能力,只有一類中的一部分事物才具備這種能力。

委托和代理

by關(guān)鍵字
IWashBowl.kt

interface IWashBowl {
    fun washing()
}

BigHeadSon.kt

class BigHeadSon : IWashBowl {
    override fun washing() {
        println("我是大頭兒子,我在開心得洗碗,一次一塊錢")
    }
}

SmallHeadFather.kt

class SmallHeadFather : IWashBowl by BigHeadSon()

Test.kt

fun main(args: Array<String>) {
    val fa = SmallHeadFather()
    fa.washing()
}

輸出

我是大頭兒子,我在開心得洗碗,一次一塊錢

單例模式

IWashBowl.kt

interface IWashBowl {
    fun washing()
}

BigHeadSon.kt

object BigHeadSon : IWashBowl {
    override fun washing() {
        println("我是大頭兒子,我在開心得洗碗,一次一塊錢")
    }
}

SmallHeadFather.kt

class SmallHeadFather : IWashBowl by BigHeadSon { // 注意區(qū)別,沒有括號
    override fun washing() {
        println("我是小頭爸爸,我讓我兒子洗碗")
        BigHeadSon.washing() // 區(qū)別,沒有括號
    }
}

Test.kt

fun main(args: Array<String>) {
    val fa = SmallHeadFather()
    fa.washing()
}

輸出

我是小頭爸爸,我讓我兒子洗碗
我是大頭兒子,我在開心得洗碗,一次一塊錢

枚舉類

enum class Week {
    Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
}

fun main(args: Array<String>) {
    println(Week.Monday)
    println(Week.Monday.ordinal)
    Week.values().filter { it.toString().startsWith("S") && it.toString().contains("n") }.map { println(it) }
    Week.values().asList().also(::println)
}

輸出

Monday
1
Sunday
[Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]

密封類

作用:定義子類類型有限的類
密封類和枚舉類的區(qū)別:密封類更在意類型;枚舉類更在意數(shù)據(jù)

sealed class Animal {
    class Fish : Animal()
    class Dog : Animal()
    class Cat : Animal()
}

fun main(args: Array<String>) {
    val type01 = Animal.Fish()
    val type02 = Animal.Dog()
    val type03 = Animal.Cat()
    sayHello(type01)
    sayHello(type02)
    sayHello(type03)
}

fun sayHello(animal: Animal) = when (animal) {
    is Animal.Fish -> println("Hello Fish")
    is Animal.Dog -> println("Hello Dog")
    is Animal.Cat -> println("Hello Cat")
}

輸出

Hello Fish
Hello Dog
Hello Cat
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容