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());
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容