一文了解Dart语法,阿里大牛教你自己写Android框架

Object val = 18;
print(“val = $val”);
val = “bruce”;
print(“val = $val”);
val = 3.5;
print(“val = $val”);

输出结果为

value = 18
value = bruce
value = 3.5
val = 18
val = bruce
val = 3.5

变量的默认值

由于前文关于Dart的一些概念中说到过,能够放在变量中的所有内容都是对象,所以如果一个变量没有初始化值,那它的默认值就为null。

int value1;
print(“value1 = $value1”);
bool value2;
print(“value2 = $value2”);
var value3;
print(“value3 = $value3”);
dynamic value4;
print(“value4 = $value4”);

输出结果为

value1 = null
value2 = null
value3 = null
value4 = null

final 和 const

如果不打算更改变量,可以使用final或者const。一个final变量只能被设置一次,而const变量是编译时常量,定义时必须赋值。

// Person类
class Person {
static const desc = “This is a Person class”; //必须定义时赋值,否则编译时报错
final name;
Person(this.name); //对象初始化时赋值一次
}

// 定义一个Person对象
Person p = Person(“Bruce”); //创建对象时设置一次name
print(“p.name = ${p.name}”); //可正常输出 p.name = Bruce
p.name = “haha”; //编译器报错

内置类型

Dart语言支持以下类型

  • numbers

包含int和double两种类型,没有像Java中的float类型,int和double都是num的子类型。

  • strings

Dart的字符串是一系列UTF-16代码单元。创建方法如下:

String str1 = “hello”; //可以使用单引号或双引号
print(“str1 = $str1”);
String str2 = “”“Hi,Bruce
This is Xiaoming.
“””; //使用带有单引号或双引号的三重引号可以创建多行字符串
print(“str2 = $str2”);

输出结果为

str1 = hello
str2 = Hi,Bruce
This is Xiaoming.

  • booleans

Dart有一个名为bool的类型,只有两个对象具有bool类型:true和false,他们都是编译时常量。

  • lists

和其他编程语言常见的集合一样,Dart中使用的集合是数组或有序的对象组。Dart中数组是List对象。

List arr = [“Bruce”, “Nick”, “John”];
print(“arr = $arr”);

  • maps

Map map = {
“name”: “Bruce”,
“age”: 18,
“high”: 1.70
};

print(“map = $map”);
print(“map[‘name’] = ${map[‘name’]}”);

var map1 = {
1: “hi”,
2: “hello”,
3: “yep”
};
print(“map1 = $map1”);
print(“map1[1] = ${map1[1]}”);

输出结果为

map = {name: Bruce, age: 18, high: 1.7}
map[‘name’] = Bruce
map1 = {1: hi, 2: hello, 3: yep}
map1[1] = hi

  • runes

符文是字符串的UTF-32代码点。在字符串中表示32位Unicode值需要特殊语法,常用方法是 \uXXXX,其中XXXX是4位十六进制值,比如小心心(♥)是\u2665。要指定多于或少于4个十六进制数字,请将值放在大括号中。 比如,微笑(😆)是\u{1f600}

String smile = ‘\u{1f600}’;
print(“微笑:$smile”);

Runes input = new Runes(
‘\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}’);
print(String.fromCharCodes(input));

输出结果为

微笑:😀
♥ 😅 😎 👻 🖖 👍

函数

Dart是一种真正的面向对象语言,因此即使是函数也是对象并且具有类型Function。这意味着函数可以分配给变量或作为参数传递给其他函数。

定义方法

和绝大多数编程语言一样,Dart函数通常的定义方式为

String getName() {
return “Bruce”;
}

如果函数体中只包含一个表达式,则可以使用简写语法

String getName() => “Bruce”;

可选参数

Dart函数可以设置可选参数,可以使用命名参数也可以使用位置参数。

命名参数,定义格式如 {param1, param2, …}

// 函数定义
void showDesc({var name, var age}) {
if(name != null) {
print(“name = $name”);
}
if(age != null) {
print(“age = $age”);
}
}

// 函数调用
showDesc(name: “Bruce”);

// 输出结果
name = Bruce

位置参数,使用 [] 来标记可选参数。

// 函数定义
void showDesc(var name, [var age]) {
print(“name = $name”);

if(age != null) {
print(“age = $age”);
}
}

// 函数调用
showDesc(“Bruce”);

// 输出结果
name = Bruce

默认值

函数的可选参数也可以使用 = 设置默认值

// 函数定义
void showDesc(var name, [var age = 18]) {
print(“name = $name”);

if(age != null) {
print(“age = $age”);
}
}

// 函数调用
showDesc(“Bruce”);

// 输出结果
name = Bruce
age = 18

main函数

和其他编程语言一样,Dart中每个应用程序都必须有一个顶级main()函数,该函数作为应用程序的入口点。

函数作为参数

Dart中的函数可以作为另一个函数的参数。

// 函数定义
void println(String name) {
print(“name = $name”);
}

void showDesc(var name, Function log) {
log(name);
}

// 函数调用
showDesc(“Bruce”, println);

// 输出结果
name = Bruce

匿名函数

// 函数定义
void showDesc(var name, Function log) {
log(name);
}

// 函数调用,匿名函数作为参数
showDesc(“Bruce”, (name) {
print(“name = $name”);
});

// 输出结果
name = Bruce

嵌套函数

Dart支持嵌套函数,也就是函数中可以定义函数。

// 函数定义
void showDesc(var name) {
print(“That is a nested function!”);

//函数中定义函数
void println(var name) {
print(“name = $name”);
}

println(name);
}

// 函数调用
showDesc(“Bruce”);

// 输出结果
That is a nested function!
name = Bruce

运算符

Dart中使用到的运算符如下表格

DescriptionOperator
一元后缀expr++ expr-- () [] . ?.
一元前缀-expr !expr ~expr ++expr --expr
乘除操作* / % ~/
加减操作+ -
移位<< >>
按位与&
按位异或^
按位或`
比较关系和类型判断>= > <= < as is is!
等判断== !=
逻辑与&&
逻辑或`
是否null??
条件语句操作expr1 ? expr2 : expr3
级联操作..
分配赋值操作= *= /= ~/= %= += -= <<= >>= &= ^= `

下面就对一些对于Java或Objective-C来说未使用过的运算符通过代码来做个介绍。

  • ?.的使用

//定义类
class Person {
var name;
Person(this.name);
}

// 调用
Person p;
var name = p?.name; //先判断p是否为null,如果是,则name为null;如果否,则返回p.name值
print(“name = $name”);

// 输出结果
name = null

  • ~/的使用

// 代码语句
var num = 10;
var result = num ~/ 3; //得出一个小于等于(num/3)的最大整数
print(“result = $result”);

// 输出结果
result = 3

  • as的使用,as用来做类型转化

// 类定义
class Banana {
var weight;
Banana(this.weight);
}

class Apple {
var weight;
Apple(this.weight);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

24年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-LQriZPpE-1710931719502)]
[外链图片转存中…(img-v1r0USzK-1710931719503)]
[外链图片转存中…(img-5hMPOrTJ-1710931719503)]
[外链图片转存中…(img-o0AQGzhp-1710931719504)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-ee3RiCAo-1710931719504)]

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
除了游戏之外,Android 应用几乎全部是使用 Java的,但是最近 Google 内部正在悄悄地测试另一种高性能的 Android 编程方式,那就 Google 的 Sky 项目。Sky 项目使用网页开发语言 Dart 开发原生 Android 应用,强调应用的运行速度和与 Web 的高度集成。Javascript 已经有 20 年的历史,有很多理念已经跟不上时代,编程体验也很差,因此 Chrome V8 引擎团队开发Dart 语言。最近 Google 的技术发布会展示了 Dart on Android 项目。它有另一个好记的名字,叫做 Sky。快速响应是 Sky 最大的目标之一。60 FPS 普遍意义上应用流畅的标准,即需要每 16 ms 绘制一帧,但是却也是很多 Android 开发者始终无法达到的目标。但是 Sky 不一样:Sky 官方的 demo 已经达到了 60 FPS,而 Sky 官方则是要致力于带来 120 FPS 的应用体验。Sky 团队提供了一个简单的 demo, 并且已经达到了 1.2 ms 绘制一帧的惊人速度。虽然这个界面很简单,但是至少也能证明 Sky 达到 120 FPS 的目标(8 ms 一帧)不仅仅是一句空话。并且Dart 团队表示,Sky 的界面渲染和内部执行并不会互相干扰。即便可能因为网络问题或者其他问题导致内部运行速度很慢,界面仍然流畅灵敏。Sky 项目的 Web 背景使得任何 Sky 的可移植性大大提高。只要装上 Dart 虚拟机,那么任何平台都可以执行 Sky 应用,包括 iOS。虽然 Sky 应用的格式是 APK,但是实际上 Sky 是基于 HTTP 协议的,当然也通过浏览器的兼容性实现了自己的兼容性部署,是的任何人都能运行最新版的应用。除此之外,URLs 也是 Dart 的基础层之一。因此有人认为,Sky 应用完全依赖网络,没有网络的情况下应用便不能运行,并且启动应用的时候都需要先用一两秒下载数据。但是实际上,这些都可以通过缓存解决。通过 HTTP 协议提供服务可以大大缩短开发时间。和普通的“编、编译、安装”三部曲不同的是,Sky 应用可以完全在 HTTP 上编辑代码,客户端只需要关闭,然后打开,“刷新”一下,便可以不更新而直接使用最新版的应用。除此之外,Sky 还为 Android 开发者提供一系列的设计工具,例如 action bar,出没效果、导航面板、以及其他各种你所想得到想不到的组件。当然,Sky 也有许多安全问题有待解决。Sky 应用具备 Android 应用的所有特点,和普通的 Android 应用一样,是有权限访问所有的 Android API 的。但是考虑到 Sky 会从网页上更新应用和数据,那么安全性便不容忽视。Sky 团队的 Github Pages 上着“我们正在频繁地更新 Sky,因此 Sky 框架还没有完全定型,不同版本的框架和底层也可能会产生兼容性问题”。示例代码:<sky> [removed] import 'package:your_app_name/main.dart'; void main() {   new HelloWorldApp(); } [removed] </sky>库:import 'package:sky/framework/fn.dart'; class HelloWorldApp extends App {   UINode build() {     return new Text('Hello, world!');   } }介绍内容来自 segmentfault
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值