Dart入门01 -- 变量,常量,数据类型,类型转换

Dart简介

  • Dart 是面向对象的、类定义的、单继承的语言,它的语法类似 C 语言,可以转译为 JavaScript,支持接口 (interfaces)、混入 (mixins)、抽象类 (abstract classes)、具体化泛型 (reified generics)、可选类型 (optional typing) 和 sound type system;

VSCode环境搭建

  • 在学习Dart语法时,本人使用的是VSCode编辑器,下载官方网址为:https://code.visualstudio.com/
  • 其次安装Flutter,Dart,Code Runner三个插件,如下所示:
image.png
  • 然后在桌面上创建一个文件夹01_Dart基本语法,用VSCode打开,再创建dart文件,就可以进行Dart语法演练了;

main函数

  • Dart语言的入口是main函数,并且必须显示的进行定义;
  • Dart的入口函数main是没有返回值的;
  • 传递给main函数的命令行参数,是通过List<String>完成的;
  • 代码展示如下:
image.png

变量

  • 在Dart语言中,所有的变量都可视为一个对象,所有的对象都看作一个类的实例,数字函数null也是对象,所有的对象都派生自Object类
变量的定义与初始化
  • 关键字vardynamic都可以定义变量,两者最大的区别在于var定义的变量,在初始化后类型确定不可更改,dynamic定义的变量,类型随值类型的变化而变化;
  • 通过var关键字定义变量,表明变量的值是可以发生改变的;
  • 定义变量之后,未进行初始化,系统默认赋值为null
void main(List<String> args) {
  var num;
  if (num == null) {
    print("num is null"); //执行 num = null
  } else {
    print("num = ${num}");
  }

  int a;
  if (a == null) {
    print("a is null"); //执行 a = null
  } else {
    print("num = ${num}");
  }
}
  • 整型变量a,定义之后未进行初始化,默认赋值为null,表明a也是一个对象;
  • 使用var关键字定义变量,变量在进行初始化之后,变量的类型也就确定了,表明Dart语言支持类型推断
void main(List<String> args) {
  var a = 100;
  a = "yanzi";
}
  • 上述代码出现报错,Error: A value of type 'String' can't be assigned to a variable of type 'int',原因在于变量a,在进行初始化时,系统经类型推断确认为int类型,是不能赋值字符串数据的;
  • 通过dynamic关键字定义变量,dynamic类型的变量,在使用中可以随时改变其类型,系统会根据该变量的当前值类型确定其当前时刻的类型
void main(List<String> args) {
  dynamic a = 100;
  a = "yanzi";
}
  • 上述代码不会报错,也就是说dynamic修饰的变量,可以随时更改变量的数据类型;

常量

  • 关键字constfinal,都可定义常量,其值不可发生更改,且定义与初始化同时进行,否则会报错;
  • const定义的常量,在编译时就已经初始化,且不可改变;
  • final定义的常量,在运行时进行初始化,且不可改变;
void main(List<String> args) {
  const a1 = "yanzi";
  const int a2 = 100;
  print(a1);
  print(a2);

  final name1 = "yanzi";
  final String name2 = "sss";
  print(name1);
  print(name2);
}

数据类型

  • 在Dart语言中,支持的数据类型有8种,依次是num数值类型String字符串类型bool布尔型List数组类型Map字典类型Set集合类型Runes类型Symbols类型
num数值类型
  • num数值类型有两种分别为intdouble,均继承自num类;
void main(List<String> args) {
  int a = 100;
  double b = 120.2;

  print("a = ${a}");
  print("b = ${b}");

  double c = 200; //自动将int转成double
  print("c = ${c}");
}
  • double c = 200,会自动将int转成double类型;
String字符串类型
  • 在Dart中,可使用双引号,也可以使用单引号创建字符串;
  • 可以用${字符串变量名},引用字符串;
void main(List<String> args) {
  String name1 = "yanzi";
  String name2 = 'SF';
  var name3 = "ssss";

  print("name1 = ${name1}");
  print("name2 = ${name1}");
  print("name3 = ${name1}"); //name3 = yanzi
}
字符串的常用方法
  • 获取字符串长度
void main(List<String> args) {
  String name1 = "yanzi";

  print(name1.length); //5
}
  • 判断字符串是否为空
void main(List<String> args) {
  String name1 = "yanzi";

  print(name1.isEmpty); //false
}
  • 判断字符串是否不为空
void main(List<String> args) {
  String name1 = "yanzi";

  print(name1.isNotEmpty); //true
}
  • 字符串拼接
    • 使用加号+,进行字符串拼接;
    • 使用${字符串变量名},进行字符串内嵌,实现字符串拼接效果;
void main(List<String> args) {
  String name1 = "yanzi";
  String name2 = " ssss";
  String name3 = name1 + name2;

  String name4 = "asd" + "123";

  print("name3 = " + name3); //name3 = yanzi ssss
  print("name3 = ${name3}"); //name3 = yanzi ssss
  print("name4 = " + name4); //name4 = asd123
}
  • 字符串截取
void main(List<String> args) {
  String name1 = "aaabbb";
  //截取指定区间的字符串
  print(name1.substring(0, 2)); //aa

  //截取指定index至末尾
  print(name1.substring(3)); //bbb

  //利用 指定字符 切割 获取数组 
  String str = "a,b,c,d,e";
  List<String> strs = str.split(",");
  print(strs); //[a, b, c, d, e]
}
  • 字符串转化大小写
void main(List<String> args) {
  String name1 = "aaabbb";
  String name2 = "AddSSS";

  //转成大写
  print(name1.toUpperCase()); //AAABBB

  //转成小写
  print(name2.toLowerCase()); //addsss
}
  • 字符串去除空格
void main(List<String> args) {
  String name1 = " aaabbb ";

  //去除左右两边空格
  print(name1.trim()); //

  //去除左边空格
  print(name1.trimLeft()); 

  //去除右边空格
  print(name1.trimRight()); 
}
bool布尔型
  • 使用关键字bool定义布尔型变量,属于bool类型;
void main(List<String> args) {
  bool isTop = false;
  bool isRich = true;

  if (isTop) {
    print("高");
  }

  if (isRich == true) {
    print("帅");
  }
}
List数组类型
  • 使用List类,表示数组,存储数据元素;
void main(List<String> args) {
  //int整型数组
  var arr1 = List<int>();
  arr1.add(10);
  arr1.add(20);
  arr1.add(30);
  arr1.add(100);
  arr1.add(200);

  print(arr1); //[]
}
Map字典类型
  • 使用Map类,表示字典,存储键值对数据;
void main(List<String> args) {
  var dic1 = {"name": "yanzi", "age": 16};
  var dic2 = new Map();
  dic2["name"] = "yanzi";
  dic2["age"] = 30;

  Map<String, String> dic3 = new Map();
  dic3["name"] = "yanzi";
  dic3["age"] = "15";

  Map dic4 = new Map<String, String>();
  dic4["name"] = "liyanyan";
  dic4["age"] = "33";

  Map dic5 = <String, String>{"name": "yanzi", "age": "23"};
}
Set集合类型
  • Set是一系列无序项的集合;
void main(List<String> args) {
  //定义初始化
  Set<String> names1 = {};
  var name2 = <String>{};

  //添加元素
  name2.add("yanzi");
  name2.add("sss");
  name2.add("aaa");

  print(name2); //{yanzi, sss, aaa}
}
Runes类型
  • Dart的rune类型主要是unicode编码之类的;
Symbols类型
  • Dart的Symbol表示程序中出现的操作符或标识符;

类型转换

  • 字符串转int,double 数值,调用num类型的parse方法
void main(List<String> args) {
  String str1 = "12345";
  print(int.parse(str1)); //12345

  String str2 = "123.56";
  print(double.parse(str2)); //123.56
}
  • int,double数值转字符串,调用num类型的toString方法
void main(List<String> args) {
  int num1 = 100;
  print(num1.toString()); //100

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

推荐阅读更多精彩内容