标签:例子 export text 数值 通过 ora lan 语言 字符串连接
关键字 | - | - | - |
---|---|---|---|
if | superdo | switch | assert |
else | in | this | enum |
is | throw | true | break |
new | try | case | extends |
null | typedef | catch | var |
class | false | void | const |
final | rethrow | while | continue |
finally | return | with | for |
default |
关键字 | - | - | - |
---|---|---|---|
abstract | deferred | as | dynamic |
covariant | export | external | factory |
get | implements | import | library |
operator | part | set | static |
typedef |
关键字 | - | - | - |
---|---|---|---|
async | async* | await | sync* |
yield | yield* |
关键字 | - | - | - |
---|---|---|---|
deferred | as | assert | dynamic |
sync* | async | async* | in |
is | await | export | library |
external | typedef | factory | operator |
var | part | const | rethrow |
covariant | set | yield | get |
yield* |
创建变量并初始化变量实例:
//字符串赋值的时候,可以使用单引号,也可以使用双引号。 var str = "this is string vlaues."; //Dart可以自己去推断类型
变量存储引用。
dynamic name = "张三";
Object name1 = "小明"; dynamic name2 = "老王";
dynamic d_name; //不要进行类型检查了。即使出错了,是我自己的责任。 Object o_name; //v_name不是别人,就是Object的实例化。(一切皆是继承于Object的对象,所以Object类型可以接受任何类型的对象)
2. 显式声明将被推断的类型,比如String,int等。
String str1 = "dart str";
//我们先声明一个int类型的变量 int intDefaultValue; //assert 是语言内置的断言函数,仅在检查模式下有效 //在开发过程中,除非条件为真,否则会引发异常。(断言失败则程序立即终止) assert(intDefaultValue == null); //打印结果为null, 说明数字类型初始化值为null print(intDefaultValue);
//可以省略int类型的声明 final test = 111; //等同于上面 final int test = 111;
//被final修饰的变量的值无法被改变 final test1 = "test"; //这样写会提示‘test1‘, a final variable, can only be set once test1 = "test1";
//被const修饰的变量不能被重新赋值 const test2 = 20.02; //这样写会提示 Constant variables can‘t be assigned a value test2 = 23.33;
//因为var是用来修饰变量的,而final修饰的变量称之为常量(不能改变,只能赋值一次),所以不能这么混合使用吧(我是这么理解的) final var test3 = true; //这一句提示这个:The const variable ‘var‘ must be initialized //The name ‘var‘ is already defined. const var test4 = ‘test4‘;
class Test{ static const name = "test"; static main(){ //这里会报错:Undefined name ‘static‘ //static类型的变量是属于类的,所以在类里面,方法之外 static const name = "test"; } }
final speed = 200;//(km/h) final double distance = 2.5 * speed; // 距离 = 速度 * 时间 const speed1 = 200; const double distance1 = 2.5 * speed1;
//注意:[] 创建的是一个空的list集合 // const[] 创建一个空的、不可变的列表(EIL) var varList = const []; //varList 当前时一个EIL final finalList = const []; //finalList一直是EIL const constList = const []; //constList是一个编译时常量的EIL //可以更改非final、非const变量的值 //即使它曾经具有const值也可以改变 varList = [111, 222, 333]; // 不能更改final变量或const变量的值 // 这样写,编译器提示:a final variable, can only be set once // finalList = []; // 这样写,编译器提示:Constant variables can‘t be assigned a value // constList = [];
//这些是常量字符串 const aConstNum = 0; const aConstBool = true; const aConstString = ‘a const string‘; //这些不是常量字符串 var aNum = 0; var aBool = true; var aString = ‘a string‘; //编译通过 const validConstString = ‘$aConstNum $aConstBool $aConstString‘; var validString = ‘$aNum $aBool $aString‘; var invalidString = ‘$aNum $aBool $aConstString‘; //编译器报错 //报错:Const variables must be initialized with a constant value //const常量必须用const类型的值初始化 const invalidConstString = ‘$aConstNum $aConstBool $aNum‘;
//编译器通过 var a = 1; final f = 3; const d = 2; final b = a; const c = d; //编译器报错 //报错:Const variables must be initialized with a constant value const e = a; const g = f;
2. 第二个区别是它们初始化的时机不同:
final 是惰性初始化,即在运行时第一次使用前才初始化。而 const 是在编译时就确定值了。
Dart中支持以下特殊类型:
int表示整数,int的取值不大于64位,具体取决于平台。在Dart VM上,值可以从 -2的63次方 到 2的63次方减1.
整数是没有小数点的数字。示例如下:
int intNum1 = 10 ; print(intNum1); int intNum2 = 0xDEADBEEF ; print(intNum2);
64位(双精度)浮点数,如IEEE 754标准所规定。
如果一个数字包含一个小数,那么它就是一个double类型。示例如下:
double doubleNum1 = 1.1; print(doubleNum1); double doubleNum2 = 1.42e5; print(doubleNum2);
Dart里面的String是一系列 UTF-16代码单元。
String str1 = ‘单引号基本使用demo.‘; String str2 = "双引号基本使用demo.";
//单引号里面嵌套单引号,必须在前面加反斜杠 String str3 = ‘双引号里面有单引号it\‘s,必须在前面加反斜杠.‘; //双引号里面嵌套单引号(正常使用) String str4 = "双引号里面有单引号it‘s."; //单引号里面嵌套双引号(正常使用) String str5 = ‘单引号里面有双引号,编程开发初学必备语句"hello world"‘; //双引号里面嵌套双引号,必须在前面加反斜杠 String str6 = "双引号里面有双引号,编程开发初学必备语句\"hello world\"";
经测试发现,除了单引号嵌套单引号或者双引号嵌套双引号不允许出现空串之外,其余的几种情况都是可以运行的。
示例如下:
// 这个会报错 //String blankStr1 = ‘hello‘‘‘‘world‘; // 这两个运行正常 String blankStr2 = ‘hello‘‘ ‘‘world‘; //结果: hello world String blankStr3 = ‘hello‘‘_‘‘world‘; //结果: hello_world // 这个会报错 //String blankStr4 = "hello""""world"; // 这两个运行正常 String blankStr5 = "hello"" ""world"; //结果: hello world String blankStr6 = "hello""_""world"; //结果: hello_world //单引号里面有双引号,混合使用运行正常 String blankStr7 = ‘hello""""world‘; //结果: hello""""world String blankStr8 = ‘hello"" ""world‘; //结果: hello"" ""world String blankStr9 = ‘hello""_""world‘; //结果: hello""_""world //双引号里面有单引号,混合使用运行正常 String blankStr10 = "hello‘‘‘‘world"; //结果: hello‘‘‘‘world String blankStr11 = "hello‘‘ ‘‘world"; //结果: hello‘‘ ‘‘world String blankStr12 = "hello‘‘_‘‘world"; //结果: hello‘‘_‘‘world
//直接把相邻字符串写在一起,就可以连接字符串了。 String connectionStr1 = ‘字符串连接‘‘甚至可以在‘‘换行的时候进行。‘;
//用+把相邻字符串连接起来。 String connectionStr2 = ‘字符串连接‘ + ‘甚至可以在‘ + ‘换行的时候进行。‘;
//使用单引号或双引号的三引号: String connectionStr3 = ‘‘‘ 你可以创建 像这样的多行字符串。 ‘‘‘ ;
String connectionStr4 = """这也是一个
多行字符串。""";
声明raw字符串(前缀为r),在字符串前加字符“r”,或者在\前面再加一个\, 可以避免“\”的转义作用,在正则表达式里特别有用 举例如下: print(r"换行符:\n"); //这个结果是 换行符:\n print("换行符:\\n"); //这个结果是 换行符:\n print("换行符:\n"); //这个结果是 换行符:
String replaceStr1 = ‘字符串连接‘; print(‘$replaceStr1‘ + ‘甚至可以在换行的时候进行。‘ == ‘字符串连接‘ + ‘甚至可以在换行的时候进行。‘); String replaceStr2 = ‘Android Studio‘; print(‘你知道‘ + ‘${replaceStr2.toUpperCase()}‘ + ‘最新版本是多少吗?‘ == ‘你知道ANDROID STUDIO最新版本是多少吗?‘);
注:
==操作符测试两个对象是否相等。如果两个字符串包含相同的代码单元序列,那么它们是等效的。
相反,Dart使用的是显式的检查值,如下所示:
// 检查是否为空字符串 var fullName = ‘‘; assert(fullName.isEmpty); // 检查0 var hitPoints = 0; assert(hitPoints <= 0); // 检查是否为null var unicorn; assert(unicorn == null);
// 检查是否为NaN
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
assert 是语言内置的断言函数,仅在检查模式下有效
在开发过程中, 除非条件为真,否则会引发异常。(断言失败则程序立刻终止)。
//创建一个int类型的list List list = [10, 7, 23]; print(list);
List constantList = const[10,3,15];
以下是使用Map字面值创建map的例子:
var skills = { 1: ‘Java‘, 2: ‘Python‘, 3: ‘Dart‘ };
还可以使用Map的构造函数来得到相同的效果:
var skills = new Map(); skills[1] = ‘Java‘; skills[2] = ‘Python‘; skills[3] = ‘Dart‘;
也可以将新的键值对添加到现有的Map中:
skills[4] = ‘C#‘;
1、添加元素。格式 变量名[key] = value;
注意:key可以是不同类型。
//添加一个新的元素,key为 4 value为 华为 companys[4] = ‘华为‘; print(companys);//打印结果 {first: 阿里巴巴, second: 腾讯, fifth: 百度, 4: 华为}
2、修改元素
//把key为first的元素对应的value改成 alibaba companys[‘first‘] = ‘alibaba‘; print(companys);//打印结果 {first: alibaba, second: 腾讯, fifth: 百度, 4: 华为}
3、注意事项
// map里面的value可以相同 Map company1 = { ‘first‘: ‘阿里巴巴‘, ‘second‘: ‘腾讯‘, 5: ‘百度‘,‘new key‘: ‘阿里巴巴‘}; print(company1); //打印结果 {first: 阿里巴巴, second: 腾讯, 5: 百度, new key: 阿里巴巴} Map company2 = new Map(); company2[‘first‘] = ‘阿里巴巴‘; company2[‘second‘] = ‘腾讯‘; company2[‘fifth‘] = ‘百度‘; company2[‘new key‘] = ‘阿里巴巴‘; // map里面的value可以相同 company2[‘new key2‘] = ‘‘; // map里面value可以为空字符串 company2[‘new key3‘] = null; // map里面的value可以为null print(company2); //打印结果 {first: 阿里巴巴, second: 腾讯, fifth: 百度, new key: 阿里巴巴, new key2: , new key3: null}
4、要创建一个编译时常量const的map,请在map文字之前添加const:
final fruitConstantMap = const {2: ‘apple‘,10: ‘orange‘,18: ‘banana‘};
小结:
1.创建map有两种方式。 2.map的key类型不一致也不会报错。 3.添加元素的时候,会按照你添加元素的顺序逐个加入到map里面,哪怕你的key,比如分别是 1,2,4,看起来有间隔,事实上添加到map的时候是{1:value,2:value,4:value} 这种形式。 4.添加的元素的key如果是map里面某个key的英文,照样可以添加到map里面。 5.map里面的key不能相同。但是value可以相同,value可以为空字符串或者为null。
以下示例说明了符文,16位代码单元和32位代码点之间的关系。
var clapping = ‘\u{1f44f}‘; print(clapping); print(clapping.codeUnits); print(clapping.runes.toList()); //这里使用String.fromCharCodes方法显示字符图形 //String的详细api后面会具体讲解。 Runes input = new Runes( ‘\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}‘); print(new String.fromCharCodes(input));
有两个 #radix #bar 可以使用
官网文档没看明白这个具体是做什么的。。暂且放着。
这个用的很少,基本用不到的。
标签:例子 export text 数值 通过 ora lan 语言 字符串连接
原文地址:https://www.cnblogs.com/lxlx1798/p/11011498.html