(二)flutter入门之dart基础数据类型介绍

时代背景

Dart是谷歌开发的计算机编程语言,后来被Ecma (ECMA-408)认定为标准。它被用于web、服务器、移动应用和物联网等领域的开发。它是宽松开源许可证(修改的BSD证书)下的开源软件。
Dart是面向对象的、类定义的、单继承的语言。它的语法类似C语言,可以转译为JavaScript,支持接口(interfaces)、混入(mixins)、抽象类(abstract classes)、
具体化泛型(reified generics)、可选类型(optional typing)和sound type system.dart语言最早出现在2011年10月10至12日在丹麦奥尔胡斯举行的GOTO大会上,
刚发布时,并无多大波澜,直到2015年5月Dart开发者峰会上,亮相了基于Dart语言的移动应用程序开发框架Sky,后更名为Flutter,那时正基于移动端开发由
应用开发朝混合开发方向转变时期,flutter开始慢慢发展,在2018年2月27日在2018世界移动大会公布了flutter的Beta1版本以后,不到一年的时间,裂变到了1.0版本,
并且github几个月时间内裂变到了50kstar+的成绩,国内大厂纷纷跟进dart和flutter开发,阿里的闲鱼App在谷歌大会后不久,率先大量使用flutter改造客户端,
甚至在不久之前还开源了基于flutter的开源框架Fish Redux,而flutter的社区以及论坛,以及github每天的活跃度快速增高,sdk更新的速度也相当可观,所以可以说现在已经到了全民学习flutter的时代

Dart入坑前必须要知道的点:

  • 在Dart中所有的类都继承于Object类,所有可以使用的变量引用的都是对象类型(即都为类的实例对象),并且数值类型、方法以及null都是对象,真正意义上的完全面向对象的语言

  • 在开发过程中,可以忽略对象的类型,默认未指定类型的变量为dynamic(动态类型),并且可以使用静态类型修饰更明确表达开发的意图

  • Dart 在运行之前会先解析你的代码,你可以通过使用 类型或者编译时常量来帮助 Dart 去捕获异常以及 让代码运行的更高效

  • Dart 支持顶级方法 (例如 main()),同时还支持在类中定义函数,(静态函数和实例函数)。 你还可以在方法中定义方法 (嵌套方法或者局部方法)

  • Dart 还支持顶级变量,以及 在类中定义变量(静态变量和实例变量)。 实例变量有时候被称之为域(Fields)或者属性(Properties)

  • 和 Java 不同的是,Dart 没有 publicprotected、 和 private 关键字。如果一个标识符以 _ 开头,则表示当前对象(库或者类)是私有的,无法被外部直接引用

  • 标识符可以以字母或者 _ 下划线开头,后面可以是 其他字符和数字的组合

  • Dart 工具可以指出两种问题:警告和错误。 警告只是说你的代码可能有问题, 但是并不会阻止你的代码执行。 错误可以是编译时错误也可以是运行时错误。遇到编译时错误时,代码将 无法执行;运行时错误将会在运行代码的时候导致一个异常

  • 表达式 expression语句 statement 是有区别的,不是任何时候都是一样的情况,应当注意区分情况对待

注:Dart语言在某种意义上是完全站在巨人的肩膀为时代背景,并且早期被谷歌寄予厚望,希望能借此挑战js在web端的地位,所以Dart可以说是集百家之长,
C++,Java,Kotlin,Python以及Java Sripct五大语言的优良特性于一身,但也因此失去了属于Dart这门语言的个性和风格,虽然仅仅是单线程运行的语言,
限制了Dart崛起的势头,但是因为有了这些优秀的特性支持,使得Dart依然是个值得推荐学习的面向对象语言(接下来可能会从Dart关键字,类型,异常处理,
异步支持等常见特性和java或者js进行比较学习Dart语言)

Dart中的关键字(截止至Dart 2.x版本)

Dart中的关键字非常多,可以说java,js等常见的关键字都在其中,加起来足足有56个

abstract continue false new this
as default final null throw
assert deferred finally operator true
async do for part try
async* dynamic get rethrow typedef
await else if return var
break enum implements set void
case export import static while
catch external in super with
class extends is switch yield
const factory library sync yield

Dart的变量类型

dart中的变量与java的变量类型有些相似但是又不完全相同,java中的变量类型大概可以归纳为四种类型(常见通用类型):

数值类型:byte、short、int、long
浮点类型:float、double
布尔类型:boolean
字符型:char、String

java中对类型划分很细节化, 区分的很明显,但是在dart中,依然可以大概分为这几类,但是dart中的容错性提高了,细节化减少,dart的基本类型大概如下:

数值类型:int、double、num
布尔类型:bool
字符型:String

可见dart中的数值类型基本就是根据是否浮点类型划分出了两个基本类型以及这两个基本类型的父类型,但是有意思的点是,int和double类型的字节大小数居然和操作系统以及当前输入的位数有关系

int
在dart中,int类型的取值范围取决于当前运行的系统环境,比如dart初衷用来运行在浏览器端,所以dart使用了javaScipct的取值范围,也就是- 2^(53) ~ 2^(53) - 1,
但是由于发展到现在dart不仅仅是用来浏览器方向开发,还兼容跨平台的app开发,所以dart又要兼容客户端的取值范围:- 2^(63) ~ 2^(63) - 1
举例:
int a = 1;
double
dart的双精度类型,取值范围完全遵循的IEEE 754标准
举例:
double a = 1;
num
在dart中除了两个通用的数值类型以外,还存在一个数值类型,即int和double的父类--num,这个类提供了转换为int和double的api方法,并且还有像abs()、
ceil()和floor()这些常见的操作方法,需要注意的是在numbers中默认的计算规则是按照取值范围比较大的double类型来计算的,即初始化的值是int但是赋值
为numbers类型的话,依然是默认按照double类型计算,所以最终需要取到int类型的值的话切记要num.toInt()方法转换为int类型的值
举例:
num a = 1.0;
print(a.toInt());
bool
在dart中有类似java/javaScripct的boolean类型的值,类型为bool,但是需要注意的是在dart中,bool的值属于编译时常量,只有true或者false两个取值
举例:
bool flag = false;
String
在dart中不再有单个字符和多个字符的区别,只有一个统一的标准--字符串类型String,这个类型与java中的String很相似,但是在dart中针对java的String新增了很多人性化的操作(尤其是字符串拼接方面),
在java中字符串拼接可能需要如下方式之一:
StringBuffer buffer = new StringBuffer();
buffer.append("aaa").append("aaa").toString();//或者使用StringBuilder创建字符串
//或者选择字符串拼接,例如:
String a = "aaa";
String b = a + "bbb";
但是可以看到java中的字符串拼接的方式很不方便,必须要+连接,在dart中选择很多,例如,两个都是String类型的字符串拼接的话,可以选择直接+连接符连接,但是遇到拼接的变量中是数值类型或者其他类型的时候,可以使用${name}的方式快速在字符串中拼接当前的变量,例如:
num abc = 1.0;
print("哈哈哈${abc}");
java中字符串拼接还可以选择StringBuffer或者StringBuilder的方式创建字符串,这两种方式在java中的区别无非就是多线程环境下是否是安全的,在dart中,也保留了这个优秀的设定,但是dart是单线程语言,所以dart中只有一个StringBuffer,可以用来写入字符串或者拼接字符串,使用如下:
 StringBuffer buffer = new StringBuffer();
 buffer.write("aaa");
 buffer.write("bvb");
 print(buffer.toString());
除此之外,我们应该知道在js中字符串可以是单引号或者双引号,但是在java中字符串必须是""包裹,只有单个字符才可以''包裹,dart由于两者的优秀特性都有,并且js和dart都只有字符串一个类型,所以在dart中单引号和双引号都可以包裹字符串类型,并且单引号包裹下的字符串还可以用特殊的方式进行数据拼接,例如:
var s1 = '字符串' '可以这样' '来连接';
可以看出来我们可以直接将需要拼接的字符串用单引号包裹,并且并排排放,就会自动进行拼接操作,除了这点以外,dart还吸收了新晋的热门语言python和kothil的特点,加入了'''特性,在java或者js开发的过程中如果我们的字符串特别长,一行放不下的话我们只能选择字符串拼接,不仅不美观,并且对于开发的便捷性也很有影响,但是dart的'''特性可以很轻松解决字符串太多换行的问题,例如:
var s = '''
这是
多行
字符串
''';
只要用'''将输入的文本包裹,中间的文本可以随便换行,是不是很方便呢?
另外在java开发中我们往往遇到了需要进行文字转义的方式,我们一般的处理方案是将\改为\\或者/来处理,但是在dart中我们可以在字符串前加入一个r标示,这样的话我们的文本就是不会被强制转义的了,例如:
var s = r'这是原始字符串,\n不会被显示为换行符。';

如上就是dart的基本类型和常用开发语言的比较,接下来的博客我们会对dart的集合,构造,异常,继承,合并继承以及可选参数的说明

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容