Dart学习笔记

Dart学习笔记

目录
·1.推荐学习网站
·2.认识dart
·3.语言特性
·4.变量与常量
·5.关键字
·6.流程控制语句
·7.hello word
·8.关于map
·9.dart的方法特性

写在前面
仅作为笔记交流,记录语法的重点和特性,这不是一个写的面面俱到的笔记。

1.推荐学习网站

  • Dart编程语言中文网:http://dart.goodev.org/
    
  • Flutter中文网:https://flutterchina.club/
    

博客

2.认识dart

Dart是谷歌开发的计算机编程语言,。它被用于web、服务器、移动应用和物联网等领域的开发。它是宽松开源许可证(修改的BSD证书)下的开源软件。
Dart是面向对象的、类定义的、单继承的语言。它的语法类似C语言,可以转译为JavaScript,支持接口(interfaces)、混入(mixins)、抽象类(abstract classes)、具体化泛型(reified generics)、可选类型(optional typing)和sound type system.

3.语言特性

  • 在dart语言中,一切皆为对象。所有的对象都是一个类的实例。甚至整数、函数、null也看做是对象。所有的对象都继承于Object类
  • 尽管Dart是强类型语言,但是变量的类型指定不一定要标明,因为Dart可以推断出它的类型。比如说变量number就可以被推测出是int类型。如果你想明确表示这个变量不想被任何一个类型指定,那就使用特殊类型dynamic来表示。
  • Dart语言支持通用类型,比如List<int>表示整数集列表,List<dynamic>表示元素集为任意类型对象的列表
  • Dart支持顶级函数(如main()),以及绑定到类或对象的函数(分别是静态方法和实例方法)。您还可以在函数中创建函数(嵌套函数或本地函数)。
  • 类似的,Dart支持顶级变量,以及绑定到类或对象(静态和实例变量)的变量。实例变量有时称为字段或属性。
  • 有别于JAVA语言,dart语言中没有public、protected和private这些关键字。在dart里面,如果标识符以下划线(_)开头,那么它对其库是私有的
  • Dart里面的标志符号由、字母和数字组成,只能以或者字母开头
  • Dart既有表达式(具有运行时值),也有语句(不具有运行时值)。比如传统的表达式condition ? expr1 : expr2会有一个值,expr1或者expr2。相比较于if-else语句,则没有值。一个语句通常包括一个或者多个表达式,但是一个表达式不能直接包含一个语句。
  • Dart工具会向你发出两种类型问题:警告和错误。警告则是指出你的代码存在问题,但是不会阻止你正在执行的程序。错误则会发生在编译时和运行时。编译时的错误会完全阻止你代码的运行。运行时错误导致代码执行时引发异常。

4.变量与常量

变量:
* 使用var声明变量,可赋予不同类型的值
* 未初始化时,默认值为null
* 使用final声明一个只能赋值一次的变量
* 变量的声明,可以使用 var、Object 或 dynamic 关键字。

常量:
* 使用const声明常量
* 使用const声明的必须是编译期常量,不能再次被赋值
* final的顶级或类变量在第一次使用时被初始化。
* 被final或者const修饰的变量,变量类型可以省略。
* 被 final 或 const 修饰的变量无法再去修改其值。
* 注意:flnal 或者 const 不能和 var 同时使用
* 常量如果是类级别的,请使用 static const

final 要求变量只能初始化一次,并不要求赋的值一定是编译时常量,可以是常量也可以不是。
而 const 要求在声明时初始化,并且赋值必需为编译时常量。
final 是惰性初始化,即在运行时第一次使用前才初始化。而 const 是在编译时就确定值了。

变量声明代码演示:

var a;
a = 100;
print(a);

常量声明代码演示:

const a = 30;

5.关键字

参考博客 https://www.jianshu.com/p/3d927a7bf020
写的很详细了。不搬了。

6.流程控制语句

if..else..
switch case
for
while
...
这类语法与java基本无差。

7.国际惯例 hello word

void main(){
  print("hello word");
}

8.关于map

dart中的map没有提供put()方法,我们在dart中不能像java一样愉快的使用map.put(k,v)进行数据的添加。

但dart提供了一个类似于Java中的map.putAll()的方法,map.addAll();
该方法具有和Java中的map.putAll()方法一样的特性,合并两个map集合,假如新添加的map集合里面包含了原map集合中相同的key,则该对象会被覆盖掉。

代码演示

Map a ={1:"one",2:"two",3:"three"};
Map b ={3:"THREE",4:"four",5:"five"};
a.addAll(b);
print(a);

打印结果:

{1: one, 2: two, 3: THREE, 4: four, 5: five}

9. dart的方法特性

方法也是对象,并且有具体类型 Function
返回值类型,参数类型 都可以省略
箭头语法 : => exprreturn expr; 的缩写 只适用于一个表达式。
方法都有返回值,如果没有指定返回值,默认的 return null 省去。
匿名方法(){}

9.1. 箭头语法 => 实例演示:

void main(){
  print(test("hello_"));
}
test(String str) => str * 3;

打印结果:

hello_hello_hello_

9.2. 匿名方法 (){}

方法定义

(参数1,参数2,...){
    方法体...
    return 返回值
}

实例演示:

((){
    print("匿名方法演示");
  }
  )();

打印结果:

匿名方法演示

9.3. 可命名参数方法 和 可选位置参数方法

可命名参数方法:fun f({param1,param2,…})
可选位置参数方法:fun f([param1,param2,…]
如果存在具体参数,可选参数声明,必须在参数后面 fun f(String str ,{param1,param2,...})
参数有默认值的方法 :
可命名参数(有默认值):fun f({String param1 = "test",int param2 = 2,…})
可选位置参数(有默认值):fun f([String param1 = "test",int param2 = 2,…])


9.3.1 可命名参数方法实例演示
void main(){
  print("------可命名参数------");
  printPerson("李四");
  printPerson("李四",age:20,gender: "www");
  // 先传gender
  printPerson("李四",gender: "www",age:20);

}
printPerson(String name,{int age,String gender}){
  print("name = $name,age = $age,gender = $gender");
}

打印结果:

------可命名参数------
name = 李四,age = null,gender = null
name = 李四,age = 20,gender = www
name = 李四,age = 20,gender = www

理解:
可命名参数方法,大括号{}内的参数,具名传参,无视参数顺序。


9.3.2 可选位置参数方法实例演示

void main(){
    print("------可选参数------");
    printPerson_2("张三");
    printPerson_2("张三",20);
    printPerson_2("张三",20, "zzz");

}
printPerson_2(String name,{int age,String gender}){
    print("name = $name,age = $age,gender = $gender");
}

打印结果:

------可选参数------
name = 张三,age = null,gender = null
name = 张三,age = 20,gender = null
name = 张三,age = 20,gender = zzz

理解:
可选位置参数方法,在传参的时候中括号[]内的参数,按顺序传入。


*9.3.3参数含默认值的方法 *

void main(){
  print("------可命名参数(有默认参数值)------");
  printPerson("李四");  // 打印结果 name = 李四,age = 30,gender = 默认
  printPerson("李四",age:20); //name = 李四,age = 20,gender = 默认
  printPerson("李四",age:20,gender: "www"); //name = 李四,age = 20,gender = www
  print("------可选位置参数(有默认参数值)------");
  printPerson_2("张三");
  printPerson_2("张三",20);
}
// 可命名参数方法
printPerson(String name ,{int age = 10 ,String gender = "默认"}){
  print("name = $name,age = $age,gender = $gender");
}

// 可选位置参数方法
printPerson_2(String name , [int age=10, String gender]) {
  print("name=$name,age=$age,gender=$gender");
}

打印结果:

------可命名参数(有默认参数值)------
name = 李四,age = 10,gender = 默认
name = 李四,age = 20,gender = 默认
name = 李四,age = 20,gender = www
------可选位置参数(有默认参数值)------
name=张三,age=10,gender=null
name=张三,age=20,gender=null

结论理解:
可选参数包含默认值的时候,如果调用方法传参,没有传入该参数,则使用该参数的默认值,如果有传入该参数,则会使用传入的参数值。

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

推荐阅读更多精彩内容

  • 一个基本的Dart程序 下面的代码中使用了很多Dart最基本的特性: 重要概念 所有你能够赋值给一个变量的都是一个...
    YZune阅读 14,498评论 2 14
  • Dart语法预览 重要概念: 所有能够使用变量引用的都是对象, 每个对象都是一个类的实例。在 Dart 中 甚至连...
    xmb阅读 447评论 0 2
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,727评论 2 9
  • 布尔值判断:只有 true 对象才被认为是 true,其他:实例对象,null,false 都判断为false 创...
    KtYY阅读 464评论 0 1
  • 变量 创建变量并初始化变量:var name = 'Bob' ; 如果对象不限于单一类型:dynamic name...
    _白羊阅读 231评论 0 0