普通视图

Dart 语法要点(3) —— 类和对象

2025年9月20日 11:58

Dart 是一种面向对象的编程语言,支持类和基于混入(Mixin)的继承机制。在 Dart 中除 Null 以外的所有类都继承自 Object 类。

1. 基本用法

Dart 中类的基本用法和大部分面向对象语言差不多,这里不作详细介绍,直接从一个简单的示例开始:

// 导入依赖库
import 'dart:math';

class Point {
  // 成员变量
  double? x;    // 默认值初始值为null
  double y = 0; // 初始值为0

  // 构造函数
  Point(double x, double y) {
    this.x = x;
    this.y = y;
  }

  //成员方法
  double distanceTo(Point other) {
    double dx = (this.x ?? 0) - (other.x ?? 0);
    var dy = this.y - other.y;
    return sqrt(dx * dx + dy * dy);
  }

  // 静态方法
  static double distanceBetween(Point a, Point b) {
    return a.distanceTo(b);
  }

  // 重写toString方法
  @override
  String toString() {
    return 'Point($x, $y)';
  }
}

调用也很简单,代码如下:

void main() {
  Point p1 = new Point(0, 0); 
  Point p2 = new Point(3, 4);
  print(p1.distanceTo(p2));             // 5.0
  print(Point.distanceBetween(p1, p2)); // 5.0
  print(p1);                            // Point(0.0, 0.0)
  print(p2);                            // Point(3.0, 4.0)
  print(p2.y);                          // 4.0
}

单看上述代码,几乎分不清究竟是 JavaScriptJava, 还是 Dart,下文主要介绍一些 Dart 相对独特的地方。

[...]

Dart 语法要点(2) —— 函数

2025年9月15日 16:51

下面是一个简单的函数示例:

bool isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

虽然 返回值类型参数类型 都可以省略,但建议加上,省略后的代码如下:

isNoble(atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

如果函数体 只有一条语句,也可以使用 箭头函数

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

其中,=> expr; 语法就是 { return expr; } 的简写形式,与其它语言不同,如果函数体有多条语句,就不能使用这种语法了。

[...]

Dart 语法要点(1) —— 注释、变量、常量、数据类型

2025年9月14日 14:56

1. 注释

  • 单行注释:以两个斜杠(//)开头,持续到行尾。
  • 多行注释:以 /* 开头,以 */ 结尾,可以跨越多行。
  • 文档注释:以 ////** 开头,用于为代码生成文档,在文档注释中使用[](如 [Food][feed]),生成文档时,会转换为指向类、方法、变量等的超链接。

2. 变量

以下是变量声明和初始化的示例:

var name = 'Bob';

Dart 是强类型语言,示例中,name 变量的类型会在编译时被推断为 String,也可在声明时显式指定类型,对于局部变量,建议使用 var。如果对象不限于单一类型,可以在声明时指定为 Objectdynamic 类型。

[...]

Dart 开发环境搭建

2025年9月12日 11:44

Dart 介绍

Dart 是一种由 Google 开发的开源编程语言,于 2011 年首次发布,目前稳定版本为 Dart 3.x,曾经号称要取代 JavaScript,但过去的几年中一直不温不火,真正使其声名大噪并得到广泛应用的原因是其与 Flutter 框架的完美结合。

如今,Flutter 已成为构建高性能、高质量跨平台应用(Android、IOS、Web、桌面)的首选技术方案之一,尤其是针对希望快速实现跨平台应用的中小团队或个人开发者,Flutter 更是不二之选,而学习 Flutter 的第一步就是先学习其官方编程语言 --- Dart

边学边记,这篇文章先把 Dart 的开发环境搭建起来!

[...]

上线了第一个正儿八经的多语言工具站

2025年3月25日 19:35

前言

其实在去年7月份,我就筹划搞了一个 一起学笛子 的双语网站,在它还是一个简单雏形的时候,就写了一篇名叫 又一个不务正业的作品 的文章简单介绍过一次。

前段时间终于把这个网站的基本功能都开发得差不多了,也实现了中英双语,想着随后不断地填充内容就可以了。当时的想法很简单,一方面是个人兴趣使然,另一方面是当时想着,出海最合适的就是类似工具、游戏这种语言相关性小的产品,而像技术博客这样的可能就不太行了。

那为什么第一个双语网站还没彻底搞完,就又来第二个多语言站呢?

[...]

终于收到 Google Adsense 漂洋过海邮寄过来的 PIN 码了

2025年3月13日 22:22

前言

很久很久以前,久到我都已经快忘记了,只记得那是一个夏天,我刚搭建完个人网站并尝试接入 Google AdSense ,当时还写过一篇关于 个人网站接入 Google AdSense 心得 的文章 ,今天终于收到 Google 邮寄过来的 PIN 码了。

就一张对折密封起来的纸,皱皱巴巴的很简陋,感觉还没普通信封靠谱,难怪很多过来人会说容易寄丢呢?

好在我是顺利收到了,这篇文章就简单记录一下 PIN 码的认证过程吧!

[...]

为博客网站增加一个简单的算术验证码,防止机器人垃圾评论轰炸

2025年3月12日 20:09

前言

你们的博客网站有隔三岔五就收到这么多的垃圾评论吗?

这里所说的垃圾评论专指机器人通过自动化脚本或直接调用接口发起的评论,由于评论不经过前端页面,因此并不会给网站带来任何流量。说到垃圾评论,真的是非常恶心,如果仅仅是偶尔来一两条我都所谓,大不了隔段时间集中删一次,但实在架不住它短时间内狂轰乱炸,尤其是像我这样接入了邮件通知的,一旦开始,手机就响个不停,烦得要死。

[...]

记一次Nginx Proxy Manager部署网站,访问静态资源报502的问题

2025年3月11日 15:05

前段时间想着把 一起学笛子 这个网站中的几个工具提取出来,单独开发并部署一个工具网站,这样一方面可以实现真正意义上的多语言(毕竟是纯工具),另一方面也可以扩大受众范围(工具和具体的乐曲无关)。

但在测试通过 Nginx Proxy Manager(我一直在用这个,部署管理网站很丝滑) 部署的时候,发现了一个问题:htmlphptxt甚至json文件都可以正常访问,但访问jscsspngsvg等这种静态资源文件时,却始终报 502 的错误,如下图所示:

[...]

记一次修改Typecho永久链接地址重写规则,导致网站降权的坑

2025年3月11日 13:38

众所周知,为了让网站有更好的 SEO 表现,通常情况下我们都会对网站进行伪静态处理,也就是将类似于https://example.com/index.php?p1=a&p2=b这样的网址重写成https://example.com/a/b.html的形式,让访问者使用起来感觉就像访问静态网站一样优雅。

为此,我的所有网站也都启用了地址重写功能。不仅如此,为了让文章显示出分类管理的效果,我对 一起学笛子 这个网站的配置还做了一些自以为是的调整,如下图所示:

[...]

如何基于 Typecho 实现中英双语网站(下)

2025年2月20日 16:33

前言

通过上一篇文章 如何基于 Typecho 实现中英双语网站(上),我们已经把 中英双语网站 的基本框架搭建好了。实际上很多支持多语言的网站,也就这样了,例如著名的 YouTube 就是如此,至于具体的内容显示什么语言,则完全是由内容的创作者决定的。

上一篇文章也提到了,Typecho 其实并不是很适合做多语言网站,因为,一方面需要修改源码,另一方面,开发一个不同国家的人都来发布创作内容的网站,想想也不是个人应该考虑的。 Typecho 还是更适合作者自己创作,然后向用户展示的场景,这时如果要实现多语言,就不得不将文章的内容也进行翻译了。

[...]

❌