同时搞定Android和iOS的Dart语言(1):Dart初探
Dart 支持AOT(Ahead Of Time)编译方式,可以将源代码编译成快速执行的本地代码。它允许几乎所有的Flutter都用Dart编写。这不仅使得Flutter运行速度更快,而且所有东西(包括所有的组件)都可以定制。
Dart同样支持JIT(Just in time)编译方式,开发周期非常快,而且可以做到亚秒级热重载。
Dart可以更容易的创建60fps的流程动画与转场。。Dart可以在没有锁的情况下分配对象和垃圾回收。并且,与JavaScript类似,Dart没有使用抢占式调度和共享内存(所以并不需要锁)。由于Flutter 应用可以被编译成本地代码,所以编译后的程序不需要在执行过程中建立一个缓慢的桥梁(例如,JavaScript到本地代码)。Flutter应用启动速度也会更快。
Dart并不需要单独的声明式布局语言(如JSX或XML),或单独的可视化界面构建器,因为Dart的声明式布局代码易于阅读和可视化。所有的布局使用一种语言,聚集在一处。Flutter很容易提供高级工具,使布局更简单。
Dart语言非常容易学习,因为Dart有静态语言用户和动态语言用户所熟悉的特征。
在Dart语言中,所有的东西都是对象,无论是变量、数字、函数等都是对象。所有的对象都是类的实例,所有的类都继承自Object类。这一点与Java语言类似:一切皆为对象。
Dart语言允许指定数据类型,也可以不指定数据类型,如果在定义一个变量时未指定数据类型,Dart编译器会根据右侧初始化变量的值自动推断变量的数据类型。如果在定义变量时未初始化变量,而是在后面初始化的变量,那么变量的数据类型就是dynamic。Dart语言不会对dynamic进行数据类型检查,也就是说,dynamic类型的变量可以保存任何类型的值,也可以访问任何属性和方法(如果不存在,Dart语言会提供特殊的处理方式,详细内容请看后面的章节)。哪怕dynamic类型变量中的某个成员不存在,在编译时也不会出错,但在运行时可能会抛出异常,这一点类似于JavaScript。不过建议指定数据类型,这样Dart编译器会尽可能将潜在的错误检测出来。
Dart是一种单线程的编程语言,与JavaScript类似,也支持async/await,用法也与JavaScript类似。
强类型(静态类型语言):变量和函数的返回值需要在编译时确定一个唯一的数据类型。如果数据类型不一致,在编译时会抛出异常,也就是类型检查未通过。
弱类型(动态类型语言):变量的数据类型在运行时确定,而且变量的数据类型在运行时可以变化。例如,一个变量在初始化时是字符串类型,在运行时,可以将一个整数赋给该变量,那么这时这个变量的数据类型就是int类型了。这种强类型编程语言中是绝对不允许的。
int number1 = 20; // 指定number1变量的数据类型为int
var number2 = 20; // 自动识别number2变量的数据类型为int
var number = 20;
number = "hello world"; // 会抛出异常,不能将字符串类型的值赋给int类型的变量
void main() {
var s1 = "hello world"; // 自动识别s1为字符串类型
String s2 = "I love you.";
print(s1);
print(s2);
// 输出s1的数据类型
print( s1.runtimeType.toString());
var s4; // 默认值是null, s4是dynamic数据类型,因为在定义变量时未初始化
s1 = 20; // 抛出异常,因为不能将整数赋给一个字符串变量
}
var s1 = "hello world" // 自动识别s1为字符串类型
var s2:String = "I love you."
print(s1)
print(s2)
// 输出s1的数据类型
print(type(of: s1))
s1 = 20 //抛出异常,不能将整数赋给一个字符串变量
var s1 = "hello world" //自动识别s1为字符串类型
var s2:String = "I love you."
println(s1)
println(s2)
// 输出s1的数据类型
println(s1::class.simpleName)
s1 = 20 //抛出异常,不能将整数赋给一个字符串变量
s1 := "hello world" // 定义s1变量,并自动识别s1为字符串类型
var s2 string = "I love you."
fmt.Println(s1)
fmt.Println(s2)
fmt.Println(reflect.TypeOf(s1));
s1 = 20; //抛出异常,不能将整数赋给一个字符串变量
var s1 = "hello world" // 尽管目前s1是字符串类型,但可以改变s1的数据类型
var s2 = "I love you."
console.log(s1)
console.log(s2)
console.log(typeof(s1))
s1 = 20 // 将s1的数据类型变为int
console.log(typeof(s1))
s1 = true // 将s1的数据类型变为bool
console.log(typeof(s1))
s1 = "hello world" // 尽管目前s1是字符串类型,但可以改变s1的数据类型
s2 = "I love you."
print(s1)
print(s2)
print(type(s1))
s1 = 20 // 将s1的数据类型变为int
print(type(s1))
s1 = True // 将s1的数据类型变为bool
print(type(s1))
greet(String name) {
return 'Hello $name';
}
main() {
var name = "李宁";
print(greet(name));
}
本文分享自微信公众号 - 极客起源(geekculture)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
图解一致性哈希算法,全网(小区局域网)最通俗易懂
点击上方蓝色“后端技术学堂”关注后加个“星标” 最新分享第一时间看! 正文共 5558 字,预计阅读时长 8分钟 好久不见小伙伴们,最近都快忙晕了,后端技术学堂差点停课,不过还是抽时间写了这篇文章带大家一起学习一致性哈希算法。 很多同学应该都知道什么是哈希函数,在后端面试和开发中会遇到「一致性哈希」,那么什么是一致性哈希呢?名字听起来很厉害的样子,其实原理并不复杂,这篇文章带你彻底搞懂一致性哈希! 进入主题前,先来一场紧张刺激的模拟面试吧。 模拟面试 面试官:看你简历上写参与了一个大型项目,用到了分布式缓存集群,那你说说你们是怎么做缓存负载均衡? 萌新 :这个我知道,我们用的是轮询方式,第一个key 给第一个存储节点,第二个 key 给第二个,以此类推。 面试官:还有其他解决方案吗? 萌新:可以用哈希函数,把请求打散随机分配到缓存集群内机器。 面试官:考虑过这种哈希方式负载均衡的扩展性和容错性吗? 萌新:... 面试官:回去等通知吧。 以上如有雷同,算你抄我的。 什么是哈希 数据结构中我们学习过哈希表也称为散列表,我们来回顾下散列表的定义。 散列表,是根据键直接访问在指定储存位置数据的...
- 下一篇
谁说Cat不能做链路跟踪的,给我站出来
背景 链路跟踪,我们有很多可选项。常见的有 zipkin,pinpoint,skywalking,jaeger 等。 基本上都是根据谷歌的《Dapper 大规模分布式系统的跟踪系统》这篇论文发展出来的。 今天讲下 Cat 里的链路跟踪要如何来实现,没用过 Cat 的同学可以查看我的这篇文章 《熬夜之作:一文带你了解 Cat 分布式监控》进行了解。 在 Cat 中可以很方便的看到每个请求的总耗时以及业务操作,数据库操作的耗时情况。对于服务之间的调用也可以通过埋点的方式进行监控。 如下图,可以看出请求内发起了一次 RPC 的调用,callRPC 开头的那条记录。耗时 11ms, 但是这个 RPC 服务内部耗时花在哪里了,在这边不能直接查看,只能去另一个服务中查看,不是很方便。 图片 详细的我画了一张图说明下现在的问题: 从上图可以看出,一个请求经过了多个服务,每个服务中对远程调用或者本地调用都有埋点,这样就能监控到调用的异常和性能指标。 下面一部分是在 Cat 中我们去查看这些指标的场景,Cat 中的数据展示是以项目维度来展示的,所以每个服务都有自己的监控数据。 如果我想要知道刚刚那次请求...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Hadoop3单机部署,实现最简伪集群