Flutter学习(二:变量、内置类型、操作符)

一:变量

Flutter中没有基本数据类型,全部为Object类型,所以未初始化的变量值为null。

Object

Object是所有类的基类,Object声明的变量可以是任意类型。int、String、bool等等都是Object类型。

Object obj = "变量";
Object i = 1;
i = true;
i = "sss";

var

var关键字:在声明变量赋值时决定它的类型
(官方建议用var,但是缺点不能一眼看出是什么类型,具体使用看个人习惯)

var j = "文案";//此时j变量已经声明赋值为String了
j = 10;//❌后续不能修改类型

var s;//只声明变量,没有赋值,所以默认类型变成了"null",也就是object类型。
s = "aaa";//所以后续可以赋值int和string
s = 10;

dynamic

dynamic关键字:动态类型,在运行时才确定类型,效率较低。

dynamic d = "dynamic";
d = 10;

final和const

final:运行时常量
//final使用等同于Java中的final,可以不设置类型
final int fi1 = 1;
fi1 = 2;//❌常量不能再次赋值
final fi2 = 1;
const:编译器常量
//const使用,可以不设置类型
const int ci1 = 1;
ci1s = 2;//❌常量不能再次赋值
const ci2 = 1;
final和const的区别
  1. final是运行时常量,效率较低。const是编译期常量,效率略高。
  2. 全局变量可以使用final修饰,但是不能使用const。如果const修饰全局变量,需要定义为static const静态常量。
  3. const不能被final修饰的常量赋值,因为const在编译期赋值,final在运行期赋值,const在前。
/**
 * const不能被final修饰的常量赋值,因为const在编译期赋值,final在运行期赋值,
 * const在前。
 * 感觉像是这样:
 * final String demo = "测试";
 * static final String demo1 = demo;//❌静态调用非静态
 */
const ci3 = fi1;//❌报错const在前,final在后
//const赋值const,同一时期,可以赋值
const ci4 = ci1;
//final赋值const,const在前,final在后,可以赋值
final fi3 = ci4;

二:内置类型

num类型

num是数字类型的父类,有两个子类int和double。
Dart中int类型可以当做java中的short、int、long使用,如果我们赋值的变量长度超过4个字节,dart就会编译成类似于long,否则就是类似short或者int。double也是如此。

String类型

使用单引号或者双引号来创建字符串,单引号和双引号可以嵌套使用,否则需要使用\进行转义。字符串中也可以引用变量与表达式。

/**
 * Dart字符串 支持单引号,双引号嵌套使用
 */
String str = "\"双引号声明字符串,\"";//需要转义
String s = '"单引号声明字符串"';//嵌套使用时,打印""无需转义
String s1 = "'单引号声明字符串'";//嵌套使用时,打''无需转义
/**
 * 字符串拼接
 * Dart中支持使用+拼接字符串。
 * 也可以使用$进行变量拼接
 * 字符串中也可以引用变量与表达式。
 */
int num = 8;
//String all = String.format("%s%d", "", 1);//Java中字符串拼接形式
String all1 = "${str.substring(0, 1)}我还能撸${num}次";//Dart中
String all2 = str + all1;
/**
 * 多行字符串
 * Dart中使用三单引号或三双引号支持多行字符串
 */
String s2 = """三引号支持多行字符串
  			换行了6666
  			我又换行了""";
/**
 * 字符串换行
 * 字符串想显示\n,有两种方式:
 * 第一种:\转义
 * 第二种:r前缀
 */ 
String r = "\\n使用转义方式输出\\n换行符";
String r1 = r"\n使用前缀r方式输出\n换行符";

布尔类型

Dart中布尔类型为bool,可以赋值为true或false(也可以赋值为null)。要注意的是Dart中全部都是Object类型的,所以bool类型如果不赋值,默认值为null。

bool b = true;
bool b = false;
bool b = null;

List

创建、增删改查、遍历
/**
 * List数组
 * 创建List数组的方式
 */
List<String> list = new List();
var list1 = List();//可以不写new关键字,看个人习惯
List<String> list2 = ["a", "b", "c", "d"];
//查:类似数组通过下表查询 元素
String vlaue = list2[0];
//删
list2.removeAt(0);
//改
list2[0] = "修改";
//增加
list2.add("增加");
//遍历
//iter模板
for (var i in list2) {}
//itar模板
for (var j = 0; j < list2.length; ++j) {}
const修饰List
/**
 * const修饰list对象,表示list对象不可变
 * const 修饰["a","b","c"]后,后续不可增删改查。
 * 但是可以修改引用指向。
 */
List<String> list3 = const["a", "b", "c"];
//list3.add("d");//❌ 运行时报错
list3 = ["A1", "A2", "ASD"];//可以修改引用指向。

/**
 * const修饰引用,既不能修改引用,也不能修改值
 */
const List<String> list4 = ["a", "b", "c"];
//list4 = ["a", "b", "c"];//❌ 编译时报错
//list4.add("d");//❌ 运行时报错

Map集合

创建、增删改查、遍历
/**
 * map集合
 * 创建map集合的方式
 */
Map<String, String> map = new Map();
var map1 = Map();//可以不写new关键字,看个人习惯
Map<String, String> map2 = {"k1":"v1", "k2":"v2", "k3":"v3"};
//增
map2["k4"] = "v4";
//删除
map2.remove("k2");
//改
map2["k3"] = "修改value";
//查
map2["k1"];
print(map2["k99"]);//查询一个不存在的key,返回null

//迭代器遍历
var keys = map2.keys;//迭代器
for (var value in keys) {
  print(value);//key
}
const修饰Map

const声明Map,同上List例子

Runes

用于在字符串中表示Unicode字符

Symbols

操作符标识符,可以看作C中的宏。表示编译时的一个常量

var sym = #F;
  switch(sym) {
    case #SD:
      break;
    case #F:
      break;
  }

三:操作符

as 类型转换操作符

Dart中不支持强转类型,可以使用as操作符进行类型转换。

String s = "str";
int i = (int)s;//❌ Dart中不支持强转
//类型转换
int i1 = s as int;

is、is! 类型判断操作符

Dart中不支持 instanceof来进行类型判断,可以is、 is!进行类型判断。

//Dart中不支持 instanceof
//判断属于String类型
if(i1 is String) {
}
//判断不属于String类型
if(i1 is! String) {
}

??= 赋值操作符

判断是否为null,为空则赋值。

/**
 * ??=: 赋值操作符
 */
Object demo;
if(demo == null) {
  demo = 234;
}
//此写法意思同上
demo ??= 234;

?? 条件表达式

/**
 * ?? :条件表达式
 * 前一个不为空,执行第一个.反之则执行后一个.
 *
 * 伪代码:
 * demo !=null ? demo : "";
 */
  var v = demo??"after";

… 级联操作符

/**
 * .. :级联操作符, 简化构建者模式
 */
new Builder()
  ..url()
  ..placeHolder()
  ..build();
  
class Builder {
  void url() {
  }
  void placeHolder() {
  }
  void build() {
  }
}

?. 安全操作符

/**
 * ?. :安全操作符
 */
String str;
//如果str为null,则返回null,不会报错
print(str?.length);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值