Flutter之旅:Dart基础语法学习

1. Dart中常见数据类型一览:

Dart的常见的数据类型有以下8种:

数据类型.png

1.1 数字类型

num、int和double都是Dart中的类,也就是说它是对象级别的,所以他们的默认值为null。这不同于Java的基本数据类型。

main(){
  num age = 18;//num数据类型
  int height =180;//int整型
  double weight=62.5;//double 浮点型

  print(height/weight is double);//true
  print(height*age is double);//false
  print(age/height is double);//true
}

1.2 布尔类型

布尔类型作为判断的标识,活跃在各大语言中的逻辑判断中,它只有truefalse两种选择。这里注意关键字是bool,而非Java中的boolean

bool isMan = true;
bool isMarried = false;

1.3 字符串类型

字符串是一种语言不可或缺的部分,Dart也不例外。它支持单引号、双引号、以及三引号。需要注意的是单引号中的单引号需要转义,三引号中的字符内容会原样输出。

  String name = '张哈哈先生';//支持单引号
  String proverbs ="'海的彼岸有我未曾见证的风采'";//支持双引号
  String poem=""" //支持三引号
  石榴酒,葡萄浆。
  兰桂芳,茱萸香。
  愿君驻金鞍,暂此共年芳。
  愿君解罗襦,一醉同匡床。
  文君正新寡,结念在歌倡。
  昨宵绮帐迎韩寿,今朝罗袖引潘郎。
  莫吹羌笛惊邻里,不用琵琶喧洞房。
  且歌新夜曲,莫弄楚明光。
  此曲怨且艳,哀音断人肠。
  """;
  print('${name}\n$proverbs\n$poem');//支持字符串中使用变量

1.4 列表类型

List作为一个同类多元素的容器,也是每种语言必备。Dart中的List作为一个类存在,可以当做可操作的数组来对待,起始索引为0。其他语言中对于数组的操作,Dart中基本都有相关的API。

 main() {

  List<int> list = new List();
  List<int> list1 = List();
  List<int> list2=[1,2,3,4,5];//提示:Dart推断list的类型为List<int> 。如果尝试将非整数对象添加到此List中,则分析器或运行时会引发错误。有关更多信息,可以学习 类型推断。
  print(list2[1]);//获取下标为1的值
//遍历数组
//iter for-in 模板
  for (var o in list) {
  }

//itar for-i模板
  for (var i = 0; i < list1.length; ++i) {
    var o = list1[i];
  }

1.5 集合类型

Set作为一个盛放不含重复元素的无序多元素容器,如果添加一个已经存在的元素,是无法添加成功的。所以它没有索引。但有很多方法可以对集合进行操作。

Set<String> languages = {'Java', 'Dart', 'Python', 'C++', 'Kotlin',"Java"};
print(languages);//{Java, Dart, Python, C++, Kotlin}
print(languages.add('Java'));//false
print(languages.add('JavaScript'));//true

1.6 Map类型

Map为若干个键值对的容器,想用映射之名。其中一个Map对象中的键不能重复,值是可以重复的。

Map<int, String> map = {1: 'one', 2: 'two', 3: 'three'};
print(map[3]);//three
map[4] = 'four';
print(map.length);//4

2. Dart中的变量与常量

Dart 作为一名新时代的后起之秀,var自然不能少。Dart语言中对象的类型是可以自动推导的。也就是说,上面的代码在声明变量类型时,都可以用一个var关键字解决。

2.1 var关键字的使用

//1.不指定类型
var age = 18;
var isMan = true;
var name = '张哈哈先生';
var languages1 = ['Java', 'Dart', 'Python', 'C++', 'Kotlin'];
//2.明确指定类型
String name = '张哈哈先生';

因为有类型推导,所以两种实现效果一样,官方推荐在函数内的本地变量尽量使用var声明。在变量类型并不明确的情况下,可以使用dynamic关键字

2.2 var的注意事项

如果只是用var声明变量,该变量之后是可以修改数据类型的。

var who;
who="what";
print(who is String);//true
who=10;
print(who is int);//true

如果声明的同时去赋值,那么该对象的类型就是固定的,不可修改的。

var who="what";
print(who is String);//true
who=10;//此处报错
print(who is int);//true

下面一幅图可以很好地说明原因:


2.3 常量的定义

如果一个变量你以后不打算修改,可以使用 final 或者 const进行修饰,当你试图修改它的值,就会报错。

  final PI = 3.14159265;
  PI=4;// ERROR: 'PI', a final variable, can only be set once.

  const Pi  = 3.14159265;
  Pi=4;// ERROR: Constant variables can't be assigned a value.

2.4 const和final的区别

1、一个 final 变量只能赋值一次: 它的值可以在运行时获取
2、一个 const 变量是编译时常量:代码还没有运行时我们就知道它声明变量的值
3、举例,同样是当前时间,final修饰的f对象是正确的,但const修饰的c是错误的,原因是final可以在运行时对变量初始化,但const不行。

final f = DateTime.now(); // OK
const c = DateTime.now(); // ERROR Const variables must be initialized with a constant value.

3. Dart中的运算符

常见运算符.png

3.1 算术运算符

四则运算

print(1 + 2);//3    加
print(1 - 2);//-1   减
print(1 * 2);//2    乘
print(1 / 2);//0.5  除
print(10 % 3);//1   余
print(10 ~/ 3);//3  商

自加自减

---->[情况1:i++]----
int i=3;
var a=i++;//执行赋值后i才自加,故a=3
print('a=$a,i=$i');//a=3,i=4

---->[情况2:++i]----
int i=3;
var a=++i;//执行赋值前i已经自加,故a=4
print('a=$a,i=$i');//a=4,i=4

---->[情况3:i--]----
int i=3;
var a=i--;//执行赋值后i才自减,故a=3
print('a=$a,i=$i');//a=3,i=2

---->[情况4:--i]----
int i=3;
var a=--i;//执行赋值前i已经自减,故a=2
print('a=$a,i=$i');//a=2,i=2

3.2 关系运算符

print(1 > 2); //false   大于
print(1 < 2); //true    小于
print(1 == 2); //false  等于
print(1 != 2); //true   不等
print(10 >= 3); //true  大于等于
print(10 <= 3); //false 小于等于

3.3 逻辑运算符

bool enter(int age, int height, bool isMan) {
  return (age > 18 || height > 160) && !isMan;
}

代码表示:年龄大于18或者身高大于160的女性可以进入。

3.4 条件表达式

三元运算符:条件? 表达式1: 表达式2
条件成立执行前者,否则,执行后者

var height =130;
var pay = (height>120) ? 200:100;
print(pay);//200

??运算符: 表达式1 ?? 表达式2 前表达式值为null则取后者。否则,后表达式不会被执行

//条件表达式
var conditionBool = true;
print(conditionBool? 'true': 'false');
conditionBool = null;
print(conditionBool ?? 'This message will show when conditionBool is null')

//运行结果
true
This message will show when conditionBool is null

4. Dart中的函数

Dart中,一个函数的基本组成如下:

4.1 基本使用

两个数相加

double add(double a,double b){
  return a+b;
}

调用:add(10,20);//30

4.2 可选参数+默认值

两个数相加,并且可以打个折扣

double add(double a,double b,[double discount=1.0]){
  return (a+b)*discount;
}

调用:add(10,20,0.7);//21

4.3 属性型参数

将参数和一个key对应起来,非常方便和清晰的传参模式

double add(double a,double b,{double discount=1.0,double c=0,double d =0}){
  return (a+b+c+d)*discount;
}

调用:add(10, 20,discount: 0.7,c: 100);//91.0

4.4 函数参数

函数本身也是一个对象,可以作为参数传入。

double add(double a,double b,deal){
  return deal(a)+deal(b);
}

var fun = (double i) {
  return i * i;
};

调用:
print(add(3, 4, fun));//求两数的平方和

4.5 函数简写

var fun = (double i) {
  return i * i;
};

可以简写为:
var fun = (i) {
  return i * i;
};

进一步可以简写为:
var fun = (i)=> i * i;

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

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

推荐阅读更多精彩内容