Flutter常见数据类型及数据类型转换

男娘i 2022-01-10 16:55 1122阅读 0赞

简介

既然 Dart 是一门语言,那么就和我们所知道语言一样,有基本的数据类型以及常见的流程处理语法,那么我们就来了解下。

Dart 的所有东西都是对象,包括数字,函数等。它们都继承自 Object ,默认是都是 null(包括数字),所以数字,字符串都可以调用各种方法。

常亮与变量

变量

使用 var 声明变量,可赋予不同类型的值;未初始化时,默认值为 null ;使用 final 声明一个只能赋值一次的变量

  1. void main(){
  2. // 声明一个变量 a
  3. var a;
  4. print(a); // 打印 a 的值,显示为 null
  5. a = 10;
  6. print(a); // 打印出来的结果为 10
  7. a = "测试字符串";
  8. print(a); // 打印出来的结果为 测试字符串
  9. a = 30;
  10. print(a); // 打印出来的结果为 30
  11. final b = 10;
  12. b = 20; // 这个会报错,有提示: [dart] 'b', a final variable, can only be set once.
  13. }

  

常量

在 dart 中使用 const 声明常量;使用 const 声明的必须是编译期常量。

  1. void main(){
  2. const a = 10;
  3. a = 20; // 这里也会报错:[dart] Constant variables can't be assigned a value.
  4. }

  

在上面我们可以看到 dart 的一些简单的语法。其实和 js 蛮像,声明的变量的数据类型是随便去改变的,没有一个固定的数据类型(例如:java 这种语言)。其次就是 final 和 const 都可以声明变量,并且声明了变量之后都不能修改。

这里简单的说下 final 与 const 的区别:

final 要求变量只能初始化一次,并不要求赋的值一定是编译时常量,可以是常量也可以不是。而 const 要求在声明时初始化,并且赋值必需为编译时常量。

Dart中的内置类型

在Dart 有几种内置的数据类型:数值型-Number、布尔型-boolean、键值对-Map、字符串-String、列表-List、其他类型-Runes、Symbols

数值型

Dart 中只提供了两种类型:

num
1、整形int
2、浮点型double

  1. void main(){
  2. num a = 10; // 整形
  3. a = 20.1; // 浮点型
  4. int i = 10;
  5. i = 10.1; // 这个地方会报错,因为将 int 型的数据改为 double 型
  6. double d = 20.1;
  7. d = 20; // 这个地方会报错,因为将 double 型的数据改为 int 型
  8. }

  

从上面可以看到如果是使用 num 声明的变量,可以随意的转换类型,但是如果是使用了int 或者 double 明确的声明,那么就不能转换了

数值型的操作

运算符: +、 - 、* 、/ 、 ~/ 、 %

常用属性: isNaN、isEven、isOdd

常用方法:abs()、round()、floorl()、ceil()、toInt()、toDouble()

  1. // 由于常用的方法在其他语言中都有,就不过去的赘述,下面列出一些特殊的
  2. void main(){
  3. int i = 10;
  4. double d = 20.1;
  5. print(i/d); // 0.49751243781094523
  6. print(i~/d); // 0 这个操作是取整
  7. print( i.isOdd ); // 判断是奇数
  8. print( i.isEven ); // 判断是偶数
  9. }

一些常见的转换

  1. // String -> int
  2. var one = int.parse('1');
  3. assert(one == 1);
  4. // String -> double
  5. var onePointOne = double.parse('1.1');
  6. assert(onePointOne == 1.1);
  7. // int -> String
  8. String oneAsString = 1.toString();
  9. assert(oneAsString == '1');
  10. // double -> String
  11. String piAsString = 3.14159.toStringAsFixed(2);
  12. assert(piAsString == '3.14');

字符串

在 dart 中居然可以使用 单引号 和 双引号声明字符串。这两种方式都可以。

  1. void main(){
  2. String string = '单引号声明字符串';
  3. String string1 = "双引号声明字符串";
  4. }

在 String 中单、双引号互相嵌套的情况

  1. void main(){
  2. String str = '单引号中的"双引号"';
  3. String str1 = "双引号中的'单引号'";
  4. print(str);
  5. print(str1);
  6. String str2 = '单引号中的 \'单引号\' ';
  7. String str3 = "双引号中的 \"双引号\" ";
  8. print(str2);
  9. print(str3);
  10. }

字符串拼接的方式

下面列出 dart 中拼接字符串的各种骚操作(黑魔法)。

  1. void main(){
  2. // 使用的是空格拼接,多个空格也可以
  3. String str1 = '单引号空格字符串' '拼接' '~'; // 单引号字符串空格拼接~
  4. // 使用换行符以及空格
  5. String str2 = '单引号符串'
  6. '换行了' '再加空格' '拼接'; // 单引号符串换行了再加空格拼接
  7. // 单双引号 空格拼接
  8. String str3 = "单双引号空格字符串" '拼接' "~"; // 单双引号字符串空格拼接~
  9. // 单双引号 换行符以及空格
  10. String str4 = "单双引号符串"
  11. '换行了' '再加空格' '拼接'; // 单双引号符串换行了再加空格拼接
  12. String str5 = '''
  13. 使用3个单引号、
  14. 看到我使用了么
  15. ''';
  16. String str6 = """
  17. 使用3个双引号、
  18. 看到我使用了么
  19. """;
  20. String str7 = "算了,还是正常一点" + ",使用 + 来拼接";
  21. }

从上面可以看到 dart 中可以使用空格来做为拼接。所以我们继续研究下。

  1. void main(){
  2. // 拼接字符串, 输出:单引号空格 或者 双引号空格
  3. String blockStr = '单引号''空格';
  4. String blockStr1 = '单引号' '空格';
  5. String blockStr2 = "双引号""空格";
  6. String blockStr3 = "双引号" "空格";
  7. // 下面这两种情况会报错
  8. // String blockStr4 = '单引号''''空格';
  9. // String blockStr5 = "双引号""""空格";
  10. // 测试中间添加字符
  11. String blockStr6 = '单引号''_''空格'; // 输出:单引号_空格
  12. String blockStr7 = "双引号""#""空格"; // 注意不能使用 $,$会报错, 输出:单引号#空格
  13. // 单双引号混合使用
  14. String blockStr8 = '单""""引号'; // 输出:单""""引号
  15. String blockStr9 = '单""_""引号'; // 输出:单""_""引号
  16. // 单双引号混合使用
  17. String blockStr10 = "双''''引号"; // 输出:双''''引号
  18. String blockStr11 = "双''_''引号"; // 输出:双''_''引号
  19. }

${表达式}的使用

类似于JS中 ES6 上面的表达式的使用,感觉是相通的。

  1. void main(){
  2. var flag = false;
  3. var str = "测试字符串";
  4. print("我们来验证字符串:${str}" "然后看看我们的 flag:${flag}");
  5. // 最后输出的结果为:我们来验证字符串:测试字符串然后看看我们的 flag:false
  6. }

布尔值

assert 是语言内置的断言函数,仅在检查模式下有效
在开发过程中, 除非条件为真,否则会引发异常。(断言失败则程序立刻终止)。

  1. // 检查是否为空
  2. var fullName = '';
  3. assert(fullName.isEmpty);
  4. // 为0检查
  5. var hitPoints = 0;
  6. assert(hitPoints <= 0);
  7. // 检查是否为 null.
  8. var unicorn;
  9. assert(unicorn == null);
  10. // 检查是否为 NaN.
  11. var iMeantToDoThis = 0 / 0;
  12. assert(iMeantToDoThis.isNaN);

List列表

实例化 List 的方法如下

  1. void main(){
  2. // 使用构造创建
  3. var list = new List();
  4. //创建一个int类型的list
  5. List intlist = [1, 2, 3];
  6. // 创建一个常量List, 不可以改变的List
  7. List constList = const[10, 7, 23];
  8. }

dart 中数组常用的方法

  1. void main(){
  2. // 在数组中可以存放多个不同类型的对象
  3. var list = [1, 2, 3, 'Flutter', true];
  4. print(list); // 输出的结果:[1, 2, 3, Flutter, true]
  5. // 修改数组下标为2 的值
  6. list[2] = 'Dart';
  7. print(list); // 输出的结果:[1, 2, Dart, Flutter, true]
  8. // 获取数组的长度
  9. print(list.length); // 输出的结果:5
  10. // 向数组中添加元素
  11. list.add("value");
  12. print(list); // 输出的结果:[1, 2, Dart, Flutter, true, value]
  13. // 向数组中的指定位置添加元素
  14. list.insert(1, 'element');
  15. print(list); // 输出的结果:[1, element, 2, Dart, Flutter, true, value]
  16. // 移除数组中的元素
  17. list.remove("value");
  18. print(list); // 输出的结果:[1, element, 2, Dart, Flutter, true]
  19. // 移除数组中指定的元素
  20. list.removeAt(1);
  21. print(list); // 输出的结果:[1, 2, Dart, Flutter, true]
  22. // 判断数组中是否有某个元素
  23. print(list.indexOf("element")); // 输出结果:-1
  24. // 可以使用 sort() 函数来排序, 但是由于我们使用定义的数组类型不一样,就不能使用
  25. var intlist = [1, 2, 5, 6 ,3];
  26. // 根据语法提示: List.sort([(int, int) → int compare]) → void
  27. intlist.sort( (a, b) => a.compareTo(b) );
  28. print(intlist); // 输出结果:[1, 2, 3, 5, 6]
  29. }

map 集合

创建 Map 集合

  1. void main(){
  2. // 创建Map
  3. var language = {'fisrt': 'dart', 'second': 'java'};
  4. // 创建不可变的 Map
  5. var constLanguage = const {'fisrt': 'dart', 'second': 'java'};
  6. // 通过构造器创建
  7. var initLanguage = new Map();
  8. }

Map 中常用的方法

  1. void main(){
  2. // 创建Map
  3. var map = {'fisrt': 'dart', 'second': 'java'};
  4. // 获取长度
  5. print(map.length); // 输出结果:2
  6. // 判断是否为空
  7. print(map.isEmpty); // 输出结果:false
  8. print(map.isNotEmpty); // 输出结果:true
  9. // 获取到所有的 key
  10. print(map.keys); // 输出结果:(fisrt, second)
  11. // 获取到所有的 values
  12. print(map.values); // 输出结果:(dart, java)
  13. // 判断是否包含某个key
  14. print(map.containsKey("key")); // 输出结果:false
  15. // 判断是否包含某个value
  16. print(map.containsValue("key")); // 输出结果:false
  17. // 添加一个新的元素进去
  18. map['third'] = 'key';
  19. print(map); // 输出结果:{fisrt: dart, second: java, third: key}
  20. // 循环打印 代码提示:Map.forEach((String, String) → void f) → void
  21. map.forEach( (key, value) => getMap(key, value) );
  22. }
  23. void getMap(key, value){
  24. print("key:${key}, value:${value}");
  25. }

  

dynamic 关键字

这个关键字就类似定义我们在 JS 中定义变量的情况。先看下面的代码

  1. void main(){
  2. // a 的数据类型可以随意改变,这种类型就是 dynamic
  3. var a ;
  4. a = 10;
  5. a = "dart";
  6. // 这里我们使用 dynamic 声明
  7. dynamic d = 10;
  8. d = 'dart';
  9. }

  

原文地址:https://blog.csdn.net/qq_18948359/article/details/82749659

转载于:https://www.cnblogs.com/gxsyj/p/10973657.html

发表评论

表情:
评论列表 (有 0 条评论,1122人围观)

还没有评论,来说两句吧...

相关阅读