diff --git a/Learning/基本的项目结构.md b/Learning/基本的项目结构.md new file mode 100644 index 0000000..fe5aa07 --- /dev/null +++ b/Learning/基本的项目结构.md @@ -0,0 +1,32 @@ +# 项目的基本结构 + +## 目录 + +一般来讲,一个 KMP 项目在生成的时候,长这样 + +- / + - androidApp/ + - desktopApp/ + - iosApp/ + - webApp/ (JS 已经死了,现在的是 WAMS) + - shared/ + - src/ + - commonMain/ + - commonTest/ + - androidMain/ + - ...... + - build.gradle.kts + - .gitignore + - README.md + - gradle 二进制文件(三大平台各一个) + - gradle.proporties + - local.proporties + - build.gradle.kts + - settings.gradle.kts + +如果你的项目还要包含 server 的部分的话,那会稍微复杂一点点 + +## 各部分用途 + +所有的共享的部分(如UI,基础逻辑)都写在 `shared/commonMain` 里面,不同平台如果要做不同的效果,那么,相应的代码写在对应的 `Main` 里面,`App` 目录主要控制打包设置和进入软件的窗口设定,虽然可以写针对不同平台的不同效果,但是不推荐。 + diff --git a/Learning/引入Kotin_Java.md b/Learning/引入Kotin_Java.md deleted file mode 100644 index e0f884a..0000000 --- a/Learning/引入Kotin_Java.md +++ /dev/null @@ -1,57 +0,0 @@ -# 引入 Kotlin - -预计时间 1h - -> 如果您会写 Java,那么事情将会**非常**简单。 - -## 基本语法 - -### 顶层函数 - -Kotlin 程序也从 main 函数开始,你可以直接这么写 - -```kotlin -fun main() { - println("Hello World!") -} -``` - -可以看到,它有很多 C++ 与 Python 的特点。 - -### 定义变量 - -这里不会列举所有写法,只写明最常用的写法。 - -#### 普通变量和类成员变量 - -```kotlin -val a: Int // 可以注意到,所有类都以大写开头 -val a = 0 // 支持先声明,再赋值 - -val b = "abc" // 直接赋值省略显式变量类型 - -var c = 3.0f // 可变变量 - -const val STR = "常值变量支持String,推荐大写下划线" -``` - -### 定义普通函数 - -在 Kotlin 里面,cpp 的 void $\Leftrightarrow$ Kotlin 的 Unit - -```kotlin -fun oneFuntion(): Unit { - // do something... -} -``` - -在函数定义明确的时候是不需要指明返回值的,除非是接口或用作 lambda 变量。 - - -### 定义类与接口 - -## 高级一点 - -### lambda变量与复杂函数 - -## 某些独到的 Kotlin 小特性 \ No newline at end of file diff --git a/Learning/引入Kotin_fast.md b/Learning/引入Kotin_fast.md new file mode 100644 index 0000000..d5e66c2 --- /dev/null +++ b/Learning/引入Kotin_fast.md @@ -0,0 +1,120 @@ +# 引入 Kotlin + +预计时间 1h + +> 如果您会写 Java,那么事情将会**非常**简单。
+> 如果您会写 CPP/Python,那么事情将会**较为**简单。 + +## 基本语法 + +### 顶层函数 + +Kotlin 程序也从 main 函数开始,你可以直接这么写 + +```kotlin +fun main() { + println("Hello World!") +} +``` + +可以看到,它有很多 C++ 与 Python 的特点。 + +### 定义变量 + +这里不会列举所有写法,只写明最常用的写法。 + +#### 普通变量和类成员变量 + +```kotlin +val a: Int // 可以注意到,所有类都以大写开头 +val a = 0xFF // 支持先声明,再赋值,还有经典非十进制写法 + +val b = "abc" // 直接赋值省略显式变量类型 + +var c = 3.0f // 可变变量 + +const val CONST_STR = "常值变量支持String,推荐大写下划线" +``` + +### 定义普通函数 + +在 Kotlin 里面,cpp 的 void $\Leftrightarrow$ Kotlin 的 Unit + +```kotlin +fun oneFuntion(): Unit { + // do something... +} +``` + +参数需指明变量类型,支持变长参数,不支持字典 + +```kotlin +fun thisFuntion(int: Int, vararg folders: String): Int { + // do something... +} + +fun thatFuntion(vararg folders: String): String { + val a = thisFuntion(1, *folders) // 与 Python 写法一致 + // do something... +} +``` + +在函数定义明确的时候是不需要指明返回值的,除非是接口或用作 lambda 变量。 + + +### 定义类与接口 + +```kotlin +class MyClass() {} +interface MyInterface() {} +``` + +## 高级一点 + +### 列表 + +```kotlin +val list = ListOf(1, 2, 3, 4, 5, 6) // List 不可变 +val array = arrayOf("1", "2", "3") // array 可变长 +``` + +### lambda变量与复杂函数 + +```kotlin +// 定义一个 lambda 很方便 +val func = { firstVal: Int, secVal: String -> + secVal + firstVal // 不写 return 则默认最后一行是返回值 +} +``` + +func 变量的类型是 `(Int, String) -> String`,简单易懂 + +当函数的最后一行是 lambda 变量时,可以在调用时简化 + +```kotlin +fun doOrNull( + obj: SomeClass?, // 问号表示类型可空 + func: (SomeClass) -> Int +): Int? { + return if (obj == null) obj // if 可以被直接返回,这代替了三目运算符 + else func(obj) +} + +// 使用时 + +val a = doOrNull(b) { someClass -> someClass.c + 1 } +// 在圆括号后直接写 lambda 定义,很方便 +``` + + +## 某些独特的 Kotlin 小特性 + +### 可空变量与对象 + +```kotlin +``` + +### if 与 when + +```kotlin +``` diff --git a/Learning/引入Kotlin.md b/Learning/引入Kotlin.md index b7ae128..1256baf 100644 --- a/Learning/引入Kotlin.md +++ b/Learning/引入Kotlin.md @@ -4,9 +4,9 @@ > 个人认为,Kotlin 是最好的 JVM 语言。 -## 如果你会写 Java +## 如果你会写 Java 或 Cpp/Python -请看 [为会写 Java 的朋友们设计的引入](./引入Kotlin_Java.md) +请看 [为会写其他高级语言的朋友们设计的引入](./引入Kotlin_fast.md) ## 推荐 IDE diff --git a/README.md b/README.md index 6e65f0d..7dc295b 100644 --- a/README.md +++ b/README.md @@ -9,12 +9,14 @@ ### Kotlin Multiplatform -1. [基本的 UI 结构](Learning/基本的UI结构.md) -2. +1. [基本的项目结构](Learning/基本的项目结构.md) +2. [基本的 UI 结构](Learning/基本的UI结构.md) +3. ### 番外 1. [我做的 FFmpeg 库](Extra/我做了一个KMP的FFmpeg库.md) +2. ## 有关 KMP 的项目结构