Dart基础(二)- *** 作符

Dart基础(二)- *** 作符,第1张

  Dart中支持的 *** 作符:

  算术运算符的 / ,两个整数相除,不能整除时,获得的结果是 double 的结构,和swift不相同。

  讲一下 ++ 和 -- 在变量前后的问题:如果运算符变量参与运算或赋值;运算符在前变量在后,这种情况下先进行变量的自增或者自减,然后参与参数运算或赋值;运算符在后变量在前,这种情况下先进行参与变量的运算或赋值,然后进行变量的自增或者自减。如下:

  关系运算符是对两个对象进行关系判断。

   as 用于强制类型转换,强制转换的类型必须是对象的类或者父类,否则运行时会报错。

   is 判断对象是否属于某个类及其子类, is! 判断对象是否不是某个类及其子类。

   = 表示如果变量为 null 时,将后边的值赋给变量,如果变量不为 null ,不进行赋值 *** 作。

  关于 a op= b 的赋值 *** 作符,等价于 a = a op b 。

   condition expr1 : expr2 表示 条件 值1 : 值2 ,当条件位 true 时是值1,否则为值2。

   expr1 expr2 表示 值1 值2 ,当值1为 null 时,取值2。

dart中有四种集合,分别是Set,List,Map和queues。这些集合在使用中需要注意些什么呢?什么样的使用才是最好的使用方法呢一起来看看吧。

对于常用的Set,Map和List三个集合来说,他们是有自己的无参构造函数的:

可以看到Set和Map是可以使用构造函数的。但是对于List来说,无参的构造函数已经不推荐使用了。

对于Set和Map来说,可以这样构造:

但是dart官方推荐直接使用字面量来创建这些集合,如下所示:

为什么呢?这是因为dart中的字面量集合是非常强大的。可以通过扩展运算符,if和for语句对集合进行构造和扩展,如下所示:

对应dart的可遍历集合来说,这些集合并没有存储集合的长度信息,所以如果你调用集合的length方法,可能会导致集合的遍历,从而影响性能。

所以,我们需要调用集合的isEmpty 和 isNotEmpty方法来判断集合是否为空,这样速度更快。

对应Set和List这两个可遍历的集合来说,有两种遍历方法,可以通过调用forEach() 方法或者for-in来进行遍历,如下所示:

这两种方法中,dart推荐使用for in的写法。

当然,如果你想将现有的function应用在集合中的每个元素中,forEach也是可以的:

可遍历对象可以通过调用toList将其转换成为List,同样的Listfrom也可以将可遍历对象转换成为List。

那么两者有什么区别呢?

两者的区别是iterabletoList并不会改变list中数据的类型,而Listfrom会 举个例子:

当然,你也可以使用List<T>from来强制对创建出来的List进行类型转换。

对于可遍历对象来说,两个过滤集合中元素的方法,他们是where和whereType。

比如,我们需要过滤List中的字符串,则可以这样写:

看上去两者没有太大的区别,都可以得到应有的结果。但是两者事实上还是有区别的,因为对应where来说,返回的是一个 Iterable<Object> ,所以上面的例子中,如果我们真的需要返回String,还需要对返回结果进行case:

所以,如果你要返回特定的对象时候,记得使用whereType。

cast通常用来对集合中的元素进行类型转换 *** 作,但是cast的性能比较低,所以在万不得已的情况下,一定要避免使用cast。

那么如果不使用cast,我们怎么对类型进行转换呢?

一个基本的原则就是在构建集合的时候提前进行类型转换,而不是在构建集合之后再进行整体的cast。

比如下面的例子从一个dynamic类型的List转换成为int类型的List,那么我们可以在调用Listfrom方法的时候进行类型转换:

如果是map的话,可以这样 *** 作:

比如我们需要构建一个int的List,那么在创建之初就可以指定List的内部类型,然后再对其添加元素:

以上就是dart中的集合使用最佳实践。

Dart中的抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。

接下来,我们实现一个Animal类 要求它的子类必须包含eat方法

多态的定义

上面例子就是典型的多态 Cat 和 Dog 通过继承父类实现了不同的方法。

下面这个例子是父类定义一个方法不去实现,让继承它的子类去实现的一个体现。

和java一样,dart也有接口,但是和java是有区别的

首先dart的接口没有interface关键字来定义接口,而是普通类或抽象类都可以作为接口被实现,同样使用implements关键字进行实现。

但是dart接口有点奇怪,如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍。

而因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现java接口那样的方式,一般会使用抽象类。

建议使用用抽象类定义接口

接下来定义一个db库 支持mysql mssql,mysql mssql 中有同样的方法

学习dart给我最深的感触是它既像java一样定义类和方法,又想脚本语言,比如JavaScript那样可以随意定义,因此,如果你对java或者JavaScript语言比较了解的话,你能够很好的去运用它

当然它还带了点一些C语言的知识, 比如,可以使用 typeof 关键词, 曾经在学习C语言的时候,常常会看到它但是后来又不常用,就有所忘记,特此记录可以温故知新

typeof 从英文翻译的意思是 类型其实可以说成是等同于某种类型

有的人也许会问了,为什么你要这样定义呢这岂不是很麻烦我明明有这个int类型我干嘛还要去定义这样一个类型

有句话肯定很好给你解释, 存在即是合理我们下面举个例子 ,让你体会下

这个怎么理解呢 我们举个非常通俗的例子,

比如说, 我们通常一个具有机箱,主板,CPU,内存条,风扇等等的东西叫做主机,那么主机就像是一个类型, 你肯并不会每次对别人介绍时,说 这是一个主机,主机里面有机箱,主板,内存条,CPU等等,只有别人去关注的时候,你会详细的告诉他,里面的构造是什么 不知道这个例子是否能够让你有所领悟呢

其实做程序,干开发,做的越久,你会发现,其实程序世界并不是那么抽象,有些东西还是可以和现实中进行一一对应的,比如 java的设计模式, 比如程序语言的设计 ,我们刚刚说的 typeof 就是这样

typeof 就像是具有修饰特性的词语一样,指定某一类东西的类型

说了这么多,其实我们还没有说如何去使用它呢

那么,我们从现实中找例子去理解,就好比我们如何判断一个物品,是不是主机呢(我们就拿主机说事)

我们可以去注意它的一些特别和属性,在程序中,其实也是一样的 我们需要注意一个对象或者一个值,是否是哪个类型, 第一,对照返回值, 第一对照它的参数个数和参数的类型,如果两者都f符合,那么我们就能确定它是我们说的那个类型下面我们举个例子看下!!!

从图中的运行结果可以看出,说明plusNum 是Add这个函数类型

其实我们举的例子很简单,但是如果你们理解,那么在以后的开发中,遇到了就不会觉得很突兀,难以理解了!

好了,今天和大家分享的东西,就这么多, 东西并不难,只是有时候不太好理解 特此记录,温故而知新!

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

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

3、dynamic: 不是在编译时候确定实际类型的, 而是在运行时。dynamic声明的变量行为与Object一样,使用一样,关键在于运行时原理不同。

num 是数字类型的父类,有两个子类 int 和 double 。

常见的 *** 作符就没什么可说的了,主要来看看Java所没有的。

as 、 is 、 和 is! *** 作符是在运行时判定对象 类型的 *** 作符

as *** 作符把对象转换为特定的类型,但是如果无法完成转换则会抛出一个异常

is 和Java中的 instanceof 相同

= 、 += 、 \= 、 = 这些不必多说,还有一个 = *** 作符用来指定 值为 null 的变量的值

Dart 有两个特殊的 *** 作符可以用来替代 if-else 语句:

Dart 23引入了散布运算符( )和可识别null的散布运算符( ),它们提供了一种插入多个简明格式的简洁方法元素添加到集合中

例如,您可以使用传播运算符()将列表的所有元素插入另一个列表:

如果扩展运算符右边的表达式可能为null,则可以使用可识别null的扩展运算符( )来避免出现异常:

以上就是关于Dart基础(二)- *** 作符全部的内容,包括:Dart基础(二)- *** 作符、dart系列之:集合使用最佳实践、Flutter/Dart - Dart中的抽象类 多态 和接口等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9491423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存