avatar
童琦杰
May 23, 2020Technology

C#、Swift、Kotlin、Java语法对比

基本类型

c# swift kotlin java
byte - Byte byte
bool Bool Boolean boolean
int Int Int int
long - Long long
float Float Float float
double Double Double double
string String String String
decimal Decimal BigDecimal BigDecimal

可空类型

c# swift kotlin java
int? Int? Int? Integer
string String? String? String
decimal? Decimal? BigDecimal? BigDecimal

变量声明

c# swift kotlin java
var a = 1 let a: Int = 1 val a: Int = 1 final int a = 1
var a = 1 var a: Int = 1 var a: Int = 1 int a = 1

匿名函数

c# swift kotlin java
async (p1, p2) => { ... } { (p1: type1, p2: type2) in ... } { p1, p2 -> .... } (p1, p2) -> { ... }

类定义

c# swift kotlin java
class Name: Base class Name: Base class Name: Base class Name extends Base
class Name: Interface class Name: Protocol class Name: Interface class Name implements Interface

kotlin默认类不能被继承,如果需要被继承,需要使用关键字open

构造方法

c# swift kotlin java
ClassName(int p) init(p: Int) constructor(p: Int) ClassName(int p)

kotlin可以有一个一级构造方法和多个二级构造方法,一级构造方法定义在类名后面。另外,kotlin还有初始方法init,执行顺序依次为一级构造方法、初始方法、二级构造方法。

方法定义

c# swift kotlin java
int Name(int p) func name(p: Int) -> Int fun name(p: Int): Int int name(int p)
void Name(int p) func name(p: Int) -> Void fun name(p: Int): Unit void name(int p)

Swift和kotlin的VoidUnit可以省略

异步方法(协程)

仅C#和kotlin支持

kotlin
// 异步方法定义
suspend fun asyncTaskDefinition(p: Int): String {
    return p.toString()
}
// 非异步方法调用异步方法
fun asyncTaskWithoutSuspend(number: Int): String {
    return runBlocking {
        asyncTaskDefinition(number)
    }
}
// 异步方法调用异步方法
suspend fun asyncTaskWithSuspend(number: Int): String {
    return asyncTaskDefinition(number)
}
// 带返回值多个异步任务等待全部执行完成
suspend fun asyncTasksWithReturnValue() {
    val taskOne = CoroutineScope(coroutineContext).async { asyncTaskWithSuspend(2) }
    val taskTwo = CoroutineScope(coroutineContext).async { asyncTaskWithSuspend(5) }
    listOf(taskOne, taskTwo).awaitAll().forEach { println(it) }
}
// 不带返回值多个异步任务等待全部执行完成
suspend fun asyncTasksWithoutReturnValue() {
    val lines = arrayListOf<String>()
    val taskTwo = CoroutineScope(coroutineContext).launch { lines.add(asyncTaskWithSuspend(5)) }
    val taskOne = CoroutineScope(coroutineContext).launch { lines.add(asyncTaskWithSuspend(2)) }
    listOf(taskOne, taskTwo).joinAll()
    lines.forEach { println(it) }
}

属性定义

kotlin
var propertyName: String = ""
    get() {
        return field.ifEmpty {
            "EMPTY"
        }
    }
    private set(value) {
        if (value != field) {
            field = value
        }
    }
csharp
string _PropertyName = "";
string PropertyName
{
    get 
    {
        return string.IsNullOrEmpty(_PropertyName) ? "EMPTY" : _PropertyName;
    }
    private set
    {
        if (_PropertyName != value)
        {
            _PropertyName = value;
        }
    }
}
© 2015-2022 tongqijie.com 版权所有沪ICP备17000682号