Dart基础特性

 

注:此篇文章对应有一定开发语言基础的伙伴学习研究。这里只摘录出Dart的特性和其它语言不一样的特性(对比java)。

简介:Dart访问控制、Dart公有私有、Dart属性定义、Dart方法、Dart数据类型、Dart运算符、Dart=>函数、Dart箭头函数、Dart 构造、Dart get/set、Dart:函数、Dart冒号函数、Dart包/类冲突

访问控制

在Dart中,访问控制只有两种即:公有和私有;但是并不存在修饰符。

无论是属性还是方法,默认为公有;在属性名或方法名前加下划线为私有距离举例

举例说明
String str;定义一个公有的字符串属性
String _str;定义一个私有的字符串属性
void getStr(){}定义一个公有的方法
void _getStr(){}定义一个私有的方法

以上可以看出,公有和私有并没有修饰符,只在于名字前的 "_" 。

属性定义

1.变量

在Dart中,可以使用关键字 ‘var’ 定义一个变量。那么有人问了, 这个var定义的变量是什么类型呢?

Dart 可以 根据值自动推断类型。当然,我们也可以直接指定变量类型。

举例说明
var str = ‘你好 !’;推断 str 为String 类型
var str = 123;推断 str 为String int类型

var str = 123;

str = ‘456’;

注意:次例句str会被推断为int类型,下边改变str值为String类型。

结果是:会 报 错。

String str;定义一个String变量名称为srt
int str;定义一个int变量名称为srt

2.常量

在Dart中,定义常量有两个关键词 const 和 final。

这两个关键字相同点在于:使用任意一个关键字修饰的属性都不个改变

不同点在于:final 可以开始不赋值但只能赋值一次。final 不仅有const编译时常量的特性,最重要的它是运行时常量。并且final是惰性初始化的,即在运行时第一次使用前才初始化。

举例说明
const a = '你好!';使用const 定义一个常量

const a = '你好!';

a = 'Hello !!';

试图修改一个常量的值

结果是:会 报 错。

final a = '你好!';使用final 定义一个常量

final a = '你好!';

a = 'Hello !!';

试图修改一个常量的值

结果是:会 报 错。

const time = new DateTime.now();

使用const定义一个运行时 返回结果的常量

结果是:会 报 错。

final time = new DateTime.now();使用final定义一个运行时 返回结果的常量

方法

在Dart中,定义一个方法可省略返回值类型。如无需返回值可使用void。

举例说明
getStr(){};具有返回值的 方法
void getStr(){};没有返回值的 方法
String getStr(){};返回String类型的方法

getStr(){

  getName(){

    return '';

 }

};

在dart中,方法是可以嵌套的。有称为 闭包
getInfo(String name,int age){};带参数的方法
getInfo(String name,[int age]){};age为 可选参数,调用此方法时可以不传这个参数
getInfo(String name,[int age,String sex = '男']){};age为 可选参数,sex 为默认参数,当不传入sex时,sex默认为男
getInfo(String name,{int age}){};命名参数,调用此方法时getInfo('秀儿',age:15);
var aa = (){}匿名方法  赋给一个变量 aa

数据类型

在Dart中,常用数据类型有String,数值(int、double),运算符,boo,数组集合(List、map)。

1.String

字符串在Dart中使用时要在变量名前加 ‘$’ 符号

举例说明

String str = '你好!!';

String str = "你好!!";

String str = '''你好!!''';

String str = """你好!!""";

dart可以使用

一个单引号、一个双引号、三个单引号、三个双引号定义String变量。

 

String str = '''你好!!

我好!!

大家好!!''';

三个单引号和三个双引号定义变量时,可以有回车,并且控制台输出时与定义变量时格式一致。

String str = '你好!!';

print('$str');

定义并打印字符串

2.数值

变量定义例句:

int i = 123;

double b = 123.3;

3.bool

bool 值只有两个,true或false

4.数组/集合

forEach遍历

list.forEach((value){
    print('$value');
});

where 条件返回集合。返回满足条件数据生成新的集合

var list = [1,2,3,4,5,6,7,8];
var listTo = list.where((value){
    return value > 5
});

any条件返回bool值。集合任意元素满足条件返回true。下边代码返回true;

var list = [1,2,3,4,5,6,7,8];
var listTo = list.any((value){
    return value > 5
});

every条件返回bool值。集合每个元素满足条件返回true。下边代码返回false;

var list = [1,2,3,4,5,6,7,8];
var listTo = list.every((value){
    return value > 5
});

▶List

举例说明
var list = ['aaa','bbb','ccc','ddd'];定义List数组
var list = new List();定义List数组
var list = new List<String>();定义String类型数组

▶Set

▶Map

举例说明

var map = {

   "name":"张三",

   "age":20

};

定义Map数组
var map = new Map();定义Map数组

5.判断

举例说明

var str = 'aaa';

bool b = str is String;

使用 is 关键字判断类型

判断变量str是否为String类型,返回true;

isNaN

int i = 0/0;

上句再别的语言中报错,但在dart中并不会报错,二十返回NaN。

isNaN就是判断变量 是否时 NaN

isEmpty判断时否为空
isNotEmpty判断时否不为空
  

运算符

算术运算符
+ 加操作- 减操作* 乘操作/ 除操作
~/取整操作%取余操作++ 自增-- 自减
关系运算符
== 等于!= 不等于>  大于 < 小于
>= 大于等于<= 小于等于  
逻辑运算符
!取反&&  并且|| 或者 
赋值运算符
+=-=*=/=
~/=%== 赋值??= 空赋值(非空不赋值)
条件运算符
ifif elseswitchswitch case
? : 三目运算?.  成员访问,与.相同,左边可以为空(空指针安全)  

比较有意思的赋值操作符示例: 

a ?? "123"  ///表示如果 a 为空,返回123
a ??= "123" ///表示如果 a 为空,给 a 设置成 123
a ~/123 ///a 对于 123 整除


=>函数

箭头函数,话不多说,直接上代码:

//使用=>遍历list
var list = ['aa','bb','cc','dd'];

//forEach 遍历
list.forEach((value){
    print(value)
});

//使用=>函数遍历     箭头函数后面只能根一行代码
list.forEach((value) => print(value));

一个类中默认构造函数只能写一个,哪怕入参不一样也不行。这一点和java不一样

class Abc{
    String a;
    String b;
    //简写的构造函数    下边语句可以直接给属性赋值
    Abc(this.a,this.b);

    //命名构造  可以有多个
    Abc.info(){}
}

get/set

有人称之为 计算属性

get关键字 定义get方法,使用时如访问属性一样:class.info;

get info{
    return '你好!!';
}

set关键字 定义set方法,使用时如访问属性一样:class.pName= '里斯';

set pName(String v)(
    this.name = v;
)

:函数

Dart中 冒号是  初始化列表

calss Abc{
    String a;
    String b;

    //构造函数运行前  初始化变量
    Abc():a = '你',b = '好'{ ... }
}

包/类冲突

当库中方法冲突时:

import 'lib/abc1.dart';

//在开发过程中,难免会有不同库中出现同一命名方法,这时我们就可以使用  as 重命名。
import 'lib/abc2.dart' as a;


//使用
Abc a1 = new Abc();
a.Abc a2 = new a.Abc();

部分导入/隐藏

// 使用 show 进行部分导入,此时只能访问xxx1方法
import 'lib/abc1.dart' show xxx1;

// 使用 hide 进行部分隐藏,此时不能访问xxx2方法
import 'lib/abc1.dart' hide xxx2;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马志武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值