程式設計裡面 方法太重要了
當然~也有人習慣叫他函數
每個方法我們可以看做一個命令
這其中有兩個知識點可以讓大家去研究
Functional programming
好的FP可避免大量的重複程式碼
也可以有清晰的程式邏輯
單一職責
方法即是命令
所以一個好的方法 應該清楚又明確
一個方法 應該只做一件事情
看似簡單又廢話的一段話
在真正實作時
是需要大量經驗與知識才能達成的
// 一般方法
func sayHi(_ name: String) -> String {
// 如果name 拿掉前方的 _ 呼叫必須變成 sayHi(name: "Ami")
return "你好啊 \(name)!"
}
print(sayHi("Ami")) //你好啊 Ami!
// 可變參數, 每個方法最多只可以有一組
func sayHiFoEeveryone(_ name: String...) -> String {
return "你們好啊 \(name)!"
}
print(sayHiFoEeveryone("Ami1","Ami2","Ami3","Ami4"))
// 你們好啊 ["Ami1", "Ami2", "Ami3", "Ami4"]!
// 命名參數 主要是增加可讀性
func sayHiFrom(from: String, to: String) -> String {
return "\(from)說: 你好啊 \(to)!"
}
print(sayHiFrom(from: "Ami", to:"Amit"))
// Ami說: 你好啊 Amit!
//print(sayHiFrom( to:"Amit", from: "Ami"))
// 編譯錯誤 命名參數必須順序正確
swift的命名參數
對提升可讀性上有很大的加分喔
// 一般方法
fun sayHi(name: String): String {
return "你好啊 $name!"
}
// 可變參數, 每個方法最多只可以有一組
fun sayHiFoEeveryone(vararg name: String): String {
val names = name.toList().toString()
return "你們好啊 $names!"
}
// 命名參數 主要是增加可讀性
fun sayHiFrom(from: String, to: String): String {
return "${from}說: 你好啊 $to!"
}
fun main() {
println(sayHi("Ami")) //你好啊 Ami!
println(sayHiFoEeveryone("Ami1","Ami2","Ami3","Ami4")) //你們好啊 [Ami1, Ami2, Ami3, Ami4]!
println(sayHiFrom(from = "Ami", to = "Amit")) // Ami說: 你好啊 Amit!
println(sayHiFrom( to = "Amit", from = "Ami"))// Ami說: 你好啊 Amit!
}
Swift參數設定嚴謹
Kotlin 相對較寬鬆
這樣的設計可以帶來比較大的彈性
不需要順序一樣
這在後續擴充參數上有很大的幫助
但較高的彈性 相對的也會帶來較高的混亂
用與不用~ 你自己決定摟
啊呀~類別啊~太重要了
物件導向中 類別是一個太重要的概念了
如果你對類別~物件導向都沒概念
建議你停下來
先去補一些基本知識再往下走摟
// protocol 就是swift的介面或契約
protocol IAnimal {
func eat()
func sleep()
}
class Animal: IAnimal {
func eat() {
print("開始吃飯摟~ 吃吃吃!")
}
func sleep() {
print("開始睡覺!")
}
}
class Cat: Animal {
var name: String = ""
var age: Int = 0
init(_ name: String){
self.name = name
}
func meow() {
print("\(name): meow ~")
}
// 覆寫方法使用關鍵字 override
override func sleep() {
print("本大爺要先來吃個宵夜~然後...")
// 呼叫父層
super.sleep()
}
}
var mycat = Cat("Tom")
mycat.meow();
mycat.eat();
mycat.sleep();
interface 在這裡變成 protocol
使用上沒太大差異
但我特別喜歡他 override關鍵字的使用
清楚明瞭的標示這段在做什麼
特別提醒 在類別內
指實體化後的自己
使用的是 self
// interface 就是介面 可以定義行為
interface IAnimal {
fun eat()
fun sleep()
}
class Animal: IAnimal {
// 實作界面需要寫關鍵字 override
override fun eat() {
println("開始吃飯摟~ 吃吃吃!")
}
override fun sleep() {
println("開始睡覺!")
}
}
// 不行 class Cat(name: String): Animal , kotlin裡 類別與介面都只能擴展一層
class Cat(name: String): IAnimal {
var name: String = ""
var age: Int = 0
init{
this.name = name
}
fun meow() {
println("$name: meow ~")
}
// 覆寫方法使用關鍵字 override
override fun eat() {
println("開始吃飯摟~ 吃吃吃!")
}
override fun sleep() {
println("本大爺要先來吃個宵夜~然後...")
println("開始睡覺!")
}
}
fun main() {
var mycat = Cat("Tom")
mycat.meow();
mycat.eat();
mycat.sleep();
}
kotlin在類別擴展上給出了限制
不管是介面還是類別 都只能擴展一層
這徹底解決了其他語言中 類別擴展過深的問題
這個限制 會迫使開發者更遵守SOLID原則
不然....就可能面對超級多的重複程式碼
當然還是有關鍵字可以取消這個限制
這邊就不特別介紹摟
不大! 差異真的不大!!!
如果單純看成是寫法 大同小異
主要還是後面的應用上差異應該會比較大喔
終於啊~~~ v( ̄︶ ̄)y
該死的基礎語法終於結束了
明天開始要打開編輯器
進入快樂的寫APP環節了
其實我很多很多年以前 有用Java開發過一款APP
是在做臨時工人力媒合的
當年的我...沒經驗...當工程師才一年...
就被抓去開發APP 「(°ヘ°)
那時真是忙到昏天暗地啊~~
想想當初... 一切都是淚!
經過幾年的演進
APP開發應該變得更好上手了吧?
對吧? Android 大大????
Swift: 怎麼不問問我.... ⸍⚙̥ꇴ⚙̥⸌