2024年一文搞定Dart入门(学习笔记),嵌入式工程师面经

本文强调了程序员阅读源码和系统学习的重要性,尤其是对于Dart等编程语言的理解,提倡从底层代码出发,构建坚实的知识体系,避免浅尝辄止,以实现技术深度提升。同时提到了在线学习资源的整合和社群支持的价值。
摘要由CSDN通过智能技术生成

最后

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析

资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

​ 本文主要是早之前学习Dart的一些笔记,记录了Dart常用的知识点以及用法。很多知识点比如:抽象类,泛型,异步处理,Mixin机制等这里没有做具体的详解。

​ 后期开发学习过程中如果会持续更新…

重要概念


  • 任何保存在变量中的都是一个 对象 , 并且所有的对象都是对应一个 的实例。 无论是数字,函数和 null 都是对象。所有对象继承自Object类。

  • 尽管 Dart 是强类型的,但是 Dart 可以推断类型,所以类型注释是可选的。

  • Dart 支持泛型,如 List <int> (整数列表)或 List <dynamic> (任何类型的对象列表)。

  • Dart 支持顶级函数(例如 main() ),这些函数不会封装在一个类或者对象当中,所有的应用程序都至少有一个顶级函数,即 main() 函数 。

  • Dart 支持顶级 变量 , 同样变量绑定在类或对象上(静态变量和实例变量)

  • 与 Java 不同,Dart 没有关键字 “public” , “protected” 和 “private” 。 如果标识符以下划线(_)开头,则它相对于库是私有的

  • 标识符 以字母或下划线(_)开头,后跟任意字母和数字组合

  • Dart 语法中包含 表达式( expressions )(有运行时值)和 语句( statements )(没有运行时值)

变量


变量定义

var name = ‘beason’ //类型推导为string

dynamic name = ‘beason’ //动态类型,编译时不会进行类型推导,运行时进行类型推导

String name = “beason” //指定类型为String

思考:var, dynamic,object定义变量的区别?

所有的实例变量都隐式的生成get方法,非final变量还会生成set方法

默认值

​ 未初始化的变量默认都是Null,无论是数字还是其他类型

Final/Const

  • 使用过程中从来不会被修改的变量:final和const

  • Final 只能被设置一次:必须在构造函数体执行之前初始化

  • Const在编译时就已经固定

数据类型


Dart 语言支持以下内建类型:

Number

  • int:整数值不大于64位,值的范围从 -263 到 263 - 1

  • double:64位浮点数

intdouble 都是 num的子类,num 类型包括基本运算 +, -, /, 和 *, 以及 abs()ceil(), 和 floor(), 等函数方法

String

  • 支持内嵌${expression}表达式

var s = ‘string interpolation’;

print(‘Dart has $s, which is very handy.’);

  • 支持使用”+“运算符,把多个字符串连接成一个

  • ==用来检查两个对象是否相等

  • 定义多行可以使用’’'三个点定义字符串

  • 使用r前缀,可以定义raw原始字符串(没有任何转义,\n照样输出)

Boolean

  • bool类型,只有字面量true/false表示

List(也被称为Array)

  • 定义:var list = [1,2,3] ,推导类型为list

  • 元素访问:list[1],list[-1]

  • 在 List 字面量之前添加 const 关键字,可以定义 List 类型的编译时常量:

var constantList = const [1, 2, 3];

// constantList[1] = 1; // 取消注释会引起错误。

Map

  • 定义:var map = {“key”:“value”}

  • 元素访问:map[“key”]

  • 添加元素:map[“addKey”] = “addValue”;

Set

  • 定义:元素唯一的无序集合:var set = {1,2,3,4,5,7},类型推导为:Set

函数


​ Dart 是一门真正面向对象的语言, 甚至其中的函数也是对象,并且有它的类型 Function。 这也意味着函数可以被赋值给变量或者作为参数传递给其他函数。 也可以把 Dart 类的实例当做方法来调用。

函数示例

bool isNoble(int atomicNumber) {

return _nobleGases[atomicNumber] != null;

}

//也可以省略类型声明

isNoble(atomicNumber) {

return _nobleGases[atomicNumber] != null;

}

  • 如果函数只有一行可以:

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

  • => *expr* 语法是 { return *expr*; } 的简写

函数是一等对象

  • 可以将函数作为另一个函数的参数

  • 可以将函数赋值给任意变量

可选参数

  • 命名可选参数

定义: {param1, param2, …}

void enableFlags({bool bold, bool hidden}) {…}

使用:paramName: value

enableFlags(bold: true, hidden: false);

  • 位置可选参数

定义: []

String say(String from, String msg, [String device])

使用:调用方法的时候,可选参数可以省略

say(‘Bob’, ‘Howdy’)

  • 默认参数值

使用=号来定义可选参数默认值,如果没有提供默认值,那么默认值为null

定义:

/// 设置 [bold] 和 [hidden] 标志 …

void enableFlags({bool bold = false, bool hidden = false}) {…}

使用:

// bold 值为 true; hidden 值为 false.

enableFlags(bold: true);

匿名函数

​ 多数函数是有名字的, 比如 main()printElement()。 也可以创建没有名字的函数,这种函数被称为 匿名函数, 有时候也被称为 lambda 或者 closure

​ 如果匿名函数只有一条语句同样可以使用 =>简写

​ 下面例子中定义了一个包含一个无类型参数 item 的匿名函数。 list 中的每个元素都会调用这个函数,打印元素位置和值的字符串。

var list = [‘apples’, ‘bananas’, ‘oranges’];

list.forEach((item) {

print(‘${list.indexOf(item)}: $item’);

});

闭包

​ 闭包:既一个函数对象,即使函数对象的调用在它的原始作用域之外,依然能够访问在它次法作用域内的变量

返回值

所有函数都会返回一个值。 如果没有明确指定返回值, 函数体会被隐式的添加 return null; 语句。

foo() {}

assert(foo() == null);

常用的操作符


类型判定运算符

  • as 将对象强制转换为特定类型

  • is 是否是某种类型,相当于java instanceof

  • is! 是否不是某种类型

条件表达式

  • condition ? expr1 : expr2

如果条件为 true, 执行 expr1 (并返回它的值): 否则, 执行并返回 expr2 的值。

  • expr1 ?? expr2

如果 expr1 是 non-null, 返回 expr1 的值; 否则, 执行并返回 expr2 的值。

级联运算符 (…)

​ 级联运算符 (..) 可以实现对同一个对像进行一系列的操作。

非空调用

​ 如:a?.b 相当于 a == null ? null : a.b

三目赋值运算符

​ 如:a ??= b 相当于 a = a == null ? b : a

整除

​ 如:a ~/ b 等价于 (a /b) as int

控制流程语句


if and else

//和 JavaScript 不同, Dart 的判断条件必须是布尔值,不能是其他类型

if (isRaining()) {

you.bringRainCoat();

} else if (isSnowing()) {

you.wearJacket();

} else {

car.putTopDown();

}

for loops

//方式一var message = StringBuffer(‘Dart is fun’);for (var i = 0; i < 5; i++) { message.write(‘!’);}//方式二candidates.forEach((candidate) => candidate.interview());//方式三var collection = [0, 1, 2];for (var x in collection) { print(x); // 0 1 2}

while and do-while loops

while (!isDone()) { doSomething();}

do { printLine();} while (!atEndOfPage());

break and continue

  • Break:停止循环

  • Continue: 跳转到下一次迭代

switch and case

​ 在 Dart 中 switch 语句使用 == 比较整数,字符串,或者编译时常量。 比较的对象必须都是同一个类的实例(并且不可以是子类), 类必须没有对 == 重写。 枚举类型 可以用于 switch 语句。

  • case 语句中,每个非空的 case 语句结尾需要跟一个 break 语句

assert

  • 如果 assert 语句中的布尔条件为 false , 那么正常的程序执行流程会被中断。

  • assert 语句只在开发环境中有效, 在生产环境是无效的; Flutter 中的 assert 只在 debug 模式 中有效。

异常


​ Dart 代码可以抛出和捕获异常。 异常表示一些未知的错误情况。 如果异常没有被捕获, 则异常会抛出, 导致抛出异常的代码终止执行。

​ Dart 提供了 ExceptionError 类型, 以及一些子类型。 当然也可以定义自己的异常类型。 但是,此外 Dart 程序可以抛出任何非 null 对象, 不仅限 Exception 和 Error 对象。

  • 也可以throw 'beason is null’抛出任意对象

throw FormatException(‘Expected at least 1 section’);throw ‘Out of llamas!’;

  • 使用On来制定类型,catch捕获,try{}on Exception catch(e){}

try { breedMoreLlamas();} on OutOfLlamasException { buyMoreLlamas();}

  • catch函数可以制定1-2个参数,第一个为异常对象,第二个为堆栈信息

try { // ···} on Exception catch (e) { print(‘Exception details:\n $e’);} catch (e, s) { print(‘Exception details:\n $e’); print(‘Stack trace:\n $s’);}

  • 不管是否抛出异常, finally 中的代码都会被执行。 如果 catch 没有匹配到异常, 异常会在 finally 执行完成后,再次被抛出:


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

最后

我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!
以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。

字节高级Android经典面试题和答案


网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


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

最后

我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!
以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。

字节高级Android经典面试题和答案

[外链图片转存中…(img-5YXa3WL8-1714985291466)]
[外链图片转存中…(img-6IZLpukE-1714985291466)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值