Dart语言学习

释放双眼,带上耳机,听听看~!

 

首先贴下文档地址:

https://book.flutterchina.club/chapter1/dart.html

 

一:变量声明

      1.1Variables

          var 可以接收任意类型的变量,但是无法改变变量类型。如: 


1
2
3
4
5
1var name = 'Bob';
2
3执行下面这个赋值时会报错
4name=100;
5

    2:dynamicObject   

     所有能够使用变量引用的都是对象, 每个对象都是一个的实例。在 Dart 中 甚至连 数字、方法和 null 都是对象。所有的对象都继承于Oject类。

   dynamic声明的变量可以赋值任意对象。


1
2
3
4
5
1 dynamic t= "hello world";
2 Object  x= 'Hello world';
3 t = 1;
4 x = 1;
5

 3:Final and const

   final 变量只能赋值一次;const 为编译时变量。 


1
2
3
4
5
6
7
1final string name ='';
2const string avatar='';
3
4final 和const 修饰的变量可省略变量类型,即
5final name ='';
6const avatar='';
7

   4:Numbers(数值)

     num 下有两种数值类型int和double 。

     num 类型定义了基本的操作符,例如 +, -, /, 和 *, 还定义了 abs()、 ceil()、和 floor() 等 函数。

     int 类型支持位移操作。


1
2
3
1assert((3 << 1) == 6);  // 0011 << 1 == 0110
2assert((3 >> 1) == 1);  // 0011 >> 1 == 0001
3

   assert (断言)如果条件表达式结果不满足需要,则可以使用 assert 语句俩打断代码的执行、

5:string 字符串

   Dart 字符串是 UTF-16 编码的字符序列。 可以使用单引号或者双引号来创建字符串:


1
2
3
1var name ='max';
2var avatar="xxx";
3

  string 可通过‘+’ 连接,也可以直接去掉。


1
2
3
1var avatar ='http'+'://'+'www.baidu.com';
2var user='my' 'name' 'is';
3

  可以在字符串中使用表达式 ${expression}。


1
2
3
4
5
1var name ='max';
2
3assert("my name is $name"=="my name is max");
4== 操作符判断两个对象的内容是否一样。 如果两个字符串包含一样的字符编码序列, 则他们是相等的。
5

  6:Lists(列表)


1
2
1var list = [1, 2, 3];
2

   在 list 字面量之前添加 const 关键字,可以 定义一个不变的 list 对象(编译时常量):


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1const list = const [1, 2, 3];
2list[1] = 1;
3
4I/flutter ( 1826): The following UnsupportedError was thrown while handling a gesture:
5I/flutter ( 1826): Unsupported operation: Cannot modify an unmodifiable list
6I/flutter ( 1826): When the exception was thrown, this was the stack:
7I/flutter ( 1826): #0      UnmodifiableListBase.[]= (dart:_internal/list.dart:90:5)
8I/flutter ( 1826): #1      _MyHomePageState._incrementCounter.<anonymous closure> (package:flutter_dart_demo/main.dart:60:11)
9I/flutter ( 1826): #2      State.setState (package:flutter/src/widgets/framework.dart:1130:30)
10I/flutter ( 1826): #3      _MyHomePageState._incrementCounter (package:flutter_dart_demo/main.dart:51:5)
11I/flutter ( 1826): #4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
12I/flutter ( 1826): #5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
13I/flutter ( 1826): #6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
14I/flutter ( 1826): #7      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
15I/flutter ( 1826): #8      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
16I/flutter ( 1826): #9      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
17I/flutter ( 1826): #10     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:184:20)
18I/flutter ( 1826): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
19I/flutter ( 1826): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
20I/flutter ( 1826): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
21I/flutter ( 1826): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
22I/flutter ( 1826): #15     _invoke1 (dart:ui/hooks.dart:168:13)
23I/flutter ( 1826): #16     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)
24
25

二:函数

       方法可以赋值给变量,也可以当做其他方法的参数。 也可以把 Dart 类的实例当做方法来调用。

     2.1函数定义


1
2
3
4
1bool isNoble(int atomicNumber) {
2  return _nobleGases[atomicNumber] != null;
3}
4

     当然还可以忽略返回类型,但是不指定返回类型后,dart语言默认为dynamic,就不是bool类型。


1
2
3
4
5
1//不指定返回类型,此时默认为dynamic,不是bool
2isNoble(int atomicNumber) {
3  return _nobleGases[atomicNumber] != null;
4}
5

  2.2 缩写语法

    对于只包含一个表达式的函数,可以使用简写语法


1
2
1bool isNoble (int atomicNumber )=> _nobleGases [ atomicNumber ] != null ;
2

    在箭头 (=>) 和冒号 (;) 之间只能使用一个 表达式 – 不能使用 语句。 例如:你不能使用if statement,但是可以 使用条件表达式

   2.3Optional parameters可选参数

      可选参数只能在任何必需的参数之后声明。

      可选参数可以有一个默认值,当默认值在调用者没有指定值时使用。

      可选参数分为可选位置参数和可选命名参数。

    2.3.1可选命名参数

      在定义方法的时候,使用 {param1param2, …} 的形式来指定命名参数:


1
2
3
4
1getHttpUrl({String server,int port}) {
2  // ...
3}
4

   调用方法的时候,你可以使用这种形式 paramNamevalue 来指定命名参数。例如: 


1
2
1getHttpUrl(server:"example.com",port:8080);
2

   2.3.2可选位置参数

    把一些方法的参数放到 [] 中就变成可选 位置参数了:


1
2
3
4
1getHttpUrl(string server,string path,[int port=8080]) {
2  // ...
3}
4

调用时有两种方式:

 第一种是不带位置参数的:


1
2
1getHttpUrl("example.com","/user");//port 为8080
2

第二种是带位置参数的:


1
2
1getHttpUrl("example.com","/user",8081);
2

2.4方法作为参数 

  可以把方法当做参数调用另外一个方法。例如:


1
2
3
4
5
6
7
8
1myPrint(element) {
2  print(element);
3}
4
5var list = [1, 2, 3];
6
7list.forEach(myPrint);
8

还可以把方法赋值给变量如:


1
2
3
4
5
6
7
1//定义变量
2var myPrint= (str){
3  print(str);
4};
5
6myPrint("hi world");
7

 2.5匿名方法

    匿名方法又叫lambda或者closure 闭包。

*    *定义:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1([[Type] param1[, …]]) {
2  codeBlock;
3};
4
5可赋值给变量,通过变量进行调用
6
7可在其他方法中直接调用或传递给其他方法
8如:
9
10var func = (str) {
11    print("Hello-------$str");
12  };
13
14func("zh");
15
16
17var list = ['h', 'l', 'l', 'e', 'o'];
18list.forEach((i) {
19  print(list.indexOf(i).toString() + ': ' + i);
20});
21

   

 

 

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++ explicit关键字

2022-1-11 12:36:11

安全资讯

她们为中概股贡献了千亿美元市值,背后故事却鲜为人知?

2021-7-15 11:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索