Dart语言快速入门( 二 )


```dart sayHi({String name}) { print("hello, my name is $name");}
sayHi2({name: String}) { print("hello, my name is $name");}
main() { // 打印 hello, my name is zhangsan sayHi(name: 'zhangsan');
// 打印 hello, my name is wangwu sayHi2(name: 'wangwu');}```从上面代码可以看到,命名参数时可以使用{type paramName}或者{paramName: type}两种方式声明参数,而调用命名参数时,需要以funcName(paramName: paramValue)的形式调用 。
命名参数的参数并不是必须的,所以上面的代码中,如果调用sayHi()不带任何参数,也是可以的,只不过最后打印出来的结果是:hello, my name is null 。
位置参数使用中括号[]括起来的参数是函数的位置参数,代表该参数可传可不传,位置参数只能放在函数的参数列表的最后面,如下代码所示:
```dart sayHello(String name, int age, [String hobby]) { // 位置参数可以有多个,比如[String a, int b] var msg = "hello, this is $name and I am $age years old"; if (hobby != null) { msg = "$msg, my hobby is $hobby"); } print(msg);}main() { // hello, this is zhangsan and I am 20 years old sayHello("zhangsan", 20); // hello, this is zhangsan and I am 20 years old, my hobby is play tv game sayHello("zhangsan", 20, "play tv game");}```参数默认值可以为命名参数或者位置参数设置默认值,如下代码所示:
```// 命名参数的默认值int add({int a, int b = 3}) { return a + b;}// 位置参数的默认值int sum(int a, int b, [int c = 3]) { return a + b + c;}```
main()函数不论在Dart还是Flutter中,必须都需要一个顶层的main()函数,它是整个应用的入口函数,main()函数的返回值是void,还有一个可选的参数,参数类型是List 。
匿名函数大多数函数都是有名称的,比如main() hello()等,但是也可以写匿名函数,如果对JavaScript比较熟悉,看到下面的肯定也不会陌生:
test(Function callback) { callback("hello");}main() { test((param) { // 打印hello print(param); });}匿名函数类似于Java中的接口,往往在某个函数的参数为函数时使用到 。
函数返回值所有的函数都有返回值,如果没有指定return语句,那么该函数的返回值为null 。
运算符Dart中的运算符与JavaScript中的类似,比如++a、a == b、b ? a : b,但是也有一些与JavaScript不太一样的运算符,下面用代码说明:
【Dart语言快速入门】main() { // 与JavaScript相同的运算符操作 int a = 1; ++a; a++; var b = 1; print(a == b); // false print(a * b); // 3 bool real = false; real ? print('real') : print('not real'); // not real print(real && a == b); // false print(real || a == 3); // true print(a != 2); // true print(a <= b); // false var c = 9; c += 10; print("c = $c"); // c = 19 print(1<<2); // 4 // 与JavaScript不一样的运算符操作 // is运算符用于判断一个变量是不是某个类型的数据 // is!则是判断变量不是某个类型的数据 var s = "hello"; print(s is String); // true var num = 6; print(num is! String); // true // ~/才是取整运算符,如果使用/则是除法运算,不取整 int k = 1; int j = 2; print(k / j); // 0.5 print(k ~/ j); // 0 // ??=运算符 如果 ??= 运算符前面的变量为null,则赋值,否则不赋值 var param1 = "hello", param2 = null; param1 ??= "world"; param2 ??= "world"; print("param1 = $param1"); // param1 = hello print("param2 = $param2"); // param2 = world // ?.运算符 var str1 = "hello world"; var str2 = null; print(str1?.length); // 11 print(str2?.length); // null print(str2.length); // 报错}控制流程if...else, switch, for, while, try...catch语句跟JavaScript中都类似,try...catch语句可能稍有不同,下面用一段代码说明:
main() { // if...else语句 int score = 80; if (score < 60) { print("so bad!"); } else if (score >= 60 && score < 80) { print("just pass!"); } else if (score >= 80) { print("well done!"); } // switch语句 String a = "hello"; // case语句中的数据类型必须是跟switch中的类型一致 switch (a) { case "hello": print("good weather"); break; case "world": print("good morning"); break; default: print("good bye"); } // for语句 List<String> list = ["a", "b", "c"]; for (int i = 0; i < list.length; i++) { print(list[i]); } for (var i in list) { print(i); } // 箭头函数参数必须要用圆括号扩起来 list.forEach((item) => print(item)); // while语句 int start = 1; int sum = 0; while (start <= 100) { sum += start; start++; } print(sum); // try...catch语句 try { print(1 ~/ 0); } catch (e) { // IntegerDivisionByZeroException print(e); } try { 1 ~/ 0; } on IntegerDivisionByZeroException { // 捕获指定类型的异常 print("error"); // 打印出error } finally { print("finally"); // 打印出finally }}


推荐阅读