Dart语言基础
前言:dart语言简介
Dart是谷歌开发的计算机编程语言,后来被Ecma认定为标准 。它被用于web、服务器、移动应用 和物联网等领域的开发。它是宽松开源许可证下的开源软件。
Dart是面向对象的、类定义的、单继承的语言。它的语法类似C语言,可以转译为JavaScript,支持接口、混入、抽象类、具体化泛型、可选类型和sound type system 。
一、变量
1.1.类型推导
创建一个变量并初始化
var name = ‘Bob’;
动态类型(会关闭类型检查)
dynamic name = ’ Bob’;
void main() {
dynamic name = 'Ronin';
print(name.runtimeType);
var name2 = 'Ronin';
print(name2.runtimeType);
name = 12;
print(name.runtimeType);
}
1.2.默认值
var s; //默认为null
print(s);
1.3.Final 和 const修饰符
如果你从未打算改变一个变量,那么可以使用final和const修饰它
final name = 'zsh';
name = 'zms'; // 错误做法
const age = 20;
age = 19; // 错误做法
final和const的区别?
const在赋值时, 赋值的内容必须是在编译期间就确定下来的
final在赋值时, 可以动态获取, 比如赋值一个函数
String getName() {
return "zsh";
}
main() {
final name1 = getName(); //正确
const name2 = getName(); //错误->需要执行函数才能取到值
}
二、内建类型
2.1.数据类型
整数类型 int a = 1;
浮点类型 double = 1.23;
字符串类型 String s = ‘abc’;
布尔类型 bool flag = true;
List集合类型 List list = [‘a’,‘b’,‘c’,‘d’];
字典(Map)类型 Map<String,String> map2 = {‘name’:‘zsh’,‘age’:‘20’};
main() {
int a = 1; //整数类型
print(a);
double b = 1.23; //浮点类型
print(b);
String s = 'abc'; //字符串类型
print('$s');
bool flag = true; //布尔类型
print(flag);
var str1 = ['a','b','c','d']; //List集合类型,使用类型推导定义
print('$str1 ${str1.runtimeType}');
List<String> list = ['a','b','c','d']; //List定义
print('$list ${list.runtimeType}');
var map1 = {'name':'zsh','age':'20'}; //字典类型,使用类型推导定义
print('$map1 ${map1.runtimeType}');
Map<String,String> map2 = {'name':'zsh','age':'20'};
print('$map2 ${map2.runtimeType}');
}
2.2.集合的相关操作
2.2.1、所以集合都支持length属性
main() {
//1.length属性
List<String> list = ['a','b','c','d'];
Map<String,String> map = {'name':'zsh','age':'20'};
print('${list.length}');
print('${map.length}');
}
2.2.2、添加,删除,包含操作
main() {
//1.length属性
List<String> list = ['a','b','c','d'];
Map<String,String> map = {'name':'zsh','age':'20'};
//list
list.add('e'); //添加
print('$list');
list.remove('a'); //删除
print('$list');
bool s = list.contains('b'); //是否包含
print('$s');
/**
* ------------------------------------------------
*/
//map
Map<String,String> map2 = {'height':'10','weight':'20'};
map.addAll(map2); //添加一个map集合
print('$map');
map.remove('name'); //删除
print('$map');
print('${map.containsKey('age')}'); //包含
}
三、函数
3.1.函数的定义
返回值 函数的名称(参数列表) {
函数体
return 返回值
}
String getString() {
return "zsh";
}
void main() {
String s = getString();
print('$s');
}
3.2.箭头函数
void main() {
List<String> list = ['a','b','c','d'];
list.forEach((value)=> print('$value'));
}
3.3.可选函数
void copy(String name,{int age,int num }) {
print('$name $age $num');
}
main() {
copy('zsh');
copy('zsh',age:20);
copy('zsh',age: 20,num: 10);
}
3.4.参数默认值
参数可以有默认值, 在不传入的情况下, 使用默认值
只有可选参数才可以有默认值
copy(String name, {int age = 20, double height=1.3}) {
print('name=$name age=$age height=$height');
}
3.5.匿名函数
(functio(){
```
})()
3.6.词法作用域
dart中的词法有自己明确的作用域范围,它是根据代码的结构({})来决定作用域范围的
优先使用自己作用域中的变量,如果没有找到,则一层层向外查找。
var s = 'zsh';
main() {
font() {
print('$s');
}
font();
}
3.7.词法闭包
闭包可以访问其词法范围内的变量,即使函数在其他地方被使用,也可以正常的访问。
main() {
makeAdder(num addBy) {
return (num i) {
return i + addBy;
};
}
var adder2 = makeAdder(2);
print(adder2(10)); // 12
print(adder2(6)); // 8
var adder5 = makeAdder(5);
print(adder5(10)); // 15
print(adder5(6)); // 11
}
3.7.返回值问题
所有函数都返回一个值。如果没有指定返回值,则语句返回null;隐式附加到函数体。
main(List<String> args) {
print(foo()); // null
}
foo() {
}
四、运算符
4.1.除法、整除、取模运算
var num = 7;
print(num / 3); // 除法操作, 结果2.3333..
print(num ~/ 3); // 整除操作, 结果2;
print(num % 3); // 取模操作, 结果1;
4.2.条件运算符
Dart中包含一直比较特殊的条件运算符:expr1 ?? expr2
如果expr1是null,则返回expr2的结果;
如果expr1不是null,直接使用expr1的结果。
var str = 'zsh';
var str= null;
var str= str ?? 'kobe';
print(str);
4.3.级联语法
对一个对象进行连续的操作,这个时候可以使用级联语法
class Shop{
String name;
void add() {
print("${name} is add");
}
void update() {
print("${name} is update");
}
}
main(List<String> args) {
final p1 = Shop();
p1.name = 'zsh';
p1.add();
p1.update();
final p2 = Shop()
..name = "zsh"
..add()
..update()
}
五、循环语句
if 和 else
for循环
while和do-while循环
break和continue
switch和case
六、类和对象
6.1.类型的定义
class 类名 {
类型 成员名;
返回值类型 方法名(参数列表) {
方法体
}
}
class Csrf{
String name;
test() {
print('${name}');
}
}
6.2.不支持重载
Dart本身不支持函数的重载
class Csrf{
String name;
int age;
Csrf(String name, int age) {
this.name = name;
this.age = age;
}
}
6.3.抽象类
抽象方法,必须存在于抽象类中。
抽象类是使用abstract声明的类。
abstract class AbstractContainer {
void updateChildren();
6.4.继承
Dart中的继承使用extends关键字,子类中使用super来访问父类。
父类中的所有成员变量和方法都会被继承,,但是构造方法除外。
class Animal {
String name;
}
class Cat extends Animal {
}
6.5.隐式接口
默认情况下,定义的每个类都相当于默认也声明了一个接口,可以由其他的类来实现(因为Dart不支持多继承)
abstract class Dog{
method1();
}
abstract class Cat{
method2();
}
class Person implements Dog, Cat{
@override
method1() {
}
@override
method2() {
}
}
6.6.Mixin混入
Mixin混入的方式实现多继承
mixin Cat{
method1() {
}
}
mixin Dog{
method2() {
}
}
class Person implements Cat, Dog{
}
七、泛型
7.1.List泛型
List list = [‘zsh’, ‘zms’, ‘user’];
var list = [‘zsh’, ‘zms’, ‘user’];
7.2.Map泛型
Map<String, String> map= {‘name’: ‘zsh’, ‘age’: ‘20’};
var map2 = <String, String>{‘name’: ‘zsh’, ‘age’: ‘20’};
7.3.泛型方法
T first(List ts) {
T tmp = ts[0];
return tmp;
}
main() {
var names = ['zsh', 'ss'];
var first = getFirst(names);
print('$first ${first.runtimeType}');//zsh String
}
T getFirst<T>(List<T> ts) {
return ts[0];
}
八、异步
Dart是单线程模型
Dart是一个单线程语言.我们在处理耗时操作的时候使用stream或者future来实现
async和await关键字支持异步编程,允许您编写类似于同步代码的异步代码。
九、元数据
使用元数据提供关于代码的附加信息。元数据注释以字符@开头
class Todo {
final String who;
final String what;
Todo(this.who, this.what);
}
import 'todo.dart';
@Todo('seth', 'make this do something')
void doSomething() {
print('do something');
}
Dart语言基础的更多相关文章
- Flutter学习之Dart语言基础(构造函数)
最常见的构造函数形式,即生成构造函数,创建一个类的新实例: class Point { num x, y; //Dart中int和double是num的子类 //this引用当前类对象 Point(n ...
- Fluter基础巩固之Dart语言详解<一>
在上一篇https://www.cnblogs.com/webor2006/p/11367345.html中咱们已经搭建好了Flutter的开发环境了,而Flutter的开发语言是选用的dart,那么 ...
- Fluter基础巩固之Dart语言详解<三>
继续Dart语言的学习,这次过后下次就进入全新的Flutter的学习了,小小的激动.. 操作符重载: C++中也有,咱们来看一下在Dart中是如何来实现的: 比较简单. 异步[重要!]: async和 ...
- Fluter基础巩固之Dart语言详解<二>
继续学习枯燥的Dart语言语法,目前的耐得住寂寞是为了将来学得“爽”做准备的!!! 异常: Dart 提供了 Exception 和 Error 类型, 以及一些子类型.还可以定义自己的异常类型.但是 ...
- 红黑树的删除详解与思路分析——不同于教科书上的算法(dart语言实现)
对于红黑树的删除,看了数据结构的书,也看了很多网上的讲解和实现,但都不满意.很多讲解都是囫囵吞枣,知其然,不知其所以然,讲的晦涩难懂. 红黑树是平衡二叉树的一种,其删除算法是比较复杂的,因为删除后还要 ...
- dart系列之:dart语言中的内置类型
目录 简介 Null 数字 字符串 布尔值 列表 set和map 简介 和所有的编程语言一样,dart有他内置的语言类型,这些内置类型都继承自Object,当然这些内置类型是dart语言的基础,只有掌 ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- C#语言基础
第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...
随机推荐
- 宏参数(Arguments)的扩展
宏分为两种,一种是 object-like 宏,比如: #define STR "Hello, World!" 另一种是 function-like 宏,比如: #define M ...
- RabbitMQ入门到进阶(Spring整合RabbitMQ&SpringBoot整合RabbitMQ)
1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...
- JSP内置对象(4个作用域)
9个内置对象: 4个作用域:表示这4个对象可以存值,但取值范围有限定(setAttribute/getAttribute) pageContext request session applicatio ...
- Mybatis框架基础入门(五)--输入映射和输出映射
1.parameterType(输入类型) 1.1 传递简单类型 使用#{}占位符,或者${}进行sql拼接. <select id="caseCountByQueryCaseVo&q ...
- 为什么 wait 和 notify 方法要在同步块中调用?
Java API 强制要求这样做,如果你不这么做,你的代码会抛出 IllegalMonitorStateException 异常.还有一个原因是为了避免 wait 和 notify 之间产生竞态条件.
- vue使用svg,animate事件绑定无效问题及解决方法
由于使用svg制作圆形进度条,但是进度展示的太生硬,没有过渡圆滑的效果,所以使用 animate(在svg元素里可以查到) 元素标签,但 这样使用了,还是没有效果,我前端使用的 vue ,所以通过 @ ...
- 二、mycat15种分片规则
一.分片枚举 通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下: <tab ...
- memcached 是如何做身份验证的?
没有身份认证机制!memcached 是运行在应用下层的软件(身份验证应该是应用 上层的职责).memcached 的客户端和服务器端之所以是轻量级的,部分原因就 是完全没有实现身份验证机制.这样,m ...
- memcached 与 redis 的区别?
1.Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储.而 memcache 只支持简单数据类型,需要客户端自己处理复 杂对象 2.R ...
- 什么是 Spring MVC 框架的控制器?
控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现.控制器解 析用户输入并将其转换为一个由视图呈现给用户的模型.Spring 用一个非常抽象 的方式实现了一个控制层,允许用户创建多种用途的控 ...