Flutter Dart 变量和内置类型

目录

一、变量

        1.1 var

        1.2 Object

        1.3 dynamic

        1.4 final与const

二、内置类型

        2.1 num(数值)

        2.2 Strings(字符串)

        2.3 bool(布尔值)

        2.4 List(列表)

        2.5 Map(映射集合)

        2.6 runes(Unicode字符,了解即可)

        2.7 Symbols(操作符标识符,了解即可)


        Dart语言的内容挺多的,咱不用都学了。就跟Java 一样,学了也不一定用。咱们可以先上手入门,后面再慢慢填充自己的小知识库。

        1. 变量和内置类型;

        2. 操作符、方法与异常;

        3. 类;

        4. 异步编程。

        搞定这些就可以上手自己的小Demo了,其他的再慢慢填充。今天咱们先学学第一项变量和内置类型

一、变量

        跟其他语言一样main函数是执行入口。

void main(){
  //使用单引号和双引号效果是一样的
  var scc1  = 'scc';
  var scc2 = "scc";
  String scc3 = "scc";
  Object scc4 = 'scc';
  dynamic scc5 = 'scc';

  print(scc1==scc2);//true
  print(scc2==scc3);//true
  print(scc3==scc4);//true
  print(scc4==scc5);//true
  //变量是一个引用,scc1 - scc5 的变量都引用了 一个内容为 “scc” 的 String 对象。
}

        可以用var、Object与dynamic声明的变量赋任何类型的值,但是背后的原理却是非常不同。不用全掌握,了解即可,不影响开发。

        1.1 var

        声明的变量在赋值的那一刻,决定了它是什么类型。

  //var、Object与dynamic
  var dart = "scc";//String 类型
  //正确使用
  dart = "6.20";
  print(dart);//6.20
  //错误使用,编译不通过
  //1.不能将int的值赋值给String
  //dart = 1;
  //2.或者将int值强转成String
  //dart = 1 as String;

        1.2 Object

        与Java一样Object是所有类的基类,Object声明的变量可以是任意类型。(在 Dart 中 甚至连 数字、方法和 `null` 都是对象,比如int。)

  //String类型
  Object dart2 = "scc";
  print("${dart2.runtimeType} + $dart2");//String + scc
  //int类型
  dart2 = 1;
  print("${dart2.runtimeType} + $dart2");//int + 1

        dart2.runtimeType,获取类型

        1.3 dynamic

        不是在编译时候确定实际类型的, 而是在运行时。dynamic声明的变量行为与Object一样

1.没有初始化的变量自动获取一个默认值为 `null`(类型为数字的 变量如何没有初始化其值也是 null)。
2.在声明变量的时候,也可以选择加上具体 类型:dart3 = "scc";
3.对于局部变量,按照Dart代码风格推荐,使用 `var` 而不是具体的类型来定义局部变量。

  //String类型
  dynamic dart3 = "scc";
  print("${dart3.runtimeType} + $dart3");//String + scc
  //int类型
  dart3 = 1;
  print("${dart3.runtimeType} + $dart3");//int + 1

        1.4 final与const

        如果不打算改变一个变量,可以使用final和const,它们可以替代任何类型,只能在声明时初始化,且不能改变。

        final:运行时常量

        const:编译器常量,编译时常量能够让代码运行的更高效。

  //初始化为常数值,推荐使用const
  final String a = "scc";
  const String c = "scc";
  final String b;
  b = "scc";
  //const 必须初始化,以下是错误使用
  //const String d;
  //d = "scc";

注:类的变量可以为 final 但是不能是 const 。如果 const 变量在类中,需要定义为 static const 静态常量。

        定义静态常量 

class AppManager {
  static const String KEY_LOGIN_USER = "key_login_user";
  static const String KEY_LOGNO = "key_logno";
  static const String KEY_TOKEN = "key_token";
  static const String KEY_UID = "key_uid";
}

二、内置类型

        2.1 num(数值)

sealed class num implements Comparable<num> {
}

abstract final class int extends num {
    
}
abstract final class double extends num {

}
  num z = 1;
  int x = 2;
  double v = 1.5;

        2.2 Strings(字符串)

        Dart 字符串是 UTF-16 编码的字符序列。 可以使用单引号或者双引号来创建字符串,单引号和双引号可以嵌套使用,字符串中也可以引用变量与表达式。

  var name = 'scc';
  //如果插入一个简单的标识符,而后面没有紧跟更多的字母数字文本,那么{}应该被省略。
  //也可以使用+号拼接
  var str1 = "名字 is $name!";//名字 is scc!
  var str2 = "名字 is ${name.toUpperCase()}zimu";//名字 is SCCzimu
  var str3 = "名字 is "+name.runtimeType.toString()+" 类型";//名字 is String 类型
  print(str1);
  print(str2);
  print(str3);

        使用三个单引号或者双引号可以 创建多行字符串对象

  //使用三个单引号或者双引号可以 创建多行字符串对象
  var s1 = '''
使用三个单引号或者双引号可以
创建多行
字符串对象
''';
  print(s1);
  var s2 = """使用三个单引号或者双引号可以s2
创建多行s2
字符串对象s2""";
  print(s2);

        运行效果

        

        2.3 bool(布尔值)

        Dart 有一个名字为 bool 的类型,只有两个对象是布尔类型的:true 和 false 。这一点和Java没有太大的区别。

        2.4 List(列表)

        列表数据类型类似于其他编程语言中的数组。列表用于表示对象的集合。它是一组有序的对象。 用 List 表示。

  var list = [1, 2, 3];
  //Lists 的下标索引从 0 开始,第一个元素的索引是 0. list.length - 1 是最后一个元素的索引
  print(list[list.length-1]);//3
  //修改元素
  list[0] = 2;
  print(list.toString());//[2, 2, 3]

  List<int> list2 = [3];
  list2[0] = 2;
  print(list2.toString());//[2]

  //在 list 字面量之前添加 const 关键字,可以 定义一个不变的 list 对象(编译时常量)
  var list3 =  const [1,2,3];
  list3.add(2); ///错误,list不可变

        2.5 Map(映射集合)

        键值对相关的对象。 键和值可以是任何类型的对象。每个 只出现一次, 而一个则可以出现多次。这个赋值和Java有明显的区别,这个是要注意的。

//导入库
import 'dart:collection';

void main(){
  //初始化方法一
  Map<String, String> map = HashMap();
  map["account"] = "scc";
  map["password"] = "123456";
  map["password2"] = "123456";
  //scc -- 123456 -- 123456
  print("${map["account"]} -- ${map["password"]} -- ${map["password"]}");

  //初始化方法二
  var map2 = {"account":"dart","password":"111111","password2":"111111"};
  //dart -- 111111 -- 111111
  print("${map2["account"]} -- ${map2["password"]} -- ${map2["password"]}");
}

        2.6 runes(Unicode字符,了解即可)

        Unicode为世界上所有的书写系统中使用的每个字母,数字和符号定义了唯一的数值。 Dart 字符串是 UTF-16 位代码单元字符序列, 所以在字符串中表达 32位 Unicode 值需要 新的语法。Runes就是UTF-32字符集的string 对象。

        表达Unicode代码点的常用方法是\uXXXX,其中XXXX是4位十六进制值。要指定多于或少于4个十六进制数字,需要将值放在大括号中。        

        2.7 Symbols(操作符标识符,了解即可)

       一个 Symbol 对象表示 Dart 程序中声明的运算符或者标识符。 你也许永远都不需要使用 Symbol ,但要按名称引用标识符的 API 时, Symbol 就非常有用了。 因为代码压缩后会改变标识符的名称,但不会改变标识符的符号。 通过字面量 Symbol ,也就是标识符前面添加一个 # 号,来获取标识符的 Symbol 。

var i = #A; //常量
void main() {
  print(i); //Symbol("A")
  switch (i) {
    case #A:
      print("A"); //A
      break;
    case #B:
      print("B");
      break;
  }
  var b = new Symbol("b");
  print(#b == b); //true
}


猜你喜欢

转载自blog.csdn.net/g984160547/article/details/131243258