Flutter:学习笔记(二),Dart语法

刚接触新事物,语法必然很多,慢慢修改记录

定义变量

1、明确声明      变量类型 变量名称 = 赋值;

     不可变变量、静态变量,使用:final、const来表示,即final和const都是用于定义常量的, 也就是定义之后值都不可以修改。

    a、const、final变量需要在声明时赋值进行初始化

    b、const的值在编译时确定,即const在赋值时, 赋值的内容必须是在编译期间就确定下来的;

    c、final的值需要在运行时确定,即inal在赋值时, 可以动态获取, 比如赋值一个函数。但final一旦被赋值后就有确定的结果, 不会再次赋值

    d、const用来修饰静态的变量,final修复不可变得变量。

    e、const常值是防止内容变化.final常量是防止变量寻址,final变量用来提升代码的安全性。

    f、const不仅能修饰变量名,而且还能够【修饰值】,表示其变量中的【常量值】不能发生改变,final不能修饰变量值。

final list = [];   
final list1 = const[];   //虽然是const修饰[],但是只能代表当前下[]不可变
const list2 = [];
const list3 = const[];  ///const允许同时声明变量名和变量值,其变量名和变量值都不能进行改变。
list.add(4) //成立,由于final修饰后变量只要是内存地址不变的前提下都可以修改。
list1.add(4)    //不成立,由于list1指向一个常值不可修改。
list2.add(4)    //不成立,const对应常值,初始化后不论是值、内存地址都不可修改。



///定义的变量可以修改值, 但是不能赋值其他类型
String content = 'Hello Dart';
content = 'Hello World'; // 正确的
content = 111;         // 错误的, 将一个int值赋值给一个String变量



///const的值在编译时确定, final的值需要在运行时确定
String getName() {
  return 'coderwhy';
}

main(List<String> args) {
  const name = getName(); // 错误的做法, 因为要执行函数才能获取到值
  final name = getName(); // 正确的做法
}

///final一旦被赋值后就有确定的结果, 不会再次赋值
final time = DateTime.now();
print(time);         // 2019-04-05 09:02:54.052626

sleep(Duration(seconds: 2));
print(time);         // 2019-04-05 09:02:54.052626

2、var变量     变量类型可以使用runtimeType自动推断

   a、var本身并不是一种类型

   b、var声明的变量在赋值的那一刻,就已经决定了它是什么类型了

var name = 'who are you';
name = 'kube';
print(name.runtimeType);     // String


var age = 18;
age = 'why';     // 不可以将String赋值给一个int类型

3、其他类型(未明确的类型)  Object或dynamic关键字

   a、所有的类型都派生自Object,它可以赋值为任何类型。由于Object是一个类,并不支持某些数学运算符的操作

   b、Object 编译阶段检查类型, 而 dynamic 编译阶段不检查类型,即编译能通过,运行是报错

dynamic x = 'hello';
  print(x.runtimeType);
  print(x.hello()); //此处编译能通过,但是运行报错 提示Class 'String' has no instance method 'hello'.
  print(x);
  x = 123;
  print(x);
  print(x.runtimeType);


dynamic num = "44"; 
num++;  //能够通过编译,但运行时错误






Object o1 = 'hello';
  print(o1.runtimeType);
  print(o1);
  o1 = 345;
  print(o1);
  print(o1.runtimeType);


Object num = "44"; 
num++;     //编译错误

函数

1、无返回值函数,void可省略,且只含一个表达式可简写

void printNumber(num number) => print('The number is $number.');

2、可选命名参数 。使用"{ }"包围的参数属于可选命名参数,也可为可选参数添加默认参数,调用包含可选命名参数的方法时,需要使用paramName:value的形式指定为哪个可选参数赋值。

// 可选命名参数
studentInfo(int num, {String name, int range = 15}) {
  print('Student num: $num,name: $name,range: $range');
}


studentInfo(62, name:'Olive');    // print  Student num: 62,name: Olive,range: 15
studentInfo(10, range: 31);    // print  Student num: 10,name: null,range: 31

3、可选位置参数。在方法参数中,使用"[]"包围的参数属于可选位置参数,调用包含可选位置参数的方法时,无需使用paramName:value的形式,因为可选位置参数是位置,如果想指定某个位置上的参数值,则必须前面位置的已经有值,即使前面的值存在默认值。

// 可选位置参数
userInfo(int age, [String name, int num = 5]) {
  print('User age: $age,name: $name, num: $num');
}


userInfo(15, 'Tom');    // 可行
userInfo(22, 'Marry', 20);    // 可行
userInfo(10, 6);    // 报错,不可跳过“name”参数为“num”赋值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值