《The C programming language》读书笔记

虽然以前大学学的第一门编程语言是C,但年代久远难免忘得差不多了,这2天抽时间读了遍《The C programming language》,以Java程序员的视角提炼了一下几个要注意的点:

  1. 函数体如果定义在调用者后,需要使用函数原型声明,并且函数原型中只需要参数类型,参数名是可以省略的。
  2. 外部变量必须在所有函数外部定义,且只能定义一次,使用时使用extern语句显示指明。
  3. 枚举enum第一个枚举名的值为0,第二个为1等等。如果不是所有值都指定了,那么未指定名字的值依着最后一个指定值向后递增。
  4. C语言具有指向函数的指针,如下函数原型声明例子所示:void qsort(void *lineptr[], int left, int right, int (*comp)(void *, void *));
  5. C提供一个类型定义(typedef)功能,用来建立新的数据类型的名字。例如语句:typedef int Length;使得名字Length成为int的同义词。
  6. 联合(union)也是一种结构,只不过是其所有成员相对于基地址的偏移量为0,结构空间要大到能容纳“最宽”的成员,并且对齐方式适合于联合中的所有成员。一个联合只能用它第一个成员类型的值来初始化。

Flutter混编:在Android原生中混编Flutter

直到写这篇文章的时候(2018.11.15),通过网上已有的资料可以知道Flutter目前在与原生代码的混编这一块基本还处于不可用的状态,切换的时候还会黑一下屏,性能比较差,但是这个问题随着Flutter的发展未来是肯定可以解决的,所以目前还在Flutter探索道路一起前行的小伙伴没必要“闻混色变”。

阅读更多
Flutter实战:Flutter中的两个StateWidget及常用UI控件

这篇文章旨在带领读者从对Flutter的布局方式找不着北到基本分辨出东南西北,至于导航到具体到哪一点该怎么走就得看你们的悟性了哇哈哈哈哈哈哈。

StatelessWidget和StatefulWidget

StatelessWidget和StatefulWidget是Flutter中比较重要的两个控件父类。
StatelessWidget是无状态控件,在构建的时候就已经决定了最终形态。
StatefulWidget是有状态控件,在构建的时候不是它最终的形态,而是可以随着绑定的数据等变更而在生命周期内进行变化。

简单对比StatelessWidget与StatefulWidget初始化及数据改变流程如下表所示

StatelessWidget StatefulWidget
接收外部传入的数据,执行控件build方法,只有在外部传入的数据不同的时候UI才会显示不一样 接收外部传入的数据,执行控件build方法和状态初始化方法,当传入的数据不同或者绑定的数据改变时UI才会重新渲染
阅读更多
Flutter实战:用纯Flutter编写一个《日报》

这篇文章开始用实战的方式来介绍Flutter。
我们来使用纯Flutter编写一个《日报》。
如果还没有Dart基础的可以先通过前面文章了解。

特别感谢

知乎日报API

声明

以下项目API由知乎提供,本人仅用于学习研究用,如有不当之处请告知本人,本人立即处理此文章。若被告知需停止共享与使用,本人会及时删除此文章。请您了解相关情况,并遵守知乎协议。

阅读更多
Flutter基础:通过HTTP请求了解async和await

任何语言都不会少网络编程这块,而谈及网络编程就肯定避免不了异步操作。所以在梳理async和await的知识的时候,就从简单的Http请求来了解这两个关键字的作用。

引入网络请求库

Dart里面,自带HttpClient网络框架,作为Android开发者说实话刚听到这个框架估计要吃惊一下,因为连Android官方都抛弃它了,但其实彼HttpClient非此HttpClient,请你放下屠刀。。。哦不放下成见,先了解一下它哇哈哈哈哈。

HttpClient位于dart.io包中,dart.io包含了文件操作、Socket、HTTP和I/O操作一系列的工具。

另外,目前还有目前比较流行的dio网络请求框架,它支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传、文件下载等,但这篇文章只是介绍基本的网络请求使用,后续系列文章的实战环节会使用这个dio框架。

阅读更多
Flutter基础:Dart编程语言——库的使用

前面介绍Dart基础知识的时候基本上都是在一个文件里面编写Dart代码的,但实际开发中不可能这么写,模块化很重要,所以这就需要使用到库的概念。

在Dart中,库的使用时通过import关键字引入的。

library指令可以创建一个库,每个Dart app都是一个库,即使没有使用library指令来指定。

本文将介绍如何使用一个库。

阅读更多
Flutter基础:理解Dart的Mixin继承机制

Dart语言集合了现代编程语言的众多优点,Mixin继承机制也是其一。但针对Java程序员来说,可能不是一下子能理解的,比如我第一次看到的时候,也迷迷糊糊了半天——这是啥玩意???

要说Mixin,可能写成MixIn会更好理解,翻译回来就是混入,当然你执意说这是一种“迷信”继承机制,那也没辙。

下面将从一个实际情景入手,对比Java和Dart的实现,以便更好理解Dart的mixin。

阅读更多
Flutter基础:Dart编程语言——类

Dart作为一门面向对象的编程语言,类充当了一个非常重要的角色。
前面文章也提到过,Dart中一切皆为对象,而每个对象都是一个类的实例,所有的类都继承于Object
而Dart的继承使用了Mixin机制,不过这个机制将不在这篇文章中展开将,而是放到下一篇专门讲解。

阅读更多
Flutter基础:Dart编程语言——操作符、流程控制和异常

操作符

Dart的操作符与其它语言大同小异,这里不做一一介绍,只挑出几个需要注意的来解释下。

除与整除

在“除”这件事上,Dart涉及到两个操作符,分别如下:

操作符 说明
/ 除号
~/ 除号,但是返回值为整数
阅读更多
Flutter基础:Dart编程语言——方法

方法

关于Functions的称呼为“方法”还是“函数”,这么多年也一直是程序员喜欢没事就瞎扯的话题。在我习惯里面向对象的语言习惯性将它称为“方法”。

Dart是一个真正的面向对象的编程语言,方法在Dart里面也会被视为对象,并且Dart赋予了它一种类型——Function。
因为是一个对象的存在,所以方法可以赋值给变量。

阅读更多