首页 > 其他分享 >Flutter/Dart第08天:Dart类型(内置类型、记录、集合、泛型和类型别名)

Flutter/Dart第08天:Dart类型(内置类型、记录、集合、泛型和类型别名)

时间:2023-10-03 22:00:32浏览次数:49  
标签:记录 int var 泛型 字符串 类型 Dart

Dart内置类型(共10类)

Dart官网文档:https://dart.dev/language/built-in-types

Dart内置类型即Dart SDK自带的类型,我们编程过程中可直接使用的类型,主要分为10类:

  1. 数值类型:包括int类、double类等。
  2. 字符串类型:即String类。
  3. 布尔类型:即bool类。
  4. 记录类型:即Record类,Dart 3中开始支持(最新版本的Java 21也支持)。
  5. 列表类型:即List类,同时也是数组。
  6. Set类型:即Set类。
  7. 映射类型:即Map类。
  8. 字符类型:与字符相关处理。
  9. 符合类型:即Symbol类。
  10. 特殊值:null空值。

Dart中类型的其他一些规则:

  1. Object类是Dart中除Null之外的所有类的基类。扩展问题:Dart中顶层类是什么呢?
  2. Enum类是Dart中所有枚举类的基类。扩展问题:Enum类是Object的子类吗?答案:是。
  3. dynamic类型Dart的静态检测会失效,容易引发空安全等其他运行时错误,建议使用Object或者Object?代替。
  4. FutureStream支持异步编程。
  5. Never一般用于总是抛出异常的函数,表明表达式用于无法成功执行。
  6. void表明值不会被再次使用,一般用户函数返回值。

数字类型(int和double)

Dart中数字类型类结构如下:

image

intdouble都是num类的子类。int不超过64位的整数,double为64位双精度浮点数。

num类型支持操作:加+,减-,乘*,除/abs()绝对值,ceil()向上取整,floor()向下取整操作。特别注意:操作,如>>右移或者<<左移等位操作,仅int类型支持。

代码样例:如下代码,数字类型定义。

// int类型
var x = 1;
var hex = 0xDEADBEEF;

// double类型
var y = 1.1;
var exponents = 1.42e5;
double z = 1; // 等同于:double z = 1.0;

// num类型:既可以是整数,又可以是浮点数
num x = 1;
x += 2.5;

代码样例:如下代码,数字类型和字符串相互转换。

// String -> int
var one = int.parse('1');
assert(one == 1);

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

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

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');

代码样例:如下代码,int类型操作。

assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 | 4) == 7); // 0011 | 0100 == 0111
assert((3 & 4) == 0); // 0011 & 0100 == 0000

代码样例:如下代码,字面量数字属于编译时常量,因此字面量数字表达式也可以作为常量。

const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond;

字符串类型(String)

Dart中字符串是一个UTF-16的序列码,我们可以通过'单引号或者"双引号定义一个字符串、通过${}进行字符串插值、通过相邻字符串连接、使用+符号进行连接,通过3个单引号'''或者3个双引号"""定义多行字符串,还可以通过增加前缀r定义原始字符串。

代码样例:如下代码,字符串的各种定义方式。

// 引号:单引号或双引号
var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
var s3 = 'It\'s easy to escape the string delimiter.';
var s4 = "It's even easier to use the other delimiter.";

// 插值
final name = 'Tom';
var s5 = 'My name is $name.';
assert(s5 == 'My name is Tome.');

// 相邻字符串
var s6 = 'String '
    'concatenation'
    " works even over line breaks.";
assert(s6 ==
    'String concatenation works even over '
        'line breaks.');

var s7 = 'The + operator ' + 'works, as well.';
assert(s7 == 'The + operator works, as well.');

// 多行字符串:3个单引号或3个双引号
var s8 = '''
My name is Tom.
I am a boy.
''';

var s9 = """
My name is Tom.
I am a boy.
""";

// 原始字符串
var s10 = r'My name is Tome.\nI am a boy.';

特别注意:==双等于号操作符在Dart中用于检测2个对象是否相等,如果是字符串,则是校验它们的序列码是否相同(这与Java有很多的区别)。

代码样例:如下代码,字面量字符串是编译时常量,如果字符串插值表达式中的变量是常量,那么插值字符串也是常量。

// 字面量字符串
const aConstString = 'a constant string';

// 插值字符串常量
const aConstNum = 0;
const aConstBool = true;
const validConstString = '$aConstNum $aConstBool $aConstString';

布尔类型(bool)

Dart中只有2个对象是bool类型:truefalse,且他们都是常量。

代码样例:如下代码,在表达式中的布尔类型。

// Check for an empty string.
var fullName = '';
assert(fullName.isEmpty);

// Check for zero.
var hitPoints = 0;
assert(hitPoints <= 0);

// Check for null.
var unicorn = null;
assert(unicorn == null);

// Check for NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

字符和符号(characters)

Dart中字符代表字符串中一个Unicode编码单元。Unicode为世界上的每个字母、数字和符合定义了一个唯一数字值。

由于Dart的字符串是UTF-16编码,因此Dart中表示Unicode有其对应的语法格式,常用的方式为\uXXXX代表一个字符,其中XXXX4位16进制的值。

举例说明:心形字符♥的值为\u2665,如果少于或者超过4位16禁止值,则用{}包裹起来,如笑脸字符

标签:记录,int,var,泛型,字符串,类型,Dart
From: https://www.cnblogs.com/obullxl/p/NTopic2023100301.html

相关文章

  • 踩过的坑size_t类型下标遍历问题
    踩过的坑size_t类型下标逆序遍历通过下标逆序遍历以下代码是没有问题的strings;cin>>s;for(inti=s.length()-1;i>=0;--i)cout<<s[i];但是如果用无符号类型作为循环变量的类型会出现死循环的问题,因为i>=0永远是成立的strings;cin>>s;......
  • ypeScript入门到精通——TypeScript类型系统基础——枚举类型
    TypeScript类型系统基础——枚举类型 枚举类型由零个或多个枚举成员构成,每个枚举成员都是一个命名的常量。 在TypeScript中,枚举类型是一种原始类型,它通过enum关键字来定义。例如,我们可以使用枚举类型来表示一年四季,示例如下:enumSeason{Spring,Summer,......
  • python基本数据类型之布尔类型
    所有数据都自己的布尔值零值:所有数据都有且仅有一个值的bool值为FLASE,该值为此类型的零值。整型和浮点型数据除了0,布尔值为FLASE,其它全是TRUE。(0为整型和浮点型的零值)字符串、列表、字典除了容器中为空,其布尔值为FLASE,其它全为TRUE。("",[],{}分别为字符串、列表、字典的零值)p......
  • 【精品】Springboot 接收发送日期类型的数据
    问题无法请求到后台,后台报错:[Failedtoconvertpropertyvalueoftype'java.lang.String'torequiredtype'java.time.LocalDateTime'forproperty:2023-10-02T09:26:16.069+08:00WARN14296---[p-nio-80-exec-1].w.s.m.s.DefaultHandlerExceptionRes......
  • Go语言中泛型的一个用法
    typeOperationWithData[Tany]func()(T,error)typeOperationfunc()errorfunc(oOperation)withEmptyData()OperationWithData[struct{}]{ returnfunc()(struct{},error){ returnstruct{}{},o() }}这段Go代码定义了两种类型:Operation和OperationWit......
  • delphi泛型模板编程
    delphi泛型模板编程泛型模板编程的关键:泛型作用体现在模板,体现在虚实之间相互转换,以虚概实,以实就虚。unitTxInfo;interfaceusesSystem.Types,System.Classes,System.SysUtils,Generics.Collections;typeTPeople=recordName:string;Age:str......
  • TypeScript入门到精通——类型系统基础——类型检查
    TypeScript类型系统基础——类型检查  类型检查是检查程序中类型约束是否正确的过程。类型检查既可以在程序编译时进行,即静态类型检查;也可以在程序运行时进行,即动态类型检查。TypeScript支持静态类型检查,JavaScript支持动态类型检查。 为了满足不同用户的需求,TypeScript......
  • set类型与命令
    转自:https://www.modb.pro/db/717261.常用命令单个set操作:>saddidbsetidb#添加1至多个元素(integer)3>scardidbset#返回set大小(integer)3>smembersidbset#返回set所有元素,是无序的1)"d"2)"i"3)"b">sismemberidbseti......
  • 3-13 字符串类型 字符串类型:str 1.定义格式: 变量 = '内容'
    3-13字符串类型字符串类型:str   1.定义格式:       变量='内容'           打印一行       变量="内容"           打印一行       变量='''内容'''或者三引号           可以通过回车的方式换行,......
  • springMVC类型转换器
    Spring引入通用的数据类型转换系统,其定义了sPI接口和相应的运行时热行类型转换的API,提供无状态,强类型可以在任意类型之间进行类型转换,可以用于任向需要的地方(如SpEL、数据绑定等) 1.配置自定义类型转换服务 2.日期类型转换器 ......