Flutter 的开发语言--Dart语言学习

前言

Flutter使用的是Dart语言,我们先来了解Dart的一些基础特性,便于后面Flutter的开发。

变量声明

举例:

 var name = '小明';
 var age = 18;

 String nameStr = "小红";
 int ageInt = 18;

 dynamic address = '北京';
   
 Object money = 100;

总共有四种:

1、var

var name = '小明';
var age = 18;

使用 var 来声明变量,不需要特别指定变量的数据类型。

注意:为什么 var 声明的变量不需要指定数据类型,而能定义所有的变量呢?
因为 var 存储的是值的对象的引用,而不是直接存储的值。

2、明确的数据类型

String nameStr = "小红";
int ageInt = 18;

在声明变量的时候,就使用明确的数据类型。

Dart 支持以下的数据类型:
1、int:整数,范围为 -2^63 到 2^63 - 1。比如:int x = 1;
2、double:浮点数,64位(双精度)浮点数。比如:double y = 1.1111;
3、num:是数字类型,既可以表示整数,也可以表示浮点数,具体看赋的值。比如:num x = 1;//x是整数,num y = 1.1111;//y是浮点数;
4、String:字符串,Dart 字符串采用UTF-16编码,可以使用单引号或双引号来创建字符串。比如:String s = 'test' 或 String = “test”;
5、bool:布尔值。比如:bool isBoy = true;
6、List、Set、Map
7、Runes:表示采用 UTF-32 的字符串,用于显示 Unicode 因为 Dart 字符串是 UTF-16,所以需要 Runes 这个特殊语法转换一下。

3、dynamic

dynamic address = '北京';

dynamic 表明数据类型是动态可变的。它和 var 一样,可以定义任何变量,但是不同的是,var 一旦赋值后,就不能改变数据类型了,但是 dynamic 可以,比如:
如果 var 这样使用,就会有编译错误:

var a = 'test';
a = 1;

如果 dynamic 能够通过编译,但是会在运行时报错:

dynamic a = "test";
a = 1;

4、Object

Object money = 100;

Dart 里所有东西都是对象,是因为 Dart 的所有东西都继承自 Object,因此 Object 可以定义任何变量,并且赋值后,也可以改变类型。

object a = 1;
a = "test";

注意:一般都用Object代替dynamic,而不使用dynamic。

修饰常量用的:finalconst

在用 finalconst 修饰不想改变的值时,需要注意一下几点:

  • 使用 finalconst 的时候可以把 var 省略
  • finalconst 变量只能赋值一次,而且只能在声明的时候就赋值
  • const 是隐式的 final,在使用 const 的时候,如果变量是类里的变量,必须加 static,是全局变量时不需要加

finalconst 区别:
const 是编译时常量,在编译时就初始化,值就确定了。
final 是当类创建的时候才初始化。

List、Set 和 Map

List

//使用构造函数创建对象
var list = List<int>();
list.add(1);
list.add(2);

//通过字面创建对象,list的泛型参数可以从变量定义推断出来
var list2 = [1,2,3];

//没有元素,显示指定泛型参数为int
var list3 = <int>[];
list3.add(1);
list3.add(2);

var list4 = const[1,2];
//list4 指向的是一个常量,不能给它添加元素。也不能修改它
list4.add(3);//error
//list4 本身不是一个常量,所以它可以指向另一个对象
list4 = [4,5];//ok

Set
Set<E>,E 表示 Set 里的数据类型,用大括号来赋值:

Set<String> set = {"aaa","bbb","cccc"};

var set = Set<String>();
      set.add('aaa');
      set.add('bbb');

Map

//第一种写法:
Map map = new Map<String,int>();
//添加
map['a'] = 1;
map['b'] = 2;
//修改
map['a'] = 3;
      
//获取map值
int i = map['a'];


//第二种写法:
 Map<String,String> map2 = {
        "a":"aaa",
        "b":"bbb",
        "c":"ccc"
      };

操作符

主要分为一下几类:

  1. 算术运算符
  2. 比较操作符
  3. 类型判断符
  4. 赋值操作符
  5. 逻辑运算符
  6. 按位与移位运算符
  7. 条件运算符
  8. 级联操作符
  9. 其他操作符

1. 算术操作符

  • +:
  • -:
  • *
  • %:取余
  • -var:负数
  • ++/--:加1/减1
    以上这些都和 Java 中的一样,不同的是
  • /:除,精确除法。比如var a = 3 / 2;结果 a 为 1.5
  • ~/:整除。比如var a = 3 ~/ 2;结果 a 为 1

2. 比较操作符
==、!=、>、<、>=、<= 这些比较操作符和 Java 中一样

3. 类型判断符

  • as:类型转换。注意:转换的对象不能为null。
  • is:判断是否是某个类型,如果是的话,就返回 true。
  • is!:判断是否不是某个类型,如果不是的话,就返回 true。

4. 赋值操作符

  • =:赋值操作符
  • ??=:只有当变量为空的时候才能赋值

5. 逻辑运算符
!、||、&& 这些逻辑符和 Java 一样

6. 按位与移位运算符

  • &:按位与,对于每一个比特位,只有两个操作数相应的比特位都是1时,结果才为1,否则为0
  • |:按位或,对于每一个比特位,当两个操作数相应的比特位至少有一个1时,结果为1,否则为0
  • ^:按位异或,对于每一个比特位,当两个操作数相应的比特位有且只有一个1时,结果为1,否则为0
  • ~:按位非,反转操作数的比特位,即0变成1,1变成0
  • <<:左移
  • >>:右移

7. 条件运算符

  • "? :": 同 Java 中 if else
  • var1 ?? var2:如果 var1 为null,就返回 var2,否则返回 var1

8. 级联操作符

  • ..:允许你对同一对象进行一系列的操作。

9. 其他操作符

  • {}:函数调用
  • []:访问列表
  • .:访问成员变量
  • ?. :有条件的成员变量访问

语句

在Java中常用的 if elseswitchwhiledo while 在 Dart 里面都支持。

函数

在 Dart 中函数也是对象,函数的类型是 Function
模版格式:

返回类型 函数名(函数参数){

}

函数的参数:必选参数和可选参数

  • 必选参数是必填的
  • 可选参数是选填的

必须参数
必选参数就是平时的方法定义的函数参数,比如:

 bool(String name,int age){
    
  }

可选参数
分为两类:

  • 可选命名参数:使用 {} 包起来的参数是可选命名参数
  • 可选位置参数:使用 [] 包起来的参数是可选位置参数
  1. 可选命名参数 {}
    可选参数的赋值必须是 key : value 这种格式,比如:
bool(String name,{int age,int id}){

  }

这里参数 age 就是可选命名参数。
同时还可以给命名参数加 @required,意思是这个也是必填参数。

bool(String name,{@required int age,int id}){

  }
  1. 可选位置参数:[]
    赋值和参数是一一对应的。
bool('小明',"123456");//不对,他是有顺序的

lambda表达式

=> 语句后面只能跟一行代码,而且这一行代码只能是一个表达式,而不能跟语句。表达式可以是函数、值。

void main() => runApp(MyApp());

等价于

void main(){
    return runApp(MyApp());//runApp() 返回的是 void
}

异常

抛出异常:

throw Exception('put your error message here');

捕获异常:

try { 
   // ...
  // 捕获特定类型的异常
} on FormatException catch (e) { 
  // ...
 // 捕获特定类型的异常,但不需要这个对象
} on Exception {  
 // ..
 // 捕获所有异常
} catch (e) { 
 // ...
} finally { 
 // ...
}

跟 Java 不同的是,Dart 可以抛出任意类型的对象。

Dart 中每个对象都是一个类的实例,所有类都继承自 Object。

class Test{
  int x;
  int y;

  Test(int x,int y){
    this.x = x;
    this.y = y;
  }
}

默认构造函数的写法就是使用类名作为函数名的构造函数,Dart 还有更简洁的写法,

Test(this.x,this.y);

另外,在创建实例的时候,可以不使用 new

Test test = Test(1, 2);

总结

Dart 的简单学习到此就结束了,我们主要学习了变量声明、finalconstList SetMap、操作符、语句、函数、lambda 表达式和异常。如果想要了解更多的 Dart 语法,可以去看官方文档(https://dart.dev/guides/language/language-tour)。

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

推荐阅读更多精彩内容