第二天 dart基础知识

// This is a comment.
单行注释。
内置类型:int   String List bool
42
数字字面量
print()
一种方便的显示输出方式。

'...'(或"...")
字符串文字。

$variableName(或)${expression}
字符串插值:包括字符串文字内部的变量或表达式的字符串。

main()
应用程序执行开始的特殊,必需的顶级函数
var
一种声明变量而不指定其类型的方法。

变量的声明方式

这是创建变量并初始化它的示例:
var name = 'Bob' ;
name推断变量的类型String,其后不能使用其他类型对name重新赋值,否则会报类型不匹配异常
如果想阻止推断类型,就是用关键字Object或dynamic类型
举例如下:

void main() {
  print('Hello, World!');
  var name = "li";
  name = 12;//报错
}

bin/untitled4.dart:6:10: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
  name = 12;
         ^

Process finished with exit code 254

我们更改为dynamic

void main() {
  print('Hello, World!');
  dynamic name = "li";
  name = 12;
  print(name);
}
运行结果:
Hello, World!
12

显示声明方式:

void main() {
  String name = "li";
  print(name);//li
}

那么请问,我能不能像使用js的时候直接写 name = "lishimin" 呢?
答案是否定的!

void main() {
  name = "李世民";//报错了,说name 是 undefined
}

变量未初始化的默认值是null

在dart中一切都是对象,所以对象的默认值就是null,即便是像java中的基本类型到了dart中默认值照样是null

void main() {
  String name;
  int a;
  dynamic b;
  print(name);
  print(a);
  print(b);
}
运行结果:
null
null
null

final 和 const

如果您从不打算更改变量,请使用final或const代替var或替代类型。最终变量只能设置一次; const变量是编译时常量。

我们类比java,先看下java中的final  const  static 有什么区别
final:
final修饰类:该类不可继承
final修饰方法:该方法不能被子类覆盖(但它不能修饰构造函数)
final修饰字段属性:属性值第一次初始化后不能被修改
使用final可以提高程序执行的效率,将一个方法设成final后编译器就可以把对那个方法的所有调用都置入“嵌入”调用里。

static:
static修饰成员函数则该函数不能使用this对象
static不能修饰构造函数、函数参数、局部成员变量
static修饰成员字段则当类被虚拟机加载时按照声明先后顺序对static成员字段进行初始化。
static修饰语句块:当类被虚拟机加载时按照声明先后顺序初始化static成员字段和static语句块
static所修饰的方法和字段只属于类,所有对象共享,java不能直接定义全局变量,是通过static来实现的。

java中没有const,不能直接定义常量,是通过static final组合来实现的。

可以知道const就是用来定义常量用的,final也是用来定义常量的,只不过功能比const多了点
注意: 实例变量可以是final但不是const。

1.final必须初始化

void main() {
  final String name;
  final int a;
  final dynamic b;
  print(name);
  print(a);
  print(b);
}
你以为输出三个null,对不起报错了
Error: The final variable ';' must be initialized.

2.final初始化一次后不能重新赋值

void main() {
  final String name = "雷洛探长";
  name = "颇好";
  final int a = 25;
  a = 23;
  final dynamic b = "五亿啊";
  b = 23;
  print(name);
  print(a);
  print(b);
}
bin/untitled4.dart:5:3: Error: Setter not found: 'name'.
  name = "颇好";
  ^^^^
bin/untitled4.dart:7:3: Error: Setter not found: 'a'.
  a = 23;
  ^
bin/untitled4.dart:9:3: Error: Setter not found: 'b'.
  b = 23;
  ^

看到没,被final修饰后没有了setter 方法了,所以不能重新赋值了
3.const

void main() {
  var foo = const [ ];
  var foo1 = const [1,2,3];
  print(foo1);//[1,2,3]
//foo1 是变量可以改变其指向,但它的指向到一个不可变内容的数组
  foo1 = const [5,6,7];
  print(foo1);

  //Cannot modify an unmodifiable list
//  foo1[0] = 2;
//  print(foo1);//报错
  //final修饰一经初始化不可再改变
  final bar = const [];
  //const 修饰baz不能指向新的数组,且数组内容不可以改变,等价于 const baz = const [];
  const baz = [];

}

内置类型

numbers
strings
booleans
lists (also known as arrays)
maps
runes (for expressing Unicode characters in a string)
symbols

Numbers
分两种类型:int double
int 在dartVM 中 的范围是-2的63次方 到 2的63次方减去1
如果dart被编译成js 那么使用js的Numbers 范围是-2的53次方 到 2的53次方减去1

void main() {
  int a = 1;
  int b = 0xDEADBEEF;//16进制整数
  print("a=${a}");
  print("b=${b}");
}

double 64位的浮点数,带有小数

void main() {
 
  double y = 1.1;
  double exponents = 1.42e5;
  print("y=${y}");//1.1
  print("exponents=${exponents}");//142000.0
}

numbers 与 strings 互相转换

void main() {
// String -> int
  var one = int.parse('1');
  print(one == 1);//true

// String -> double
  var onePointOne = double.parse('1.1');
  print(onePointOne == 1.1);//true

// int -> String
  String oneAsString = 1.toString();
  print(oneAsString == '1');//true

// double -> String
  String piAsString = 3.14159.toStringAsFixed(2);//转换为字符串保留两位小数,四舍五入
  print(piAsString == '3.14');//true

  // double -> String
  String piAsString2 = 3.14159.toStringAsFixed(3);//转换为字符串保留3位小数,四舍五入
  print(piAsString2 == '3.142');//true
}

整数有位运算符号:>> 右移 << 左移 & 按位与 | 按位或 || 按位异或
& 按位与 :都是1结果才是1,有一个是0,结果就是0
| 按位或:有一个是1 结果就是1,都是0,结果是0
|| 按位异或:相同为0,不同为1

assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 >> 1) == 1); // 0011 >> 1 == 0001
assert((3 | 4) == 7); // 0011 | 0100 == 0111

编译时常量计算

 const msPerSecond = 1000;
  const secondsUntilRetry = 5;
  const msUntilRetry = secondsUntilRetry * msPerSecond;
  print(msUntilRetry);//5000

Strings

UTF-16标准,可以使用单引号或者双引号,如果有引号嵌套,单引号嵌入双引号,或者双引号嵌入单引号都是可以的。



void main() {
  //单引号
  var s1 = 'Single quotes work well for string literals.';
  print(s1);
  //双引号
  var s2 = "Double quotes work just as well.";
  print(s2);
  //单引号包括单引号,需要转义
  var s3 = 'It\'s easy to escape the string delimiter.';
  print(s3);
  //双引号包括单引号
  var s4 = "It's even easier to use the other delimiter.";
  print(s4);
  //双引号包括双引号,需要转义
  var s5 = "Double quotes\" work just as well.";
  print(s5);
}

Single quotes work well for string literals.
Double quotes work just as well.
It's easy to escape the string delimiter.
It's even easier to use the other delimiter.
Double quotes" work just as well.

使用模式串 ${a}

void main() {
  var s = 'string interpolation';
  print("Dart has $s, which is very handy.");
  print("Dart has ${s}, which is very handy.");
  //下面解释了为啥要用${s}这种情况,$swhich 找不到这个变量
//  print("Dart has $swhich is very handy.");
  //使用${}完美区分
  print("Dart has ${s}which is very handy.");

  var S = s.toUpperCase();
  print(S);//STRING INTERPOLATION
  print(S.toString());//STRING INTERPOLATION
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容