https://repl.it/repls/HotTemporalMethod
在线代码编写 ide

和绝大多数的编译型语言一样,dart 要求以main 函数作为执行的入口

基本数据类型
num, bool, String, List, Map (但是没有数组的概念)

String 是由UTF-16的字符串组成, 和javascript 一样,构造字符串字面量的时候,即能使用单引号,也能使用双引号.还能在字符串中嵌入变量或者表达式

num - > 64位整形 和 double

  1. //通过类型推导来定义
  2. var name = "hi"; //String类型
  3. var age = 18; //int类型
  4. var high = 1.70; //double类型
  5. //也可以通多定义类型
  6. String name = "bruce"; //String类型
  7. int age = 18; //int类型
  8. var one = int.parse('111');
  9. var two = double.parse('12.22');
  10. //想玩动态类型
  11. dynamic value = 18;
  12. print("value = $value");
  13. value = "bruce";
  14. print("value = $value");
  15. value = 3.5;
  16. print("value = $value");
  17. Object val = 18;
  18. print("val = $val");
  19. val = "bruce";
  20. print("val = $val");
  21. val = 3.5;
  22. print("val = $val");
  23. 作者:Flutter编程指南
  24. 链接:https://juejin.im/post/5c52a386f265da2de25b5c36
  25. 来源:掘金
  26. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  27. //额外
  28. String str2 = """Hi,Bruce
  29. This is Xiaoming.
  30. """; //使用带有单引号或双引号的三重引号可以创建多行字符串
  31. List arr = ["Bruce", "Nick", "John"];
  32. print("arr = $arr");
  33. var s = 'cat';
  34. var s1 = 'this is a string: ${s.toUpperCase()}';

容器类

  1. // List定义
  2. // 1.使用类型推导定义
  3. var letters = ['a', 'b', 'c', 'd'];
  4. print('$letters ${letters.runtimeType}');
  5. // 2.明确指定类型
  6. List<int> numbers = [1, 2, 3, 4];
  7. print('$numbers ${numbers.runtimeType}');
  8. 其中,set可以这样来定义:
  9. 其实,也就是把[]换成{}就好了。
  10. SetList最大的两个不同就是:Set是无序的,并且元素是不重复的。
  11. // Set的定义
  12. // 1.使用类型推导定义
  13. var lettersSet = {'a', 'b', 'c', 'd'};
  14. print('$lettersSet ${lettersSet.runtimeType}');
  15. // 2.明确指定类型
  16. Set<int> numbersSet = {1, 2, 3, 4};
  17. print('$numbersSet ${numbersSet.runtimeType}');
  18. // Map的定义
  19. // 1.使用类型推导定义
  20. var infoMap1 = {'name': 'why', 'age': 18};
  21. print('$infoMap1 ${infoMap1.runtimeType}');
  22. // 2.明确指定类型
  23. Map<String, Object> infoMap2 = {'height': 1.88, 'address': '北京市'};
  24. print('$infoMap2 ${infoMap2.runtimeType}');

函数

  1. 返回值 函数的名称(参数列表) {
  2. 函数体
  3. return 返回值
  4. }
  5. String getName() {
  6. return "Bruce";
  7. }
  8. //Dart 可以像 python 一样,方法声明时返回值可写可不写
  9. sum( var num1){
  10. return num1 + 10;
  11. }
  12. //(可以像js 使用箭头函数,简化)如果函数体中只包含一个表达式,则可以使用简写语法
  13. String getName() => "Bruce";
  14. //可变长参数
  15. // 函数定义
  16. void showDesc({var name, var age}) {
  17. if(name != null) {
  18. print("name = $name");
  19. }
  20. if(age != null) {
  21. print("age = $age");
  22. }
  23. }
  24. // 函数调用
  25. showDesc(name: "Bruce");
  26. // 输出结果
  27. name = Bruce
  28. 使用 [] 来标记可选参数。 以及默认参数
  29. // 函数定义
  30. void showDesc(var name, [var age = 18]) {
  31. print("name = $name");
  32. if(age != null) {
  33. print("age = $age");
  34. }
  35. }
  36. // 函数调用
  37. showDesc("Bruce");
  38. // 输出结果
  39. name = Bruce
  40. age = 18
  41. // 可选参数,用 xx:xx 传值
  42. void test1(var name1, {var name2 = 10, var name3 = 20}) {
  43. print("result = $name1,$name2,$name3");
  44. }
  45. // 位置参数,位置是固定的,你要是想给 name3赋值,必须先给name2赋值
  46. void test2(var name1, [var name2, var name3]) {
  47. print("result = $name1,$name2,$name3");
  48. }
  49. test1("AA", name2: 55);
  50. test2("BB",18,19);

不支持同名函数的重载
bool isZero(int number) => number == 0;


Dart 是面向对象的语言, 每一个对象都是类的实例,都继承自 顶层类型Object.

但是dart 没有 private public 关键字. 需要用 _ 来限制范围 ,类似private

  1. //高阶函数
  2. void man(){
  3. print("man");
  4. }
  5. var f = man;
  6. f();

异常

  1. // 定义一个抛出异常的函数
  2. void handleOperator() => throw Exception("this operator exception!");
  3. // 函数调用
  4. try {
  5. handleOperator();
  6. } on Exception catch(e) {
  7. print(e);
  8. } finally { // finally语句可选
  9. print("finally");
  10. }
  11. // 输出结果
  12. Exception: this operator exception!
  13. finally