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的Void
和Unit
可以省略
异步方法(协程)
仅C#和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) }
}
属性定义
var propertyName: String = ""
get() {
return field.ifEmpty {
"EMPTY"
}
}
private set(value) {
if (value != field) {
field = value
}
}
string _PropertyName = "";
string PropertyName
{
get
{
return string.IsNullOrEmpty(_PropertyName) ? "EMPTY" : _PropertyName;
}
private set
{
if (_PropertyName != value)
{
_PropertyName = value;
}
}
}