Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Cs Summary Reflection
提交
6ae6c41e
C
Cs Summary Reflection
项目概览
梦境迷离
/
Cs Summary Reflection
10 个月 前同步成功
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Cs Summary Reflection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
6ae6c41e
编写于
7月 24, 2020
作者:
梦境迷离
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add kotlin idiom simples
上级
bc29a6b0
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
173 addition
and
1 deletion
+173
-1
kotlin-study/README.md
kotlin-study/README.md
+5
-0
kotlin-study/src/main/kotlin/io/github/dreamylost/syntax/basic/Demo1.kt
...rc/main/kotlin/io/github/dreamylost/syntax/basic/Demo1.kt
+1
-1
kotlin-study/src/main/kotlin/io/github/dreamylost/syntax/idiom/Demo1.kt
...rc/main/kotlin/io/github/dreamylost/syntax/idiom/Demo1.kt
+167
-0
未找到文件。
kotlin-study/README.md
浏览文件 @
6ae6c41e
# 学习 Kotlin
顺便比较Scala Java Rust Kotlin之间异同,加深对不同语言的理解。
所有代码来自Kotlin官网。
[
基本语法
](
./src/main/kotlin/io/github/dreamylost/syntax/basic/Demo1.kt
)
[
习惯用法
](
./src/main/kotlin/io/github/dreamylost/syntax/idiom/Demo1.kt
)
kotlin-study/src/main/kotlin/io/github/dreamylost/syntax/basic/Demo1.kt
浏览文件 @
6ae6c41e
...
...
@@ -4,7 +4,7 @@ package io.github.dreamylost.syntax.basic
/**
* kotlin入门语法
*
* @author
liguobin@growingio.com
* @author
梦境迷离
* @version 1.0,2020/7/2
*/
fun
main
()
{
...
...
kotlin-study/src/main/kotlin/io/github/dreamylost/syntax/idiom/Demo1.kt
0 → 100644
浏览文件 @
6ae6c41e
/* Licensed under Apache-2.0 @梦境迷离 */
package
io.github.dreamylost.syntax.idiom
import
com.google.gson.Gson
import
com.google.gson.JsonElement
import
java.io.File
import
java.math.BigDecimal
import
java.nio.file.Files
import
java.nio.file.Paths
/**
* kotlin 习惯用法
*
* @author 梦境迷离
* @version 1.0,2020/7/24
*/
fun
main
()
{
val
customer
=
Customer
(
"dreamylost"
,
"dreamylost@outlook.com"
)
println
(
customer
)
println
(
customer
.
copy
(
name
=
"dreamylost2"
))
foo
()
foo
(
a
=
100
)
// 过滤 list,listOf这种生成的是不可变的
val
list
=
listOf
(
1
,
2
,
3
,
4
)
val
positives
=
list
.
filter
{
x
->
x
>
0
}
val
positives2
=
list
.
filter
{
it
>
0
}
// 省略写法,相当于Scala的 list.filter(_ > 0),it与Scala的 _ 作用相同
println
(
positives
)
println
(
positives2
)
// 检测元素是否存在于集合中
if
(
1
in
list
)
{
// 有点像Python,in在这里调用的是contains,但这里是操作符重载
println
(
"exists"
)
}
println
(
"======="
)
// 遍历 map/pair型list
val
map
=
mapOf
(
"key1"
to
"value1"
,
"key2"
to
"value2"
)
// 比较特殊,使用了to函数生成Pair
// 访问 map
println
(
map
[
"key"
])
// null,rust map[key]必须存在,否则报错
// 与rust相似
for
((
k
,
v
)
in
map
)
{
println
(
"$k -> $v"
)
}
println
(
"======="
)
// 使用区间,rust中..是开,..=是闭
for
(
i
in
1
..
100
)
{
// 闭区间:包含 100
println
(
i
)
}
println
(
"======="
)
for
(
i
in
1
until
100
)
{
// scala to是闭,until也是开
// 半开区间:不包含 100
println
(
i
)
}
println
(
"======="
)
for
(
x
in
2
..
10
step
2
)
{
// step表示步长 包含2和10,scala 是by
println
(
x
)
}
println
(
"======="
)
for
(
x
in
10
downTo
1
)
{
// 与step相反,逆序,包含10和1
println
(
x
)
}
if
(
2
in
1
..
10
)
{
println
(
"yes"
)
}
// 延迟属性
val
p
:
String
by
lazy
{
"hello"
}
println
(
p
)
// If not null 缩写 ?
val
files
=
File
(
"Test"
).
listFiles
()
println
(
files
?.
size
)
// If not null and else 缩写
val
files2
=
File
(
"Test"
).
listFiles
()
println
(
files2
?.
size
?:
"empty"
)
// ?: 是null,?是不为null,后可以跟表达式
// if null 执行一个语句
// 在可能会空的集合中取第一元素
val
emails
=
listOf
<
String
>()
val
mainEmail
=
emails
.
firstOrNull
()
?:
""
println
(
mainEmail
)
// 对一个对象实例调用多个方法 (with)
val
myTurtle
=
Turtle
()
with
(
myTurtle
)
{
// 画一个 100 像素的正方形
penDown
()
for
(
i
in
1
..
4
)
{
forward
(
100.0
)
turn
(
90.0
)
}
penUp
()
}
// 配置对象的属性(apply)用于配置未出现在对象构造函数中的属性
// Java 7 的 try with resources
val
stream
=
Files
.
newInputStream
(
Paths
.
get
(
"./README.md"
))
// Scala2.13提供了using,也可以自己实现贷出模式
stream
.
buffered
().
reader
().
use
{
reader
->
println
(
reader
.
readText
())
}
// 交换两个变量
var
a
=
1
var
b
=
2
a
=
b
.
also
{
b
=
a
}
// TODO():将代码标记为不完整,相当于Scala的 ??? 方法
fun
calcTaxes
():
BigDecimal
=
TODO
(
"Waiting for feedback from accounting"
)
}
// 创建 DTOs(POJOs/POCOs)
// 这完全等同于Scala的case class,val仅有get,var还有个set,唯一不同,val时,不能省略val
// equals()
// hashCode()
// toString()
// copy()
data class
Customer
(
val
name
:
String
,
val
email
:
String
)
// 函数的默认参数
fun
foo
(
a
:
Int
=
0
,
b
:
String
=
""
)
{
println
(
"$a,$b"
)
// 字符串差值,Scala多个前缀 s"$a,%b"
}
// 创建单例
object
Resource
{
val
name
=
"Name"
}
// 返回 when 表达式
fun
transform
(
color
:
String
):
Int
{
return
when
(
color
)
{
"Red"
->
0
"Green"
->
1
"Blue"
->
2
else
->
throw
IllegalArgumentException
(
"Invalid color param value"
)
}
}
// “try/catch”表达式
fun
test
()
{
val
result
=
try
{
println
(
"hello"
)
}
catch
(
e
:
ArithmeticException
)
{
throw
IllegalStateException
(
e
)
}
// 使用 result
}
class
Turtle
{
fun
penDown
()
{}
fun
penUp
()
{}
fun
turn
(
degrees
:
Double
)
{}
fun
forward
(
pixels
:
Double
)
{}
}
// 对于需要泛型信息的泛型函数的适宜形式
// 在kotlin中一个内联函数(inline)可以被具体化(reified),这意味着我们可以得到使用泛型类型的Class。
// 不需要传Class<T>
// 使用 reified,可以实现不同的返回类型函数重载 @see https://www.jianshu.com/p/24397a9dd428
inline
fun
<
reified
T
:
Any
>
Gson
.
fromJson
(
json
:
JsonElement
):
T
=
this
.
fromJson
(
json
,
T
::
class
.
java
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录