Flutter Dart 变量和内置类型

news2024/11/21 1:26:37

目录

一、变量

        1.1 var

        1.2 Object

        1.3 dynamic

        1.4 final与const

二、内置类型

        2.1 num(数值)

        2.2 Strings(字符串)

        2.3 bool(布尔值)

        2.4 List(列表)

        2.5 Map(映射集合)

        2.6 runes(Unicode字符,了解即可)

        2.7 Symbols(操作符标识符,了解即可)


        Dart语言的内容挺多的,咱不用都学了。就跟Java 一样,学了也不一定用。咱们可以先上手入门,后面再慢慢填充自己的小知识库。

        1. 变量和内置类型;

        2. 操作符、方法与异常;

        3. 类;

        4. 异步编程。

        搞定这些就可以上手自己的小Demo了,其他的再慢慢填充。今天咱们先学学第一项变量和内置类型

一、变量

        跟其他语言一样main函数是执行入口。

void main(){
  //使用单引号和双引号效果是一样的
  var scc1  = 'scc';
  var scc2 = "scc";
  String scc3 = "scc";
  Object scc4 = 'scc';
  dynamic scc5 = 'scc';

  print(scc1==scc2);//true
  print(scc2==scc3);//true
  print(scc3==scc4);//true
  print(scc4==scc5);//true
  //变量是一个引用,scc1 - scc5 的变量都引用了 一个内容为 “scc” 的 String 对象。
}

        可以用var、Object与dynamic声明的变量赋任何类型的值,但是背后的原理却是非常不同。不用全掌握,了解即可,不影响开发。

        1.1 var

        声明的变量在赋值的那一刻,决定了它是什么类型。

  //var、Object与dynamic
  var dart = "scc";//String 类型
  //正确使用
  dart = "6.20";
  print(dart);//6.20
  //错误使用,编译不通过
  //1.不能将int的值赋值给String
  //dart = 1;
  //2.或者将int值强转成String
  //dart = 1 as String;

        1.2 Object

        与Java一样Object是所有类的基类,Object声明的变量可以是任意类型。(在 Dart 中 甚至连 数字、方法和 `null` 都是对象,比如int。)

  //String类型
  Object dart2 = "scc";
  print("${dart2.runtimeType} + $dart2");//String + scc
  //int类型
  dart2 = 1;
  print("${dart2.runtimeType} + $dart2");//int + 1

        dart2.runtimeType,获取类型

        1.3 dynamic

        不是在编译时候确定实际类型的, 而是在运行时。dynamic声明的变量行为与Object一样

1.没有初始化的变量自动获取一个默认值为 `null`(类型为数字的 变量如何没有初始化其值也是 null)。
2.在声明变量的时候,也可以选择加上具体 类型:dart3 = "scc";
3.对于局部变量,按照Dart代码风格推荐,使用 `var` 而不是具体的类型来定义局部变量。

  //String类型
  dynamic dart3 = "scc";
  print("${dart3.runtimeType} + $dart3");//String + scc
  //int类型
  dart3 = 1;
  print("${dart3.runtimeType} + $dart3");//int + 1

        1.4 final与const

        如果不打算改变一个变量,可以使用final和const,它们可以替代任何类型,只能在声明时初始化,且不能改变。

        final:运行时常量

        const:编译器常量,编译时常量能够让代码运行的更高效。

  //初始化为常数值,推荐使用const
  final String a = "scc";
  const String c = "scc";
  final String b;
  b = "scc";
  //const 必须初始化,以下是错误使用
  //const String d;
  //d = "scc";

注:类的变量可以为 final 但是不能是 const 。如果 const 变量在类中,需要定义为 static const 静态常量。

        定义静态常量 

class AppManager {
  static const String KEY_LOGIN_USER = "key_login_user";
  static const String KEY_LOGNO = "key_logno";
  static const String KEY_TOKEN = "key_token";
  static const String KEY_UID = "key_uid";
}

二、内置类型

 

        2.1 num(数值)

sealed class num implements Comparable<num> {
}

abstract final class int extends num {
    
}
abstract final class double extends num {

}
  num z = 1;
  int x = 2;
  double v = 1.5;

        2.2 Strings(字符串)

        Dart 字符串是 UTF-16 编码的字符序列。 可以使用单引号或者双引号来创建字符串,单引号和双引号可以嵌套使用,字符串中也可以引用变量与表达式。

  var name = 'scc';
  //如果插入一个简单的标识符,而后面没有紧跟更多的字母数字文本,那么{}应该被省略。
  //也可以使用+号拼接
  var str1 = "名字 is $name!";//名字 is scc!
  var str2 = "名字 is ${name.toUpperCase()}zimu";//名字 is SCCzimu
  var str3 = "名字 is "+name.runtimeType.toString()+" 类型";//名字 is String 类型
  print(str1);
  print(str2);
  print(str3);

        使用三个单引号或者双引号可以 创建多行字符串对象

  //使用三个单引号或者双引号可以 创建多行字符串对象
  var s1 = '''
使用三个单引号或者双引号可以
创建多行
字符串对象
''';
  print(s1);
  var s2 = """使用三个单引号或者双引号可以s2
创建多行s2
字符串对象s2""";
  print(s2);

        运行效果

        

        2.3 bool(布尔值)

        Dart 有一个名字为 bool 的类型,只有两个对象是布尔类型的:true 和 false 。这一点和Java没有太大的区别。

        2.4 List(列表)

        列表数据类型类似于其他编程语言中的数组。列表用于表示对象的集合。它是一组有序的对象。 用 List 表示。

  var list = [1, 2, 3];
  //Lists 的下标索引从 0 开始,第一个元素的索引是 0. list.length - 1 是最后一个元素的索引
  print(list[list.length-1]);//3
  //修改元素
  list[0] = 2;
  print(list.toString());//[2, 2, 3]

  List<int> list2 = [3];
  list2[0] = 2;
  print(list2.toString());//[2]

  //在 list 字面量之前添加 const 关键字,可以 定义一个不变的 list 对象(编译时常量)
  var list3 =  const [1,2,3];
  list3.add(2); ///错误,list不可变

        2.5 Map(映射集合)

        键值对相关的对象。 键和值可以是任何类型的对象。每个 只出现一次, 而一个则可以出现多次。这个赋值和Java有明显的区别,这个是要注意的。

//导入库
import 'dart:collection';

void main(){
  //初始化方法一
  Map<String, String> map = HashMap();
  map["account"] = "scc";
  map["password"] = "123456";
  map["password2"] = "123456";
  //scc -- 123456 -- 123456
  print("${map["account"]} -- ${map["password"]} -- ${map["password"]}");

  //初始化方法二
  var map2 = {"account":"dart","password":"111111","password2":"111111"};
  //dart -- 111111 -- 111111
  print("${map2["account"]} -- ${map2["password"]} -- ${map2["password"]}");
}

        2.6 runes(Unicode字符,了解即可)

        Unicode为世界上所有的书写系统中使用的每个字母,数字和符号定义了唯一的数值。 Dart 字符串是 UTF-16 位代码单元字符序列, 所以在字符串中表达 32位 Unicode 值需要 新的语法。Runes就是UTF-32字符集的string 对象。

        表达Unicode代码点的常用方法是\uXXXX,其中XXXX是4位十六进制值。要指定多于或少于4个十六进制数字,需要将值放在大括号中。        

        2.7 Symbols(操作符标识符,了解即可)

        可以看作C中的宏,表示编译时的一个常量。

var i = #A; //常量
void main() {
  print(i); //Symbol("A")
  switch (i) {
    case #A:
      print("A"); //A
      break;
    case #B:
      print("B");
      break;
  }
  var b = new Symbol("b");
  print(#b == b); //true
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/669182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android apk 反编译后打包(含签名)

想分析某些app源码时&#xff0c;遇到烦人弹框&#xff0c;现在想反编译看看具体实现。 用到的工具: GDA4.06 apk反编译工具 apktool apk 打包工具 jdk 环境 一、反编译分析 将apk反编译打开 找到入口代码 弹框代码如图 二、解包、打包 使用apktool解包 ps: apktool工具…

unity游戏架构设计

1.unity架构的3个等级 EmptyGO 所有功能写一个脚本挂载object上面&#xff0c;没有单列manager。 Simple GameManager 写一个公用的管理器&#xff0c;方便调用 Manager of Managers 不同的类型的东西用不同的管理器【声音管理器&#xff0c;关卡管理器&#xff0c;】 2…

chatgpt赋能python:Python搜索快捷键

Python搜索快捷键 介绍 Python作为一门广泛应用在各个领域的编程语言&#xff0c;其强大的搜索功能也得到了广泛的应用和赞誉。但是&#xff0c;在日常的使用中&#xff0c;有时我们需要进行大量的搜索和筛选操作&#xff0c;这时候掌握一些Python搜索快捷键将能够极大地提高…

java入门2(运算符)

目录 运算符和C语言基本一样 算术运算符 单目运算符&#xff1a;自增自减运算符 比较运算符 逻辑运算符 位运算符&#xff08;C语言好像没有&#xff09; 优先级 交换算法 运算符和C语言基本一样 算术运算符 比如拆分一个三位数 public class java练习代码 {public…

Cortext-M3系统:NVIC与中断控制(4)

1、NVIC概述 向量中断控制器&#xff0c;简称NVIC&#xff0c;是Cortex-M3不可分离的一部分&#xff0c;它与CM3内核的逻辑紧密耦合。NVIC的寄存器以存储器映射的方式来访问&#xff0c;除了包含控制寄存器和中断处理的控制逻辑之外&#xff0c;NVIC还包含了MPU、SysTick定时器…

算法分析01--算法的基本概念

1.算法设计与分析的基本概念 1.1算法 算法(Algorithm)是对特定问题求解步骤的一种描述&#xff0c; 它是指令的有限序列&#xff0c; 其中每一条指令表示一个或多个操作。 算法具有以下5个重要特性&#xff1a; 1.有穷性 一个算法必须在有穷步内完成&#xff0c;并且每一步…

Vue2 到 Vue3, 5 个常用API的变化有哪些

Vue3之于Vue2最大的变化&#xff0c;当属composition API了&#xff0c;而除了引入composition API外&#xff0c;一些我们在Vue2上经常使用的东西到了Vue3时也发生了不小的变化&#xff0c;本文将介绍一些有Vue2到Vue3中几个比较重要且常用的知识点&#xff0c;欢迎感兴趣的同…

学习adaboost(一,遍历分类器,c#实现)

我看了很多遍&#xff0c;终于搞懂了&#xff0c;现在编程试一试&#xff0c; 参考文献&#xff08;十三&#xff09;通俗易懂理解——Adaboost算法原理 - 知乎 (zhihu.com) 先写一一段代码&#xff0c;把这个数据集里头的所有分类器找出来&#xff1a;一共四种结果&#xff1a…

C++基础(4)——类和对象(2)

前言 本文主要介绍了C中类和对象的基本知识。 4.2.5&#xff1a;深拷贝和浅拷贝 浅拷贝&#xff1a;编译器给我们提供的拷贝函数就是等号复制操作 深拷贝&#xff1a;自己手动重写一个拷贝构造函数&#xff0c;重新new 浅拷贝会出现的问题&#xff1a;如果使用编译器提供的…

CSS3-背景

背景 1 背景颜色 2 背景图片 3 背景平铺 4 背景位置 5 背景相关属性连写 6&#xff08;拓展&#xff09;img标签和背景图片的区别 1 背景颜色 属性名&#xff1a;background-color 取值&#xff1b;关键字、rgb表示法、rgba表示法、十六进制 注意&#xff1a; 1 背景颜色默认值…

基于Java中小企业人力资源管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

CSS查缺补漏之《常用文本属性、列表属性、表格属性、鼠标属性》

文本属性 letter-spacing&#xff1a; 表示字母或汉字间距&#xff1b; word-spacing&#xff1a;表示单词之间或汉字之间空格的间距 <div>Loremip sumdolors itametconsecteturadipisicingelit.Voluptas.</div> <div>这是一首简单的小情歌 唱着我们心肠的曲…

chatgpt赋能python:Python数据归一化:什么是数据归一化及其作用

Python数据归一化&#xff1a;什么是数据归一化及其作用 数据归一化是一个在数据分析中经常出现的术语。其目的是将数据缩放到相同的比例&#xff0c;从而进行更加准确和可靠的分析。在本文中&#xff0c;我们将介绍什么是数据归一化&#xff0c;为什么我们需要它以及如何在Py…

Element-ui 滚动条美化

目录 1、缘起 2、实际示例 3、美化滚动条 4、Element-plus中的滚动条 5、关于实现方式的思考 1、缘起 之前在做项目时&#xff0c;发现一个项目中&#xff0c;各个子应用项目的UI表现不一致&#xff0c;看了下式Vue项目滚动条和其他的子应用项目表现明显不一致。 有时候…

《网络安全0-100》网络安全前沿

1-人工智能和网络安全 人工智能和网络安全是两个不同的领域&#xff0c;但它 们之间存在着千丝万缕的联系和相互影响。下 面是一些人工智能和网络安全的联系和应用&#xff1a; 威胁检测和预测&#xff1a;人工智能可以利用机器学习 和深度学习等技术&#xff0c;对网络数据…

Golang每日一练(leetDay0103) 区域和检索1~3 Range Sum Query

目录 303. 区域和检索 - 数组不可变 Range Sum Query Immutable &#x1f31f; 304. 二维区域和检索 - 矩阵不可变 Range Sum Query 2d Immutable &#x1f31f;&#x1f31f; 307. 区域和检索 - 数组可修改 Range Sum Query Mutable &#x1f31f;&#x1f31f; &#…

kali配置静态IP地址

修改网络配置 执行命令&#xff1a; vim /etc/network/interfaces 文件末尾添加如下内容&#xff1a; auto eth0 iface eth0 inet static address 192.168.133.66 netmask 255.255.255.0 gateway 192.168.133.2其中&#xff0c;iface eth0 inet static 指配置eth0使用静态ip…

chatgpt赋能python:Python数据建模:从数据预处理到机器学习建模

Python数据建模&#xff1a;从数据预处理到机器学习建模 Python已经成为了数据建模与分析的主要工具之一&#xff0c;因为它的语法简单易懂&#xff0c;有许多数据科学库可以使用&#xff0c;支持各种各样的数据预处理和建模技术。在本文中&#xff0c;我们将重点介绍使用Pyth…

十五周算法训练营——普通动态规划(下)

今天是十五周算法训练营的第十二周&#xff0c;主要讲普通动态规划&#xff08;下&#xff09;专题。&#xff08;欢迎加入十五周算法训练营&#xff0c;与小伙伴一起卷算法&#xff09; 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。…

基于Java网上医院预约挂号系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…