dart学习(和js java比较)

dart学习(和js比较):

参考文献:https://www.w3cschool.cn/nxvsy/nxvsy-58fq35q6.html

在线dart环境: https://dartpad.cn/

声明变量:

多了一个 final 和const几乎一样。只是 const 要求不能不给初值,而final是可以不给初值的,没给初值的final可以进行赋值,赋值了之后就无法再改变。

没有let,var 替代了let。 但是一旦给变量赋值后 它的类型就是确定的了,不能再改变。


var ce = 1;
ce = 'ssss';
//   ↑ 这里报错: A value of type 'String' can't be assigned to a variable of type 'int'.

多了 一种 dynamic 动态的,如果是dynamic的就能 赋值成一种类型后 再改变。


dynamic ce = 1;
ce = 'ssss';
// 没毛病

类型

1、多了一种 Rune类型(表示Unicode字符)

2、Map Set多了几种表示的方式。

Set:


var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};

// 形同:
var halogens1 = Set<String>();
halogens1.add('fluorine')

// 形同:
var halogens2 = <String>{};
halogens2.add('ssss');

Map:


var nMap = {};
// 形同:
var nMap1 = new Map<dynamic,dynamic>();

// 假如
var mMap = { 1:'test' };
// 形同:
var mMap1 = Map<Number, String>();

值得注意的是,dart中没有js里隐式的类型转换,所以只有bool类型能作为是否判断

函数:

1、命名参数:声明函数的时候给参数加上大括号(类似于react组件参数的写法)。在调用该函数时,可以用 参数名称:变量 的方式去指定参数。

(这样就避免了要记第几个参数是啥,只要记得名字就好,更方便阅读。当然这样是不是也就意味着没有像js函数参数上的解构呢?)

如果函数使用了命名参数,调用时必须加上参数名称。


String add({String ce, String le} ){
  return ce + le;
}

void main() {
  // 输出: bs
  print(add(le:'s',ce:'b'));
}

2、可选参数: 如果把参数用[]中括号括起来 就能设为可选的参数。

没法和命名参数合用

3、参数默认值和js一样用 = 设置

4、函数不再用 function 声明,而是用返回值类型 来替代function的位置(和java一样)

5、匿名函数:和js一样可以用箭头函数,同时甚至更进一步——箭头都省略。


var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
  print('${list.indexOf(item)}: $item');
});

list.forEach((item) => print('${list.indexOf(item)}: $item'));

6、函数内是可以再声明函数的,这点和js相同和java不同。

7、有闭包的概念。


/// 返回一个函数,返回的函数参数与 [addBy] 相加。
Function makeAdder(num addBy) {
  return (num i) => addBy + i;
}

void main() {
  // 创建一个加 2 的函数。
  var add2 = makeAdder(2);

  // 创建一个加 4 的函数。
  var add4 = makeAdder(4);

  assert(add2(3) == 5);
  assert(add4(3) == 7);
}

8、函数返回值,js默认返回undefined,而dart默认返回null。

运算符

1、 ~/ 除以并取整。


print(10 ~/ 2 ); // 5
print(11 ~/ 2 ); // 5
print(12 ~/ 2 ); // 6

2、只有== 没有===

3、as is is!

用于类型判断 is is! 类似于js typeof。(只是类似)

而 as 则类似于一个语法糖:如果 is 则做什么:


if (emp is Person) {
  // Type check
  emp.firstName = 'Bob';
}
// 形同:
(emp as Person).firstName = 'Bob';

4、-= += /= %= js中也有或者即将出现在ES标准中的运算

5、三元运算符 ? : 和js中一样。

6、?? 用于表示 如果前面的为null 则给出后面的


String playerName(String name) => name ?? 'Guest';
// 形同
String playerName(String name) => name != null ? name : 'Guest';
// 形同
String playerName(String name) {
  if (name != null) {
    return name;
  } else {
    return 'Guest';
  }
}

7、级联运算符 (..) 表示往上追溯到第一级 语句返回的对象。


querySelector('#confirm') // 获取对象。
  ..text = 'Confirm' // 调用成员变量。
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

// 形同

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

8、?. 和js一样

控制语句

1、assert方法: 只在测试环境有效的断言,如果第一个参数为false,那么会打印第二个参数(String),并终止程序,如果第一个参数为true,啥都不发生。

异常

1、catch语句前可以用on XXX catch(e){} 来捕获特定类型的错误。


try {
  breedMoreLlamas();
} on OutOfLlamasException {
  // 一个特殊的异常
  buyMoreLlamas();
} on Exception catch (e) {
  // 其他任何异常
  print('Unknown exception: $e');
} catch (e) {
  // 没有指定的类型,处理所有异常
  print('Something really unknown: $e');
}

1、new 关键词变成可选

2、注意空安全问题。 存在late关键字 表示延迟初始化。

3、对象的runtimeType 可以在运行时获取对象的类型

4、同样存在super关键字,但是使用上有所不同

5、私有属性用下划线表示,只能在同一文件(库)中访问 -- 和java prorect保护类型 类似但又不完全类似

6、构造参数后 会有一个初始化列表的位置来初始化

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

推荐阅读更多精彩内容

  • 这篇文章将会向你展示如何使用Dart的每一个知识点,包括变量,操作符,类,类库,但这是在你已经有一个其他语言的编码...
    LineCutFeng阅读 837评论 0 2
  • 阅读 language-tour[https://dart.dev/guides/language/languag...
    aJIEw阅读 450评论 0 1
  • 目录 参考资料 语言特性 关键字 变量与常量 数据类型 运算符 operators 控制流程语句 异常 Excep...
    GuoDongW阅读 185,066评论 22 341
  • 一. Dart入口方法 每一个flutter项目的lib目录里面都有一个main.dart。这个文件就是flutt...
    骑马纵天下阅读 2,526评论 0 1
  • 任何保存在变量中的都是一个对象, 并且所有的对象都是对应一个类的实例, 无论是数字,函数和 null 都是对象,所...
    虚拟J阅读 326评论 0 0