Kotlin vs Dart vs Swift:语法对比全解

我来从多个维度对比 Kotlin、Dart 和 Swift 这三种现代编程语言的语法:

一、基础语法对比

  1. 变量声明
kotlin 复制代码
// Kotlin
val immutable = "不可变"  // 只读变量
var mutable = "可变"      // 可变变量
lateinit var late: String // 延迟初始化
dart 复制代码
// Dart
final immutable = '不可变'; // 运行时常量
const compileConst = '编译时常量'; // 编译时常量
var mutable = '可变'; // 类型推断
String explicit = '显式类型'; // 显式类型
late String lateVar; // 延迟初始化
swift 复制代码
// Swift
let constant = "不可变"      // 常量
var variable = "可变"        // 变量
lazy var lazyVar: String = { // 延迟初始化
    return "lazy"
}()
  1. 空安全
kotlin 复制代码
// Kotlin
var nullable: String? = null // 可空类型
val length = nullable?.length ?: 0 // 安全调用和 Elvis 操作符
val forced = nullable!!.length // 非空断言
dart 复制代码
// Dart
String? nullable = null; // 可空类型(Dart 2.12+)
int length = nullable?.length ?? 0; // 空感知和空合并
int forced = nullable!.length; // 空断言
swift 复制代码
// Swift
var optional: String? = nil // 可选类型
let length = optional?.count ?? 0 // 可选链和空合并
let forced = optional!.count // 强制解包

三、函数/方法

  1. 基本定义
kotlin 复制代码
// Kotlin - 函数式风格
fun add(a: Int, b: Int): Int = a + b // 单表达式函数
fun process(name: String = "default") { // 默认参数
    println(name)
}
dart 复制代码
// Dart
int add(int a, int b) => a + b; // 箭头函数
void process({String name = 'default'}) { // 命名参数
    print(name);
}
swift 复制代码
// Swift
func add(_ a: Int, _ b: Int) -> Int { a + b } // 隐式返回(Swift 5.1+)
func process(name: String = "default") { // 默认参数
    print(name)
}
  1. 高阶函数
kotlin 复制代码
// Kotlin
val numbers = listOf(1, 2, 3)
val doubled = numbers.map { it * 2 } // lambda 表达式
numbers.filter { it > 1 }
       .forEach { println(it) }
dart 复制代码
// Dart
var numbers = [1, 2, 3];
var doubled = numbers.map((e) => e * 2); // 箭头函数
numbers.where((e) => e > 1)
      .forEach(print);
swift 复制代码
// Swift
let numbers = [1, 2, 3]
let doubled = numbers.map { $0 * 2 } // 闭包表达式
numbers.filter { $0 > 1 }
      .forEach { print($0) }

四、类与对象

  1. 类定义
kotlin 复制代码
// Kotlin - 简洁语法
class Person(
    val name: String, // 主构造函数参数
    var age: Int
) {
    init {
        println("初始化") // 初始化块
    }
    
    fun greet() = "Hello, $name"
}
dart 复制代码
// Dart
class Person {
  final String name;
  int age;
  
  Person(this.name, this.age); // 简洁构造函数
  
  String greet() => 'Hello, $name';
}
swift 复制代码
// Swift
class Person {
    let name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    func greet() -> String {
        return "Hello, \(name)"
    }
}
  1. 继承
kotlin 复制代码
// Kotlin - 默认 final
open class Animal(val name: String) // 必须用 open
class Dog(name: String) : Animal(name) {
    override fun sound() = "Woof!" // 必须显式 override
}
dart 复制代码
// Dart
class Animal {
  final String name;
  Animal(this.name);
  
  void sound() => print('Sound');
}

class Dog extends Animal {
  Dog(String name) : super(name);
  
  @override
  void sound() => print('Woof!');
}
swift 复制代码
// Swift
class Animal {
    let name: String
    init(name: String) {
        self.name = name
    }
    
    func sound() {
        print("Sound")
    }
}

class Dog: Animal {
    override func sound() { // 必须显式 override
        print("Woof!")
    }
}

五、异步编程

  1. 异步语法
kotlin 复制代码
// Kotlin - 协程
suspend fun fetchData(): String {
    delay(1000)
    return "Data"
}

// 使用
viewModelScope.launch {
    val data = fetchData()
    updateUI(data)
}
dart 复制代码
// Dart - async/await
Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 1));
  return 'Data';
}

// 使用
fetchData().then((data) {
  updateUI(data);
});
swift 复制代码
// Swift - async/await
func fetchData() async -> String {
    try await Task.sleep(nanoseconds: 1_000_000_000)
    return "Data"
}

// 使用
Task {
    let data = await fetchData()
    updateUI(data)
}

六、集合操作

  1. 集合创建
kotlin 复制代码
// Kotlin
val list = listOf(1, 2, 3) // 不可变列表
val mutableList = mutableListOf(1, 2, 3) // 可变列表
val map = mapOf("a" to 1, "b" to 2)
dart 复制代码
// Dart
final list = [1, 2, 3]; // 列表字面量
final constList = const [1, 2, 3]; // 编译时常量
final map = {'a': 1, 'b': 2};
swift 复制代码
// Swift
let array = [1, 2, 3] // 数组
let dict = ["a": 1, "b": 2] // 字典
var mutableArray = [1, 2, 3] // 可变数组(使用 var)

七、扩展功能

  1. 扩展函数/方法
kotlin 复制代码
// Kotlin
fun String.addExclamation(): String = "$this!"
"Hello".addExclamation() // "Hello!"
dart 复制代码
// Dart
extension StringExtension on String {
  String addExclamation() => '$this!';
}
"Hello".addExclamation(); // "Hello!"
swift 复制代码
// Swift
extension String {
    func addExclamation() -> String {
        return self + "!"
    }
}
"Hello".addExclamation() // "Hello!"

八、特性对比表

特性 Kotlin Dart Swift

空安全 ✅ 编译时 ✅ 健全空安全 ✅ 可选类型

类型推断 ✅ 强大 ✅ 良好 ✅ 强大

函数式编程 ✅ 优秀 ✅ 良好 ✅ 良好

协程/异步 ✅ 协程 ✅ async/await ✅ async/await

扩展函数 ✅ 支持 ✅ 支持 ✅ 支持

主平台 Android、JVM Flutter、Web iOS/macOS

语法简洁度 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐

互操作性 Java JavaScript Objective-C

九、总结

  1. Kotlin - 最函数式,语法最简洁,适合 Android 和 JVM 开发
  2. Dart - 平衡性最好,Flutter 生态成熟,适合跨平台
  3. Swift - 性能优秀,Apple 生态完善,语法现代但稍显冗长

三者都是现代、安全的语言,选择主要取决于:

· Android 开发 → Kotlin

· 跨平台移动开发 → Dart (Flutter)

· iOS/macOS 开发 → Swift

· 服务端/通用 → Kotlin 或 Dart

相关推荐
LawrenceLan14 小时前
Flutter 零基础入门(九):构造函数、命名构造函数与 this 关键字
开发语言·flutter·dart
一豆羹14 小时前
macOS 环境下 ADB 无线调试连接失败、Protocol Fault 及端口占用的深度排查
flutter
行者9614 小时前
OpenHarmony上Flutter粒子效果组件的深度适配与实践
flutter·交互·harmonyos·鸿蒙
行者9617 小时前
Flutter与OpenHarmony深度集成:数据导出组件的实战优化与性能提升
flutter·harmonyos·鸿蒙
小雨下雨的雨17 小时前
Flutter 框架跨平台鸿蒙开发 —— Row & Column 布局之轴线控制艺术
flutter·华为·交互·harmonyos·鸿蒙系统
小雨下雨的雨18 小时前
Flutter 框架跨平台鸿蒙开发 —— Center 控件之完美居中之道
flutter·ui·华为·harmonyos·鸿蒙
小雨下雨的雨19 小时前
Flutter 框架跨平台鸿蒙开发 —— Icon 控件之图标交互美学
flutter·华为·交互·harmonyos·鸿蒙系统
小雨下雨的雨19 小时前
Flutter 框架跨平台鸿蒙开发 —— Placeholder 控件之布局雏形美学
flutter·ui·华为·harmonyos·鸿蒙系统
行者9619 小时前
OpenHarmony Flutter弹出菜单组件深度实践:从基础到高级的完整指南
flutter·harmonyos·鸿蒙
前端不太难20 小时前
Flutter / RN / iOS,在长期维护下的性能差异本质
flutter·ios