美文网首页flutter开发Flutter圈子
Dart教程(二):基本语法

Dart教程(二):基本语法

作者: 康小曹 | 来源:发表于2018-12-18 17:38 被阅读9次

一、几个基本概念

  • dart语言风格和C语言类似,而且dart是面向对象的语言。需要重点关注的是:Dart中所有的变量都是对象。甚至整数、函数(function类)、null也看做是对象。所有的对象都继承于Object类
  • Dart是强类型语言(程序中表达的任何对象所从属的类型都必须能在编译时刻确定
    )。 Dart可以推断出变量的类型,所以变量的类型指定不一定要标明。如果你想明确表示这个变量不想被任何一个类型指定,那就使用特殊类型dynamic来表示。
  • Dart语言支持通用类型,比如List<int>表示整数集列表,List<dynamic>表示元素集为任意类型对象的列表
  • Dart支持顶级函数(如main()),以及绑定到类或对象的函数(分别是静态方法和实例方法)。您还可以在函数中创建函数(嵌套函数或本地函数)。
  • Dart支持顶级变量,以及绑定到类或对象(静态和实例变量)的变量。实例变量有时称为字段或属性
  • 与OC不同的是,dart语言中没有public、protected和private这些关键字。但是在dart里面,以下划线开头的变量自动识别为私有变量
  • dart中也有assert函数,但是assert(bool)中不为true时才会崩溃
  • 常量的表示除了const修饰之外(编译时常量),还可以用final修饰变量,意思为只能赋值一次的变量
  • function是对象,所以可以赋值给变量,也可以当做其他方法的参数(???)
  • 所有的函数都返回一个值。如果没有指定返回值,则 默认把语句 return null; 作为函数的最后一个语句执行。

二、基础数据类型

num和string相互转换
// String -> int
var one = int.parse('1');
assert(one == 1);

// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);

// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');
字符串单双引号的使用
// 双引号和单引号可以相互替代,没有区别
var string1 = "caoxiaokang";
print(string1);

// 三引号支持换行
String multibleLineString = '''hello
world''';
String singleLineString = "caoxk";

// 使用+拼接字符串
print(multibleLineString + "\n" + singleLineString);

// 相连字符串直接拼接
var newString = "hello" 'world';
print(newString); // helloworld

// $的使用
var string = "$multibleLineString" + "\n" + "$singleLineString";
print(string);

输出:

[Running] dart "/Users/caoxk/Demo/dart/main.dart"
caoxiaokang
hello
world
caoxk
helloworld
hello
world
caoxk

三、特殊数据类型

数组:List

xxx

字典:Map

xxx

Unicode:Runes

xxx

标志符:Symbols

xxx


四、函数

1.函数的基本格式
2.函数的缩写
isNoble(atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

对于只有一个表达式的方法,你可以选择 使用缩写语法来定义:

bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

这个 => *expr* 语法是 { return *expr*; } 形式的缩写。=> 形式 有时候也称之为 胖箭头 语法。

注意:在箭头 (=>) 和冒号 (;) 之间只能使用一个 表达式 – 不能使用 语句。 例如:你不能使用 if statement,但是可以 使用条件表达式 conditional expression

3.函数当做参数传递

代码:

// function 也是对象,是function类
var func = (message) => '!!!${message.toUpperCase()}!!!';
var result = func('hello'); //断点打在此处
print(result);

控制台中打印func变量:

func
Closure: (dynamic) => String
call:Closure
hashCode:236919621
runtimeType:Type ((dynamic) => String)

func在runtime中的类型是:参数为dynamic,返回值为String

备注:
这里如果将参数'hello'改成int类型的1,则会运行出错,报错类似于OC中的找不到方法的错误

可选命名参数

可选命名参数的意思是在定义函数时,可以指定参数的名字。这样做的好处是使得函数易于理解,可读性强。
使用方法:

type funcName({type param1, type param2}) {
......
};

举个🌰:
命名的函数及其调用方法:

   // named params
   void func1({bool param1, bool param2}) {
     print('${param1}' + '-' + '$param2');
   };
   func1(param1: true, param2: false);

未命名的函数及其调用方法:

  // not named params
  void func2(bool param1, bool param2) {
     print('${param1}' + '-' + '$param2');
  }
  func2(true, false);

如果直接调用命名函数则会报错:


报错.png
可选位置参数

备注
可选命名参数和可选位置参数不能同时存在,例如:

@required

?????
Required is defined in the meta package. Either import package:meta/meta.dart directly, or import another package that exports meta, such as Flutter’s package:flutter/material.dart.
?????
使用@required修饰的参数书序必传参数,如果不传,编译器会报错

const Scrollbar({Key key, @required Widget child})

类型判定操作符

The as, is, and is! operators are handy for checking types at runtime.

Operator Meaning
as Typecast (also used to specify library prefixes)
is True if the object has the specified type
is! False if the object has the specified type

The result of obj is T is true if obj implements the interface specified by T. For example, obj is Object is always true.

类:class

重点:

1.点方法"obj?.property/method()"等价于如果是如果不是null,则执行.后面的语句
2.有些类提供了常量构造函数。使用常量构造函数 可以创建编译时常量,要使用常量构造函数只需要用 const 替代 new 即可:

var p = const ImmutablePoint(2, 2);

3.可以使用 Object 的 runtimeType 属性来判断实例 的类型,该属性 返回一个 Type 对象。

print('The type of a is ${a.runtimeType}');

4.Dart 是一个面向对象编程语言,同时支持基于 mixin 的继承机制。 每个对象都是一个类的实例,所有的类都继承于 Object.基于 Mixin 的继承 意味着每个类(Object 除外) 都只有一个超类,一个类的代码可以在其他 多个类继承中重复使用。

构造函数

相关文章

  • Dart教程(二):基本语法

    一、几个基本概念 dart语言风格和C语言类似,而且dart是面向对象的语言。需要重点关注的是:Dart中所有的变...

  • dart入门潜修基础篇之基本语法和内置类型

    本文收录于dart入门潜修系列教程。 创作不易,转载还请备注。 前言 本篇文章会对dart语言的基本语法和内置类型...

  • Flutter(二)Dart基本语法

    一. Dart介绍和安装 1.1. 认识Dart Google为Flutter选择了Dart就已经是既定的事实,无...

  • Dart基本语法

    重要概念 可以放在变量中的都是对象,所有对象都是类的实例,包括数字,函数,null都是对象, 所有对象都是继承自 ...

  • Dart 基本语法

    变量与常量 Dart 中变量使用 var 关键字声明。 变量可以被赋予不同类型的值 未被初始化的变量,默认值为 n...

  • Dart 基本语法

    Dart在1.0的时候是弱类型Dart在2.0的时候是强类型 闭包有什么用? 变量类型 var 是一个可选类型,d...

  • Dart 基本语法

    Dart 语言集合了 Java、JavaScript、C、TypeScript 等语言的优势,可以说是集百家之长的...

  • Dart 基本语法

    1. dart文件以.dart为后缀名 2. 入口方法为main 3. 定义变量,Dart中有类型校验 var s...

  • Dart 基本语法

    Final以及Const 在 Dart 中使用 final 以及 const 关键字来申明常量。使用 const ...

  • Dart基本语法

    概念 Dart和JavaScript一样都是单线程模型。 任何保存在变量中的都是一个对象,并且所有的对象都是对应一...

网友评论

    本文标题:Dart教程(二):基本语法

    本文链接:https://www.haomeiwen.com/subject/omdckqtx.html