项目 | 概述 | 语言 | 特性 | 备注 |
基本类型 | 整数、浮点数 | C++ | 整数类型宽度不固定,如 int,自动数值类型转换 | |
Java | 没有无符号整数,存在装箱Box类型 | |||
C# | ||||
Swift | 基本 tuple 类型 | |||
Kotlin | T? 是 Box 的 | |||
Dart | ||||
运算符 | 赋值、流程、算术、位、逻辑、关系运算符 | C++ | 取址运算符,指针运算符,函数运算符 | |
Java | ||||
C# | ||||
Swift | 赋值运算符没有返回值 | |||
Kotlin | 位运算符通过一些方法实现,比如:xor() | |||
Dart | ||||
字符及字符串 | 字符串字面量 | C++ | 没有指定的字符集 | |
Java | ||||
C# | ||||
Swift | 单字符也用 ”“,多行""" | |||
Kotlin | 多行""" | |||
Dart | ||||
集合类型 | 数组、字典 | C++ | 内置数组是特殊类型,T t[],不同于 std::array<T> | |
Java | ||||
C# | ||||
Swift | 数组形式:类型 [T],字典形式:类型 [K:V] | |||
Kotlin | Array 固定长度,ArrayList 可变长度 | |||
Dart | ||||
控制流 | 条件、循环、条件分支 | C++ | do while | |
Java | ||||
C# | ||||
Swift | 条件部分没有 () 包围,必须有 { } | |||
Kotlin | when 代替 switch | |||
Dart | ||||
函数 | 支持默认参数 | C++ | 可变参数使用 va_args 处理 | |
Java | ||||
C# | ||||
Swift | Argument Label 强制调用者使用参数 label | |||
Kotlin | 支持具名参数传递 | |||
Dart | ||||
闭包 | 函数式编程 | C++ | lamda 表达式,指定变量捕捉 | |
Java | ||||
C# | ||||
Swift | 自动管理变量捕捉和生命期,内存;闭包是引用类型 | |||
Kotlin | lamda 表达式,参数写在 {} 里面 -> 开始代码体,省略参数 it,不可return | |||
Dart | ||||
枚举 | enum | C++ | 不支持遍历,可以通过Qt元数据加强 | |
Java | ||||
C# | ||||
Swift | 支持附加值,可以递归附加同类型枚举 | |||
Kotlin | 枚举类,可以实现接口,可以遍历 | |||
Dart | ||||
结构和类 | 类型 | C++ | 两者没有多大区别,主要体现在访问控制上 | |
Java | ||||
C# | ||||
Swift | 值和引用类型有很大不同 | |||
Kotlin | 数据类 data,主构造器属性,自动生成一些方法,可以解构 | |||
Dart | ||||
属性 | 实例属性 | Qt/C++ | 属性与方法关联, READ WRITE | |
Java | ||||
C# | ||||
Swift | Stored属性和Computed属性,没有实例变量 | |||
Kotlin | 后端属性和计算属性,如果引用 field,就是后端属性 | |||
Dart | ||||
方法 | 实例方法 | C++ | this 指针 | |
Java | ||||
C# | ||||
Swift | self 属性 | |||
Kotlin | 中缀表示法 infix | |||
Dart | ||||
下标操作 | 针对类实例使用下标获取子元素,类似数组操作 | C++ | 支持操作符重载,下标操作符 [] | |
Java | ||||
C# | ||||
Swift | 支持多维下标 | |||
Kotlin | ||||
Dart | ||||
继承 | override | C++ | 支持跨级调用基类的方法 | |
Java | ||||
C# | ||||
Swift | 调用 super 方法 | |||
Kotlin | 需要明确 open/override | |||
Dart | ||||
构造 | 属性默认值 | C++ | 自动生成拷贝构造 | |
Java | ||||
C# | ||||
Swift | 没有 new 关键字 | |||
Kotlin | 没有 new 关键字 | |||
Dart | ||||
析构 | 自动生成析构 | C++ | 支持虚析构,可以 delete 基类指针 | |
Java | ||||
C# | ||||
Swift | 没有 delete 关键字,自动引用计数 | |||
Kotlin | ||||
Dart | ||||
可选值链 | 内置的 optional 类型(属性,参数,返回值) | C++ | 没有语言内置的 optional 类型 | |
Java | ||||
C# | ||||
Swift | ||||
Kotlin | ||||
Dart | ||||
异常处理 | 抛出异常 | C++ | 任意类型实例都可以作为抛出,但是建议 std::exception 派生类 | |
Java | 抛出 Error、Exception 派生类实例 | |||
C# | ||||
Swift | 抛出满足 Error 协议的实例 | |||
Kotlin | ||||
Dart | ||||
类型转换 | 继承体系的向上、向下转换 | C++ | 一般没有运行时类型信息,Qt 元数据是一个替代 | |
Java | ||||
C# | ||||
Swift | 有运行时类型信息,转换可能失败 as? as! | |||
Kotlin | ||||
Dart | ||||
嵌套类型 | 类型、方法内定义嵌套类型 | C++ | ||
Java | 支持访问外部类的成员,static 嵌套不支持 | |||
C# | ||||
Swift | ||||
Kotlin | 嵌套类 inner,可以访问外部类成员 | |||
Dart | 支持访问外部类的成员 | |||
扩展 | 扩展属性,方法,嵌套类型 | C++ | 不支持扩展 | |
Java | 接口 default 方法 | |||
C# | ||||
Swift | 可以为空对象 T? 扩展方法 | |||
Kotlin | ||||
Dart | extension | |||
协议(接口) | 不实现协议的成员(属性,方法) | C++ | 没有纯粹的接口,支持用纯虚函数;支持多继承,虚拟继承 | |
Java | ||||
C# | ||||
Swift | 构造函数也可以作为协议要求 | |||
Kotlin | 接口 interface ,可以实现方法、计算属性 | |||
Dart | ||||
泛型 | 泛型函数 | C++ | 不支持 where 约束,模板编译时不检查,实例化时会报错 | |
Java | ||||
C# | ||||
Swift | 协议的附加类型 associatedtype ,可以带约束, where 约束 | |||
Kotlin | ||||
Dart | ||||
自动引用计数 | 强引用,弱引用 | C++ | 通过库实现 | |
Java | 在语言层面默认强引用,弱引用通过库实现 | |||
C# | ||||
Swift | 在语言层面默认强引用,支持弱引用 | |||
Kotlin | ||||
Dart | ||||
访问控制 | 类型访问控制 | C++ | 没有包、文件访问控制,protected 权限用于派生类访问基类 | |
Java | 没有文件访问控制,protected 权限用于派生类访问基类 | |||
C# | ||||
Swift | 默认 internal 包内可访问 | |||
Kotlin | 没有文件单元的权限 | |||
Dart | ||||
反射 | 表示类型的类型 | C++ | 一般不使用运行时类型信息 rtti,使用 Qt 元数据信息 | |
Java | ||||
C# | ||||
Swift | let metatype : X.Type = X.self | |||
Kotlin | ||||
Dart | ||||
协程 | C++ | |||
Java | ||||
C# | ||||
Swift | ||||
Kotlin | ||||
Dart |
大前端几种开发语言对比
最新推荐文章于 2023-11-01 08:45:00 发布