Flutter(三)——一篇文章掌握Dart语言的用法(一)

简介: Flutter(三)——一篇文章掌握Dart语言的用法(一)

Hello World


作为重新认识新语言的常规套路,每个程序员都不可避免的需要经历Hello World的历练,今天学习Dart语言也不例外,所以我们先来用Dart语言,输出Hello World:

void main(){
  print("Hello World")
}


比较与Java语言来说,Dart语言输出Hello World要简练许多,当然还是比Python的代码要多一点,你可以将这段程序用文本文件输入后, 将txt后缀改成dart后缀,然后在命令行中输入"dart 文件名",就可以打印出来了,如下图所示:


变量与常量


变量

Dart语言在声明变量的时候与JavaScript一致,都是通过var关键字定义,然后可以接着给这个变量设置不同的值,默认为null。


这里博主有必要强调一点,Dart语言是一门强类型语言,在第一次赋值的时候,如果已经确定了字符串类型,则不能更改为其他类型,这一点与JavaScript弱类型语言不一样,如果你是从JavaScript转过来,需要额外的注意,当然Dart第一次赋值为其他类型是可以变更的。


常量

对于已经学习过其他各种语言的小伙伴来说,这里算是非常基础的知识,一般的就不介绍了,我们直接来看代码:

//这里声明的是一个变量
var num;
num=11;
print("小明的年龄是 $num 岁");
//开始声明不是字符串,可以变更类型
num='20';
print(num);
//这里定义了一个常量,只能被赋值一次,与Java语言一致
final c=30;
print(c);
const d=50;
print(d);


在这里,我们可以看到,用了const定义了d,那么const与final有什么不同?


在Dart语言中,const变量是一个编译时常量,可以理解为const变量是一个隐式的final,但实例变量可以是final,不能是const。而且常量如果是类级别的,可以使用static const,例如:static const PI=3.1415。


内置类型

Dart语言内置了一些类型,具体如下:


(1)Number(数值型)


(2)String(字符串)


(3)Boolean(布尔型)


(4)List(列表)


(5)Map(键值对)


(6)Runes(符号字符)


(7)Symbols(标识符)


Number(数值型)

在Dart语言中,数值型分为整形int与浮点型double,可以用num,int,double声明使用。我们直接来看一段代码:

num a=10
a=10.2


可以看到,用num声明的变量也是int类型,而且可以修改为double类型,那么这里就有一个灵魂拷问了,反过来,把double类型改为int型可以吗?


答案是不可以,看一下源码我们就很好理解了,源码如下:

abstract class int extends num
abstract class double extends num


数值型运算


这里博主列举了常用的三种数值型运算操作:


(1)运算符:+,-,*,/,~/,%(加,减,乘,除,取整,取余)


(2)常用属性:isNaN,isEven,isOdd等


(3)常用方法:round(),floor(),ceil(),toInt(),toDouble(),abs()


这里需要注意的是,在Dart2.0中,如果我们声明的变量是double类型,但值是int型的,会自动转换为double类型,当然也可以通过toDouble()方法进行转换。


String(字符串)

在这篇博文开头,我们已经打印出来字符串Hello World,那么在Dart语言中,有哪几种创建的方式?


(1)直接使用单引号,双引号创建字符串


(2)使用三个引号或双引用创建多行字符串


(3)使用r创建原始raw字符串


字符串运算


(1)运算符:+,*,==,[]


(2)插值表达式:${expression}


(3)常用属性:length,isEmpty,isNotEmpty


(4)常用方法:contains(),subString(),startWith(),endsWith(),indexOf(),lastIndexOf(),toLowerCase(),toUpperCase(),trim(),trimLeft(),trimRight(),split(),replaceAll()


这里不需要死记硬背,大多数方法都是Java中都有的,而剩下的如果不会用,编译器也会提示你它的详细用法,所以这里博主就不再赘述。


特别注意:但是,这里还是与一点需要注意的,如果单引号嵌套单引号,或者双引号嵌套双引号需要加反斜杠进行转义


Boolean(布尔型)

在Dart语言中,布尔类型常用的地方也是在if条件中判断,Dart语言中布尔类型有四个特点:


(1)使用bool表示布尔类型


(2)布尔类型只有true和false二个值


(3)布尔值是编译时的常量


(4)可以在debug模式下,通过assert断言函数判断布尔值,如果不为真,会引发异常并终止程序往下运行,在开发的时候这点非常有用。


List(列表)

在Dart语言中,List表示集合,但其实与数组是同一个概念,使用的方式如下:


//创建List
var list=[1,2,3];
//通过构造方法创建
var list=new List();
//创建一个不可变的List
var list=const[1,2,3]


在实际的使用过程中,我们除了要创建List数组以外,还需要学会如何使用它,获取或者修改它的值,操作的代码如下:

list[0]=55;

在Dart语言中,List的常用的方法有这些:length(),add(),insert(),remove(),clear(),indexOf(),lastIndexOf(),sort(),sublist(),asMap(),forEach(),shuffle(),这里面有些很好理解,与Java的差不多,我们特别看看下面几个方法,使用代码如下:

var list=['one','two','three'];
print(list.indexOf('one'));//获取元素所在位置索引
print(list.sublist(2));//去除前两个元素返回新的List
print(list.shuffle());//打乱List元素的顺序


Map(键值对)

在Dart语言中,Map与Java中的Map类似,都是以键值对的形式存储数据,键和值可以是任何类型的对象,每个键只能出现一次,我们来看看它的声明代码:

//第一种声明方式
Map map={'book':'zhangyue','yellow':'blue'};
//第二种声明方式
Map map=new Map();
map['book']='zhangyue';


同样创建一个不可变的Map,只要和上面List一样加上const就行了:

Map map=const{'book':'zhangyue','yellow':'blue'};

flutter中,我们还需要使用到两个方法,代码如下:

map.remove('book');//把key为book的元素溢出掉
map.clear();//清空整个Map集合


dynamic和Object

在Dart语言中,一切皆是对象,而且这些对象的父类都是Object。当没有明确类型时,编译的时候会根据值明确类型,例如:

var name='Liyuanjing';
Object name1='Liyuanjing';
dynamic name2='Liyuanjing';


以上三种写法都没有问题,但是Dart语言不建议我们这么做。我们在实际的开发中,我们应尽量为变量确定一个类型,这样可以提高安全性,加快程序的运行速度,如果不指定类型,则在debug模式下类型会是动态的,所以博主推荐定义字符串要这样:

String name='Liyuanjing';

上面我们还使用了dynamic,这个定义是告诉编译器,代码变量不用做类型检测,并且知道写代码的人知道自己在做什么,我们先来看一段代码:

dynamic obj='李元静';
obj['name']=27;

这段代码编译时可以通过,但会抛出“NoSuchMethodError”异常,为了运行的时候对类型进行检测,我们可以使用as和is关键字,代码如下:


dynamic obj=<String,int>{};
if(obj is Map<String,int>){
  obj['name']='Liyuanjing';
}
var map=obj as Map<String,int>;


相关文章
|
2月前
|
Dart
如何在 Flutter 项目中使用 Dart 语言?
如何在 Flutter 项目中使用 Dart 语言?
127 58
|
13天前
|
容器
Flutter &&鸿蒙next中的 Stack 和 Positioned 用法详解
在 Flutter 中,Stack 和 Positioned 是创建层叠布局和灵活定位元素的常用组件。Stack 可以将多个子组件叠加在一起,允许子组件相互重叠;Positioned 用于在 Stack 内部精确控制子组件的位置。本文详细介绍了它们的基本用法、属性和应用场景,包括动画、弹出层和悬浮按钮等。
63 1
|
18天前
|
Dart
flutter dart mixin 姿势
flutter dart mixin 姿势
|
15天前
|
Dart 安全 编译器
Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析
在 Flutter 开发中,`dynamic` 类型提供了灵活性,但也带来了类型安全性问题。本文深入探讨 `dynamic` 类型及其与其他类型的转换,介绍如何使用 `as` 关键字、`is` 操作符和 `whereType&lt;T&gt;()` 方法进行类型转换,并提供最佳实践,包括避免过度使用 `dynamic`、使用 Null Safety 和异常处理,帮助开发者提高代码的可读性和可维护性。
67 1
|
1月前
|
Dart 开发者 Windows
flutter:dart的学习
本文介绍了Dart语言的下载方法及基本使用,包括在Windows系统上和VSCode中的安装步骤,并展示了如何运行Dart代码。此外,还详细说明了Dart的基础语法、构造函数、泛型以及库的使用方法。文中通过示例代码解释了闭包、运算符等概念,并介绍了Dart的新特性如非空断言操作符和延迟初始化变量。最后,提供了添加第三方库依赖的方法。
28 12
|
3月前
|
Dart 前端开发 JavaScript
Flutter&Dart-异步编程Future、Stream极速入门
Flutter&Dart-异步编程Future、Stream极速入门
72 4
Flutter&Dart-异步编程Future、Stream极速入门
|
3月前
|
Dart JavaScript 前端开发
Dart或Flutter中解决异常-type ‘int‘ is not a subtype of type ‘double‘
Dart或Flutter中解决异常-type ‘int‘ is not a subtype of type ‘double‘
128 4
|
3月前
|
Dart 开发工具
消除Flutter doctor的警告Warning: `dart` on your path resolves to xxx/bin/dart
消除Flutter doctor的警告Warning: `dart` on your path resolves to xxx/bin/dart
66 0
|
存储 缓存 Dart
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
类和成员的可见性,这在基于库或包的开发中非常重要,Dart中提供了工厂构造函数,可以方便的实现单例、缓存实例对象、返回子类等,以及常量构造函数的使用......
299 0
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
|
Dart
[Flutter]足够入门的Dart语言系列之函数:函数定义、调用、5种参数类型和main函数
函数(Function)也被称为方法(Method)。其最直观的理解就是数据中的函数,比如y=f(x),在编程中,f对输入x进行处理,返回结果y,就是一个函数......
1024 0
[Flutter]足够入门的Dart语言系列之函数:函数定义、调用、5种参数类型和main函数