Mobile device developer
Johnny Sung
https://fb.com/j796160836
https://blog.jks.coffee/
https://www.slideshare.net/j796160836
https://github.com/j796160836
(⾃自動判斷為布林林值,省略略型態寫法)
var temperature = 15
if (temperature > 40) {
print("是熱⽔水")
} else {
print("是冷⽔水")
}
Slide 27
Slide 27 text
var isCreature = true
if (isCreature) {
print("是⽣生物")
} else {
print("不是⽣生物")
}
(⾃自動判斷為布林林值,省略略型態寫法)
Slide 28
Slide 28 text
常⽤用運算元
== 等於
> ⼤大於
>= ⼤大於等於
< ⼩小於
<= ⼩小於等於
&& AND
|| OR
! NOT
真值表
A B A && B A || B
false false false false
false true false true
true false false true
true true true true
val viewType: Int = 1
when (viewType) {
1, 2 -> {
// Do something with value 1 or 2
}
3 -> {
// Do something with value 3
}
else -> {
// Do something with default
}
}
Slide 32
Slide 32 text
switch (viewType) {
case 1:
case 2:
// Do something with value 1 or 2
break;
case 3:
// Do something with value 3
break;
default:
// Do something with default
}
val viewType: Int = 1
when (viewType) {
1, 2 -> {
// Do something with value 1 or 2
}
3 -> {
// Do something with value 3
}
else -> {
// Do something with default
}
}
Java Kotlin
Slide 33
Slide 33 text
Java Kotlin
if (item instanceof ModelA) {
// ...
} else if (item instanceof ModelB) {
// ...
} else if (item instanceof ModelC) {
// ...
} else {
// ...
}
when (item) {
is ModelA -> {
// ...
}
is ModelB -> {
// ...
}
is ModelC -> {
// ...
}
else -> {
// ...
}
}
型態判斷
型態判斷
( 0 到 1
0 )
for (i in 0..10) {
println(i)
}
開始值 結束值
關鍵字的點點
賦予計數的變數名
(計數器的變數)
Slide 37
Slide 37 text
開始值 結束值
關鍵字 downTo
賦予計數的變數名
(計數器的變數)
for (i in 10 downTo 0 step 1) {
println(i)
}
步進值
( 10 到 0 )
Slide 38
Slide 38 text
Java
Kotlin
for (i in 10 downTo 0 step 1) {
println(i)
}
for (int i = 10; i >= 0; i--) {
System.out.println(i);
}
for (i in 0..10) {
println(i)
}
for (int i = 0; i <= 10; i++) {
System.out.println(i);
}
( 0 到 10 )
( 10 到 0 )
( 0 到 10 )
( 10 到 0 )
Slide 39
Slide 39 text
陣列列 (Array)
Slide 40
Slide 40 text
http://tw.gigacircle.com/2409121-1
Slide 41
Slide 41 text
Java
Kotlin
String[] strings = new String[]{"a", "b"};
陣列列型態
陣列列型態
val strings: Array = arrayOf("a", "b")
ArrayList strings = new ArrayList<>();
strings.add("a");
strings.add("b");
strings.add("c");
val strings:ArrayList = ArrayList()
strings.add("a")
strings.add("b")
strings.add("c")
ArrayList 型態
ArrayList 型態
Slide 42
Slide 42 text
陣列列搭配 for 迴圈是好⿇麻吉
☺
Slide 43
Slide 43 text
Java
Kotlin
val strings = arrayOf("a", "b", "c")
for ((index, value) in strings.withIndex()) {
println("The element at $index is $value")
}
String[] strings = new String[]{"a", "b", "c"};
for (int index = 0; index < strings.length; index++) {
String value = strings[index];
System.out.println("The element at " + index + " is " + value);
}
Slide 44
Slide 44 text
Kotlin
型態省略略
val strings = arrayOf("a", "b")
val strings = ArrayList()
strings.add("a")
strings.add("b")
strings.add("c")
型態省略略
val num = 1
val str = "hello"
型態省略略
型態省略略
val str:String = "hello"
val num:Int = 1
Slide 45
Slide 45 text
Java
Kotlin
for (int i = 0; i < strings.length; i++) {
String string = strings[i];
// ...
}
for (String string : strings) {
// ...
}
for (string in strings) {
// ...
}
String[] strings = new String[]{"a", "b"};
陣列列
陣列列
val strings: Array = arrayOf("a", "b")
for (i in 0 until strings.size) {
// ...
}
class MyClass {
private val str = "hello"
public fun printHello() {
println(str)
}
}
類別名
類別變數
類別⽅方法
Slide 63
Slide 63 text
public class MyClass {
private String str = "hello";
public void printHello() {
System.out.println(str);
}
}
class MyClass {
private val str = "hello"
public fun printHello() {
println(str)
}
}
Java Kotlin
Slide 64
Slide 64 text
class 類別 object 物件
https://auto.epochtimes.com/car-b5-36337-%E6%96%B0%E8%BB%8A%E4%BB%8B%E7%B4%B9%EF%BC%9A2019%E6%AC%BE%E5%A5%A7%E8%BF%AAAudi%20A6.html
https://itw01.com/V25GNEJ.html
Slide 65
Slide 65 text
class MyDataModel {
var name: String? = ""
var num: Int = 0
}
val model = MyDataModel()
model.name = "John"
model.num = 123
建立 MyDataModel 物件
Slide 66
Slide 66 text
建構⼦子
Slide 67
Slide 67 text
Java Kotlin
class Student {
private String name;
public Student(String name) {
this.name = name;
}
public void printName() {
System.out.println(name);
}
}
class Student {
var name: String
constructor(name: String) {
this.name = name
}
fun printName(){
println(name)
}
}
建構⼦子
Slide 68
Slide 68 text
建構⼦子的變形
class Student {
var name: String
constructor(name: String) {
this.name = name
}
fun printName(){
println(name)
}
}
class Student(var name: String) {
fun printName(){
println(name)
}
}
Slide 69
Slide 69 text
static Method
Slide 70
Slide 70 text
class MyClass {
companion object {
fun staticMethod() {
}
}
}
public class MyClass {
public static void staticMethod() {
}
}
Java
Kotlin
Slide 71
Slide 71 text
Kotlin
class MyClass {
companion object {
fun staticMethod() {
}
}
}
object MyClass {
fun staticMethod() {
}
}
interface Animal {
fun sound()
}
class Cat : Animal {
override fun sound() {
println("喵喵喵~")
}
}
class Dog : Animal {
override fun sound() {
println("汪汪汪~")
}
}
繼承(或實作)
val pet: Animal = Cat()
pet.sound()
// 喵喵喵~
Slide 74
Slide 74 text
class HairClipperForDog {
fun haircut(dog: Dog) {
println("(理理髮器聲...)")
dog.sound()
println("頭⽑毛理理好了了!")
}
}
class HairClipperForCat {
fun haircut(cat: Cat) {
println("(理理髮器聲...)")
cat.sound()
println("頭⽑毛理理好了了!")
}
}
val myCat = Cat()
val catClipper = HairClipperForCat()
catClipper.haircut(myCat)
val myDog = Dog()
val dogClipper = HairClipperForDog()
dogClipper.haircut(myDog)
Slide 75
Slide 75 text
class HairClipper {
fun haircut(animal: Animal) {
println("(理理髮器聲...)")
animal.sound()
println("頭⽑毛理理好了了!")
}
}
https://tw.buy.yahoo.com/gdsale/
%E6%97%A5%E8%B1%A1%E9%BB%91%E9%91%BD%E9%9B%BB%E5%8B%95%E7%90%86%E9%AB%AE%E5%99%A8%E5%85%85%E6%8F%92%E6%9C%89%E7%B7%9A%E7%84%A1%E7%B7%9AZOH-2600C-5289698.html
Slide 76
Slide 76 text
val hairClipper = HairClipper()
val myDog = Dog()
hairClipper.haircut(myDog)
val myCat = Cat()
hairClipper.haircut(myCat)
Slide 77
Slide 77 text
Java Kotlin
interface Animal {
public void eat();
}
class Cat implements Animal {
@Override
public void eat() {
// ...
}
}
class Dog implements Animal {
@Override
public void eat() {
// ...
}
}
interface Animal {
fun eat()
}
class Cat : Animal {
override fun eat() {
// ...
}
}
class Dog : Animal {
override fun eat() {
// ...
}
}
Slide 78
Slide 78 text
變數轉型
Slide 79
Slide 79 text
變數轉型
• 基本型別的轉型
• 有對應函式能使⽤用
Slide 80
Slide 80 text
變數轉型
• 物件的轉型
• 要是繼承樹裡的才能轉型
open class Father {
// ...
}
class Brother: Father() {
// ...
}
var a: Father = Brother()
var b = a as? Brother
如果轉型失敗就回傳 null
變數型態為:Brother?
猛虎出柙雙劍合璧版--最新 OCA / OCP Java SE 7 Programmer 專業認證
https://books.google.com.tw/books?id=EElBCgAAQBAJ&pg=PA407&lpg=PA407&source=bl&ots=bPzrpKU4n4&sig=ACfU3U31_OKnAJo5ELdqMfu2E4TNIW218A&hl=zh-TW&sa=X&ved=2ahUKEwi-u5uYzPTiAhWKF6YKHVAXB-sQ6AEwAHoECAkQAQ#v=onepage&
Slide 94
Slide 94 text
猛虎出柙雙劍合璧版--最新 OCA / OCP Java SE 7 Programmer 專業認證
https://books.google.com.tw/books?id=EElBCgAAQBAJ&pg=PA407&lpg=PA407&source=bl&ots=bPzrpKU4n4&sig=ACfU3U31_OKnAJo5ELdqMfu2E4TNIW218A&hl=zh-TW&sa=X&ved=2ahUKEwi-u5uYzPTiAhWKF6YKHVAXB-sQ6AEwAHoECAkQAQ#v=onepage&
Slide 95
Slide 95 text
程式設計原則 - SOLID
by Robert C. Martin
Slide 96
Slide 96 text
SOLID
• 單⼀一職責原則 Single responsibility
• 開放封閉原則 Open-Close
• ⾥里里⽒氏替換原則 Liskov substitution
• 接⼝口隔離原則 Interface segregation
• 依賴反轉原則 Dependency inversion
by Robert C. Martin
https://ithelp.ithome.com.tw/articles/10191553
http://teddy-chen-tw.blogspot.com/2014/04/solid.html
class HairClipperForDog {
fun haircut(dog: Dog) {
println("(理理髮器聲...)")
dog.sound()
println("頭⽑毛理理好了了!")
}
}
class HairClipperForCat {
fun haircut(cat: Cat) {
println("(理理髮器聲...)")
cat.sound()
println("頭⽑毛理理好了了!")
}
}
val myCat = Cat()
val catClipper = HairClipperForCat()
catClipper.haircut(myCat)
val myDog = Dog()
val dogClipper = HairClipperForDog()
dogClipper.haircut(myDog)
Slide 103
Slide 103 text
class HairClipper {
fun haircut(animal: T) {
println("(理理髮器聲...)")
animal.sound()
println("頭⽑毛理理好了了!")
}
}
https://tw.buy.yahoo.com/gdsale/
%E6%97%A5%E8%B1%A1%E9%BB%91%E9%91%BD%E9%9B%BB%E5%8B%95%E7%90%86%E9%AB%AE%E5%99%A8%E5%85%85%E6%8F%92%E6%9C%89%E7%B7%9A%E7%84%A1%E7%B7%9AZOH-2600C-5289698.html
⾃自⼰己取的型態 T
只限於 Animal 繼承樹上的
Slide 104
Slide 104 text
val myDog = Dog()
val hairClipperForDog = HairClipper()
hairClipperForDog.haircut(myDog)
val myCat = Cat()
val hairClipperForCat = HairClipper()
hairClipperForCat.haircut(myCat)
Slide 105
Slide 105 text
延伸閱讀
https://classroom.udacity.com/courses/ud9011/
https://classroom.udacity.com/courses/ud9012/
Kotlin Bootcamp for Programmers
Developing Android Apps with Kotlin