Kotlin學習——hello kotlin 函數function 變量 類 + 泛型 + 繼承

在這里插入圖片描述

Kotlin 是一門現代但已成熟的編程語言,旨在讓開發人員更幸福快樂。 它簡潔、安全、可與 Java 及其他語言互操作,并提供了多種方式在多個平臺間復用代碼,以實現高效編程。

https://play.kotlinlang.org/byExample/01_introduction/02_Functions

目錄

  • 引出
  • hello
  • function函數
    • Infix Functions 中綴函數
    • Operator Functions 算術函數
    • 變長參數vararg Parameters
  • 變量
    • kt中的null
  • kt中的類
  • 泛型 Generics
    • 泛型函數Generic Functions
  • 繼承Inheritance
    • 超類Asiatic
  • 總結

引出


1.kotlin初識;
2.function函數,變量,null;
3.泛型,接口,繼承,超類;

hello

在這里插入圖片描述

package com.tianju.ktLearnfun main() {                        // 2println("Hello, World!")        // 3
}

function函數

  • 返回值為Unit,表示沒有返回值, 類似與java里面的 void
  • Unit可以省略不寫,可以傳兩個參數,參數帶有默認值

在這里插入圖片描述

package com.tianju.ktLearn// 返回值為Unit,表示沒有返回值, 類似與java里面的 void
fun printMsg(msg: String): Unit {println(msg)
}// Unit可以省略不寫,可以傳兩個參數,參數帶有默認值
fun printMsgWithPrefix(msg: String, prefix:String = "info") {println("[wtt--$prefix] $msg")
}fun sum(x: Int, y: Int): Int {return x+y;
}fun multiply(x: Int,y: Int) = x*yfun main() {printMsg("Pet!")// 可以不傳參,帶有默認參數的printMsgWithPrefix("Hello")printMsgWithPrefix("Hello","Peter")printMsgWithPrefix(prefix = "MMDD", msg = "HTTP")val sum = sum(100, 300)println(sum)println(multiply(3,30))
}

Infix Functions 中綴函數

具有單個參數的成員函數和擴展可以轉換為中綴函數。

在這里插入圖片描述

package com.tianju.ktLearn;// 具有單個參數的成員函數和擴展可以轉換為中綴函數
fun main(){infix fun Int.times(str: String) = str.repeat(this)println(2 times "Hei!")// to 是標準庫中的函數 kotlin.Pair<A, B>val  pair = "WHTT" to "PPTS"println(pair)// 自定義一個 onto 函數infix fun String.onto(str: String) = Pair(this,str)val myPair = "MVC" onto "WWW"println(myPair)val pet = Person("peter",34)val Shi = Person("Shirley",30)pet likes Shiprintln(pet.people[0])
}class Person(val name: String,val year: Int){val people = mutableListOf<Person>()infix fun likes(person: Person){people.add(person)}}

Operator Functions 算術函數

Certain functions can be “upgraded” to operators, allowing their calls with the corresponding operator symbol.

在這里插入圖片描述

package com.tianju.ktLearn// 符號times 就是 下面的 乘號 *
operator fun Int.times(str:String) = str.repeat(this)fun main() {println(2 * "Bye")val str = "Always forgive your enemies; nothing annoys them so much."operator fun String.get(range: IntRange) = substring(range)println(str[0..14])
}

變長參數vararg Parameters

在這里插入圖片描述

package com.tianju.ktLearnfun printAll(vararg msgs: String) {for (msg in msgs){println(msg)}
}fun printWithPre(vararg msgs: String, prefix:String): Unit {for (msg in msgs) println("[嘻嘻嘻--$prefix]$msg")
}fun logs(vararg msgs:String){printAll(*msgs)
}fun main() {printAll("pet","sh","wt")printWithPre("pet","sh","wt", prefix ="Hi")logs("sh","wtt","abc")}

變量

Kotlin具有強大的類型推理能力。雖然你可以顯式地聲明變量的類型,但你通常會讓編譯器通過推斷來完成這項工作。Kotlin不強制執行不變性,但建議這樣做。本質上使用val而不是var。

val b: Int = 1             // 2
val c = 3                  // 3

聲明一個不可變變量并對其進行初始化。

聲明一個不可變變量并在不指定類型的情況下對其進行初始化。編譯器推斷類型Int。

kt中的null

  • 在kt里面,如果有一個可以為null,需要在類型后面加上 問號 ?
  • 函數只能傳入不為null的值
  • 參數類型后面加個 ? 問號后,傳入的值可以為null

在這里插入圖片描述

在這里插入圖片描述

package com.tianju.ktLearnfun main() {var neverNull : String = "never Null"// neverNull = nullprintln(neverNull)// 在kt里面,如果有一個可以為null,需要在類型后面加上 問號 ?var nullable:String? = "can be null"nullable = nullprintln(nullable)fun strLength(notNull:String ): Int {return notNull.length}// 函數只能傳入不為null的值strLength(neverNull)
//    strLength(nullable) // 爆紅val str = descStr(null)println(str)println(descStr("hello are you ok?"))
}/*** 返回值為String,* 參數類型后面加個 ? 問號后,傳入的值可以為null*/
fun descStr(maybeStr: String?): String {if (maybeStr !=null && maybeStr.length>0){return "StrLength is ${maybeStr.length}"}return "null"
}

kt中的類

  • 在kt里面沒有 new 關鍵字

在這里插入圖片描述

泛型 Generics

在這里插入圖片描述

package com.tianju.ktLearn/*** 可以輸入多個參數 vararg* <E> 泛型*/
class MutableStack<E>(vararg items: E) {              // 1private val elements = items.toMutableList()fun push(element: E) = elements.add(element)        // 2// 偷看一下fun peek(): E = elements.last()                     // 3// 彈出棧頂元素fun pop(): E = elements.removeAt(elements.size - 1)fun isEmpty() = elements.isEmpty()fun size() = elements.sizeoverride fun toString() = "MutableStack(${elements.joinToString()})"
}fun main() {val mut = MutableStack<String>("hello","pet")println("is mut empty?---> " + mut.isEmpty())print(mut)mut.push("wtt")println(mut)mut.peek()println(mut)val pop = mut.pop()println(pop)println(mut)println("is mut empty?---> " + mut.isEmpty())
}

在這里插入圖片描述

泛型函數Generic Functions

如果函數的邏輯獨立于特定類型,則也可以生成函數。例如,您可以編寫一個實用程序函數來創建可變堆棧:

在這里插入圖片描述

繼承Inheritance

在這里插入圖片描述

在這里插入圖片描述

超類Asiatic

在這里插入圖片描述

在這里插入圖片描述

package com.tianju.ktLearn/*** open 關鍵字就表示是接口 interface*/
open class Dog{open fun fake(){println("wow wow !")}
}class YourDog : Dog(){override fun fake() {println("miao wu ,wow")}
}/*** 帶參數的接口* interface with par*/
open class Cat(val name: String){fun sayHello(){println("A cat name is [$name] say hello")}
}class Arya : Cat("Arya")/*** 超類 :將構造函數參數傳遞給超類*/
open class Lion(val name:String,val age: Int){fun sayHello(){println("hi, every one, my name is $name, age is $age")}
}/*** Asiatic聲明中的name既不是var也不是val:它是一個構造函數參數*/
class Asiatic(name: String) : Lion(name = name, age = 18)fun main() {val dog = YourDog()dog.fake()val cat : Cat = Arya()cat.sayHello()println(cat.name)val lion: Lion = Asiatic("Peter")lion.sayHello()
}

總結

1.kotlin初識;
2.function函數,變量,null;
3.泛型,接口,繼承,超類;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160515.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160515.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160515.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker Swarm總結(2/3)

目錄 8、service 操作 8.1 task 伸縮 8.2 task 容錯 8.3 服務刪除 8.4 滾動更新 8.5 更新回滾 9、service 全局部署模式 9.1 環境變更 9.2 創建 service 9.3 task 伸縮 10、overlay 網絡 10.1 測試環境 1搭建 10.2 overlay 網絡概述 10.3 docker_gwbridg 網絡基礎…

【DevOps】Git 圖文詳解(八):后悔藥 - 撤銷變更

Git 圖文詳解&#xff08;八&#xff09;&#xff1a;后悔藥 - 撤銷變更 1.后悔指令 &#x1f525;2.回退版本 reset3.撤銷提交 revert4.checkout / reset / revert 總結 發現寫錯了要回退怎么辦&#xff1f;看看下面幾種后悔指令吧&#xff01; ? 還沒提交的怎么撤銷&#x…

Visual Studio連接unity編輯器_unity基礎開發教程

Visual Studio連接unity編輯器 問題描述解決方法意外情況 問題描述 當我們在unity編輯器中打開C#腳本的時候發現Visual Studio沒有連接unity編輯器&#xff0c;在編寫代碼的時候也沒有unity關鍵字的提醒。 簡單來說就是敲代碼沒有代碼提示。 解決方法 這時候需要在unity中進行…

Qt實現圖片旋轉的幾種方式(全)

目錄 一、用手搓&#xff08;QPainter&#xff09; 二、使用 QGraphicsView 和 QGraphicsPixmapItem 三、使用 QTransform 實現圖像旋轉 四、利用 OpenGL 實現旋轉圖像的效果有幾種不同的方法&#xff0c;其中常見的包括&#xff1a; 手動旋轉繪制&#xff1a; 使用 QPaint…

網絡吞吐量 公網帶寬有關嗎?

環境&#xff1a; 華為交換機 深信服防火墻 問題描述&#xff1a; 網絡吞吐量 公網帶寬有關嗎&#xff1f; 解決方案&#xff1a; 網絡吞吐量網絡吞吐量是指在特定時間內通過網絡傳輸的數據量。它衡量了網絡設備&#xff08;如防火墻、交換機、路由器&#xff09;或網絡連…

終端仿真軟件 SecureCRT v9.4.2

SecureCRT是一款終端仿真軟件&#xff0c;它提供了類似于Telnet和SSH等協議的遠程訪問功能。SecureCRT專門為網絡管理員、系統管理員和其他需要保密訪問網絡設備的用戶設計。 SecureCRT具有以下特點&#xff1a; 安全性&#xff1a;SecureCRT支持SSH1、SSH2、SSL和TLS等加密和…

素短語的定義

素短語&#xff0c;是指至少含有一個終結符的短語&#xff0c;并且除自身外&#xff0c;不包含更小的素短語。 最左素短語是句型中最左邊的素短語。

7.HTML中列表標簽

7.列表標簽 7.1無序列表&#xff08;重點&#xff09; 表格是用來顯示數據的&#xff0c;那么列表就是用來布局的。 列表最大的特點就是整齊&#xff0c;整潔&#xff0c;有序&#xff0c;他作為布局會更加自由和方便&#xff0c; 根據使用的情景不同&#xff0c;列表可分為三…

數字圖像處理(岡薩雷斯)學習筆記

目錄 一.機器視覺和計算機視覺二.圖像處理基礎1.什么是圖像2.如何訪問圖像 三.圖像仿射變換四.灰度變換 一.機器視覺和計算機視覺 機器視覺(Machine Vision,MV)和計算機視覺(Computer Vision&#xff0c;CV)的區別和聯系&#xff1a; 機器視覺更注重廣義圖像信號(激光&#xff…

C#中的Fody

在C#中&#xff0c;NuGet里的Fody是一個用于.NET應用程序的代碼增強工具。它通過在編譯過程中自動織入代碼&#xff0c;改變目標程序集的行為。Fody的一個常見用途是簡化屬性通知的實現&#xff0c;特別適用于WPF綁定。 在WPF中&#xff0c;屬性通知是一種機制&#xff0c;用于…

C語言操作符例題

這里寫目錄標題 例題一題目解析 例題二題目解析 例題三方法一方法二方法三 例題四例題五 感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接 &#x1f412;&#x1f412;&#x1f412; 個人主頁 &#x1f978;&#x1f978;&#x1f978; C語言 &#x1f43f;?…

智能指針(Newbie Note)

智能指針專題 1.普通指針的問題2.智能指針是什么什么是所有權 3.智能指針三個好處&#xff1a;4.C11提供的智能指針4.1 shared_ptr&#xff08;共享所有權指針&#xff09;4.1.1 分配內存4.1.2 成員函數4.1.3 計數情況匯總&#xff1a;4.1.4 示例代碼(計數)4.1.5 示例代碼(rese…

Java深拷貝與淺拷貝技術解析及實例演示

摘要&#xff1a;本文將詳細介紹Java中的深拷貝和淺拷貝概念&#xff0c;通過分析源碼和舉例說明&#xff0c;幫助讀者更好地理解這兩種拷貝方式的區別及應用場景。 一、深拷貝與淺拷貝的概念 深拷貝&#xff1a;復制一個對象后&#xff0c;無論是基本數據類型還是引用類型&…

多柱漢諾塔問題

k柱漢諾塔 題目描述 漢諾塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又稱河內塔。 傳說大梵天創造世界的時候做了三根金剛石柱子&#xff0c;按左、中、右排序。大梵天在左側的柱子上&#xff0c;從下往上按照大小順序摞著64片黃金圓盤&#xff0c;越靠下的圓盤越大。…

個人博客項目 - 測試報告

文章目錄 一、項目背景二、測試報告功能測試1.編寫測試用例2.登錄測試3.編寫文章測試4.查看文章測試5.刪除文章測試7.注銷登錄測試 自動化測試性能測試1.VUG2.進行場景設計3.生成性能測試報告 總結 本文開始 一、項目背景 通過學習測試相關的知識&#xff0c;動手實踐并測試一…

2023 年 亞太賽 APMCM ABC題 國際大學生數學建模挑戰賽 |數學建模完整代碼+建模過程全解全析

當大家面臨著復雜的數學建模問題時&#xff0c;你是否曾經感到茫然無措&#xff1f;作為2022年美國大學生數學建模比賽的O獎得主&#xff0c;我為大家提供了一套優秀的解題思路&#xff0c;讓你輕松應對各種難題。 以五一杯 A題為例子&#xff0c;以下是咱們做的一些想法呀&am…

【Vue】自定義指令

自定義指令 自定義指令就是自己定義的指令&#xff0c;是對 DOM 元素進行底層操作封裝 ,程序化地控制 DOM&#xff0c;拓展額外的功能 全局定義 Vue.directive(指令名字, definition) 指令名&#xff1a;不包括v-前綴&#xff0c;使用時候包括v-&#xff0c;v-指令名defini…

CUTLASS 1.3.3中的 Volta884_h884gemm

CUTLASS 是 CUDA C 模板抽象的集合&#xff0c;用于在 CUDA 內的所有級別和規模上實現高性能矩陣-矩陣乘法 (GEMM) 和相關計算。它采用了類似于 cuBLAS 和 cuDNN 中實現的分層分解和數據移動策略。 CUTLASS 最新版本為3.3&#xff0c;相比1.3.3變動較大。然而重溫一下1.3.3仍然…

生產問題 Recv-Q101

生產上服務端口 Recv-Q101 新請求到服務器的失敗&#xff0c;幸好及時發現&#xff0c;通過重啟服務之后得到解決&#xff0c;具體原因等待排查 目前覺得的原因是&#xff1a;某些請求暫用時間比較久

Linux超簡單部署個人博客

1 安裝halo 1.1 切換到超級用戶 sudo -i 1.2 新建halo文件夾 mkdir ~/halo && cd ~/halo 1.3 編輯docker-compose.yml文件 vim ~/halo/docker-compose.yml 英文輸入法下&#xff0c;按 i version: "3"services:halo:image: halohub/halo:2.10container_…