Android --- Kotlin學習之路:基礎語法學習筆記

------>可讀可寫變量

var name: String = "Hello World";

------>只讀變量

val name: String = "Hello World"

------>類型推斷

val name: String = "Hello World" 可以寫成 val name = "Hello World"

------>基本數據類型

1.String,Double,Int,Float,Long,Short,Byte,Char,Boolean
2.Kotlin對于小數的默認推斷是Double類型,默認63.and(bits)or(bits), inv()

------>編譯時常量

const val PI = 3.1415 需要定義在全局變量范圍內,不能定義到函數內部,這才叫編譯時常量

------>range 表達式

val number = 148if (number in 0 .. 59) {println("不及格")} else if (number in 60 .. 100) {println("及格")} else if (number !in 0 .. 100) {println("成績無效")}

------>when 表達式

 val month = "January"val result = when(month) {"January" -> "一月""February" -> "二月""March" -> "三月""April" -> "四月""May" -> "五月""June" -> "六月""July" -> "七月""August" -> "八月""September" -> "九月""October" -> "十月""November" -> "十一月""Devember" -> "十二月"else -> "錯誤的月份"}println(result)

------>String 模板

 val isLogin = trueprintln("server respose result : ${if (isLogin) "登錄成功" else "登錄失敗"}")

------>具名函數參數
具名函數的意義是:假如一個函數有多個參數,傳遞參數的時候為了避免一個一個對,可以直接用名字賦值

loginAction(name = "Derr", age =90)private fun loginAction(name: String, age: Int) {println("name is : ${name}, age is : ${age}")}

------>Nothing 類型會終止程序

TODO("not implement")  

------>雙等號相當于Java中的equals(),三哥等號是引用的比較,也就是地址的比較

------>類型轉換相關

val number1 : Int? = "666.6".toIntOrNull() // 能轉換成功就轉換,不成功就返回Null
val r = "%3.f".format(65.38344) // r 的類型是String
println(65.683.roundToInt()) // 會四舍五入,結果是66

------>apply 內置函數

apply 函數會返回對象本身
val file = File("D:\\a.txt")
// 普通寫法
file.setExecutable(true)
file.setReadable(true)
println(file.readLines())//apply寫法
file.apply {setExecutable(true) // 這里面會有this引用,可以省略不寫
}.apply {setReadable(true)
}.apply {println(readLines())
}.ll

------>let 內置函數

fun main() {println(getMethod(null))
}
fun getMethod(value: String?): String {// 判空用法,當value為空的時候將不會執行閉包里面的邏輯return value?.let {"值是非空的"} ?: "值是空的"
}

------->run 擴展函數
最后一行當作函數的返回值,在run函數中可以直接訪問實例的公有屬性和方法

fun main() {println(testRun(Jump()))
}class Jump {fun test():String {return "111"}
}
fun testRun(jump: Jump) : String {jump.run {test() // 直接調用return jump.test()}
}

------>數組的創建

 val array: Array<Any> = arrayOf(1, 2, 3, 4)println(array[0])val arrayOfNulls = arrayOfNulls<Any>(5)arrayOfNulls[0] = "1"arrayOfNulls[1] = 'A'arrayOfNulls[2] = 1arrayOfNulls.forEachIndexed(action = {index, item ->println("$index$item")})

------>可變的集合,不可變的集合

 // 可變集合val array = mutableListOf<Any>()array.add("1")array.add(2)// 不可變集合val arrayInt = listOf(1,2,3)// 可變Mapval arrayMap = mutableMapOf<String, Int>()arrayMap["1"] = 1arrayMap["2"] = 1// 不可變Map,通過Pair指定集合里面的元素val arrayMap2 = mapOf<String, Int>(Pair("1",1))for (item in arrayMap2) {println(item)}

------>

Person().test()
Person.test2()
println(NumUtil.double(4))// 普通類
class Person {fun test() {println("豬頭")}// 半生類companion object{fun test2() {println("半生類")}}
}// 靜態類
object NumUtil {fun double(num: Int): Int {return num * num}
}

------>泛型類和泛型接口

fun main() {val drinkFruits = DrinkFruits()drinkFruits.drinks("apple juice")val eat = EatEgg("blue")eat.prints()
}
// 泛型接口
interface Drink<T> {fun drinks(t: T)
}
class DrinkFruits: Drink<String> {override fun drinks(t: String) {println("Drink:$t")}
}
// 泛型類
abstract class Eat<T> {abstract fun prints()
}class EatEgg(val color: String) : Eat<String>() {override fun prints() {println("eat:${color}'s egg")}
}

------->擴展方法

擴展方法在什么時候使用呢?
當一個jar包中的方法不滿足我們的需求時,
我們可以給jar包中的某個類添加方法,因為jar包中的那個方法本身是不可以修改的

fun main() {println(Jump().doubleJump())
}class Jump {
}fun Jump.doubleJump(): String {val result = "此方法為擴展方法"return result
}

----------->延遲初始化

private lateinit var _binding: FragmentFirstBinding

-----------------------------------------基礎知識學習完之后訓練的例子-------------------------------------------------

package com.example.kotlindemo// 一次2位數四則運算
fun main() {while(true) {// 控制臺輸入println("請輸入一個2位數的加減乘除")val input = readLine()input?.let {val result = calculate(input)println(result)println("是否繼續使用程序,繼續使用請輸入Y,不使用請輸入N")val inputContinue = readLine()inputContinue?.let {if (it != "Y") {System.exit(-1)}}}}}fun calculate(input: String): String {if (input.contains("+")) {val strings = input.trim().split("+")return operate(strings[0].toDouble(), strings[1].toDouble(), "+").toString()} else if (input.contains("-")) {val strings = input.trim().split("-")return  operate(strings[0].toDouble(), strings[1].toDouble(), "-").toString()} else if (input.contains("*")) {val strings = input.trim().split("*")return  operate(strings[0].toDouble(), strings[1].toDouble(), "*").toString()} else if (input.contains("/")) {val strings = input.trim().split("/")return  operate(strings[0].toDouble(), strings[1].toDouble(), "/").toString()} else {return "you input is error!"}
}fun operate(num1: Double, num2: Double, operateChar: String): Double {return when(operateChar) {"+" -> num1 + num2"-" -> num1 - num2"*" -> num1 * num2"/" -> num1 / num2else -> 0.0}
}

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

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

相關文章

MD5加密和注冊頁面的編寫

MD5加密 1.導入包 npm install --save ts-md5 2.使用方式 import { Md5 } from ts-md5; //md5加密后的密碼 const md5PwdMd5.hashStr("123456").toUpperCase(); 遇見的問題及用到的技術 注冊頁面 register.vue代碼 <template><div class"wappe…

從零開始學習嵌入式----Linux 命令行,常用命令速記指南

目錄 一、文件操作 二、文本操作 三、系統管理 四、網絡操作 五、其他常用命令 六、學習建議 在 Linux 世界里&#xff0c;命令行就像一把瑞士軍刀&#xff0c;掌握了它&#xff0c;你就能游刃有余地操控整個系統。但面對茫茫多的命令&#xff0c;新手往往會感到無所適從…

關于Python中的字典你所不知道的七個技巧

01 引言 Python是我最喜歡的編程語言之一&#xff0c;它向來以其簡單性、多功能性和可讀性而聞名。 字典作為Python中最常使用的數據類型&#xff0c;大家幾乎每個人都或多或少在項目中使用過字典&#xff0c;但是字典里有一些潛在的技巧可能并不是每個同學都會用到。 在本文…

相同含義但不同類型字段作為join條件時注意事項

假設表A和表B中都有表示學號的stu_id字段&#xff0c;但該字段在表A和表B中類型分別為bigint和string。當直接通過該字段進行join時&#xff0c;一般情況下可以得到我們預期的結果。 select a.stu_id from a as r join b as l on r.stu_id l.stu_id 但是如果學號長度較長的…

【UE5.1 角色練習】16-槍械射擊——瞄準

目錄 效果 步驟 一、瞄準時拉近攝像機位置 二、瞄準偏移 三、向指定方向射擊 四、連發 效果 步驟 一、瞄準時拉近攝像機位置 打開角色藍圖&#xff0c;在事件圖表中添加如下節點&#xff0c;當進入射擊狀態時設置目標臂長度為300&#xff0c;從而拉近視角。 但是這樣切…

勇攀新高峰|暴雨信息召開2024年中述職工作會議

7月8日至9日&#xff0c;暴雨信息召開2024年中述職工作會議&#xff0c;總結回顧了上半年的成績和不足&#xff0c;本次會議采用線上線下的方式舉行&#xff0c;公司各部門管理人員、前臺市場營銷人員參加述職&#xff0c;公司領導班子出席會議。 本次述職采取了現場匯報點評的…

關于宏v4l2_subdev_call的拆解

struct v4l2_subdev *sd結構體 struct v4l2_subdev { #if defined(CONFIG_MEDIA_CONTROLLER)struct media_entity entity; #endifstruct list_head list;struct module *owner;bool owner_v4l2_dev;u32 flags;struct v4l2_device *v4l2_dev;const struct v4l2_subdev_ops *op…

數字滾動動畫~

前言 數字從0.00滾動到某個數值的動畫 實現&#xff08;React版本&#xff09; Dom <div className"number" ref{numberRef}>0.00</div> JS const _initNumber () > {const targetNumber 15454547.69;const duration 1500;const numberElement…

vivado DRIVE、EDIF_EXTRA_SEARCH_PATHS

驅動器 DRIVE指定配置有I/O的輸出緩沖器的輸出緩沖器驅動強度&#xff08;mA&#xff09; 支持可編程輸出驅動強度的標準。 體系結構支持 所有架構。 適用對象 ?端口&#xff08;get_Ports&#xff09; 連接到輸出緩沖器的輸出或雙向端口 價值觀 整數值&#xff1a; ? 2 ? 4…

【UML用戶指南】-33-對體系結構建模-系統和模型

目錄 1、系統和子系統 2、模型和視圖 3、跟蹤 4、常用建模技術 4.1、對系統的體系結構建模 4.2、對系統的系統建模 模型是對現實世界的簡化——即對系統的抽象&#xff0c;建立模型的目的是為了更好地理解系統。 1、系統和子系統 一個系統可能被分解成一組子系統&#…

09.C2W4.Word Embeddings with Neural Networks

往期文章請點這里 目錄 OverviewBasic Word RepresentationsIntegersOne-hot vectors Word EmbeddingsMeaning as vectorsWord embedding vectors Word embedding processWord Embedding MethodsBasic word embedding methodsAdvanced word embedding methods Continuous Bag-…

esp32硬件電路設計

ESP-IDF 入門指南 | 樂鑫科技 (espressif.com) ESP32-DevKitC V4 入門指南 - ESP32 - — ESP-IDF 編程指南 v5.1 文檔 (espressif.com)

每日一題~abc356(對于一串連續數字 找規律)

添加鏈接描述 題意&#xff1a;對于給定的n,m 。計算0~n 每一個數和m & 之后&#xff0c;得到的數 的二進制中 1的個數的和。 一位一位的算。最多是60位。 我們只需要計算 在 1-n這些數上&#xff0c;有多少個數 第i位 為1. 因為是連續的自然數&#xff0c;每一位上1 的…

Linux下的misc設備驅動

文章目錄 前言一、misc是什么&#xff1f;二、調用API1.注冊2.注銷 三、驅動框架總結 前言 misc設備即雜項設備&#xff0c;Linux系統中類似按鍵、觸摸屏都有專門框架處理&#xff0c;類似adc、蜂鳴器等設備無法明確其屬于什么類型&#xff0c;一般就歸屬于雜項設備&#xff0…

Sqli-labs合集之環境搭建

Sqli-labs的搭建 搭建第一個SQL注入學習靶場環境&#xff1a; 軟件&#xff1a;sqli-labs 安裝過程&#xff1a; 1.源碼地址&#xff1a;GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based.&#xff1b; 2.將壓縮包解壓到phpst…

PyCharm\VsCode——Python第三方庫下載換源

為什么要換源&#xff1f; Python第三方庫下載默認鏡像源在國外&#xff0c;因為特殊的原因在國內的你我利用這個鏡像源往往速度會非常地慢&#xff0c;因此為了提速將這個默認鏡像源換成國內的鏡像源是非常有必要的。 鏡像源的種類有哪些&#xff1f; 國外鏡像源——官方 http…

Python基礎學習筆記——異常

目錄 一、bug的簡介二、異常捕獲預處理機制1. 繼承2. 捕獲與預處理3. 嵌套與傳遞 一、bug的簡介 1947年&#xff0c;世界第一部萬用計算機的進化版——馬克2號&#xff08;Mark II&#xff09;的程序運行發生了異常&#xff0c;計算機程序之母格蕾絲經調試后&#xff0c;發現是…

C#實用的工具類庫

Masuit.Tools Masuit.Tools大都是靜態類&#xff0c;加密解密&#xff0c;反射操作&#xff0c;樹結構&#xff0c;文件探測&#xff0c;權重隨機篩選算法&#xff0c;分布式短id&#xff0c;表達式樹&#xff0c;linq擴展&#xff0c;文件壓縮&#xff0c;多線程下載&#xf…

非線性系列(三)—— 非線性求解器算法分類

1. 總體認知 CAE中的非線性方程組求解主要依賴牛頓法&#xff08;及牛頓法的變體&#xff09;&#xff0c;步驟如下 以線搜索方法為例&#xff0c;流程如下: 2. 方法分類 適用范圍大類小類描述牛頓法雅可比矩陣難獲取擬牛頓法 Broyden&#xff08;Secant method&#xff09;、…

DP(1) | Java | LeetCode 509, 70, 746 做題總結

509. 斐波那契數 https://leetcode.cn/problems/fibonacci-number/ 確定dp數組&#xff08;dp table&#xff09;以及下標的含義 dp[i] 第i個斐波那契數值為dp[i] 確定遞推公式 題目說了 F(n) F(n - 1) F(n - 2)dp數組如何初始化 題目說了 F(0) 0&#xff0c;F(1) 1確定遍歷…