C#、TS和Dart对比1:概述和目录

一、为什么要三门语言一起学?

  • 多门语言一起学习,有利于提升语言学习的触类旁通能力。现代开发语言非常丰富,很多应用场景或问题的解决,需要多种语言配合,有了触类旁通的学习能力,当需要接触一门新语言时,上手会比较快。另外,由于不同语言的相似性,多种语言开发时,会经常短路错位,这里也算是一个快速查询的目录。

 

二、为什么选了C#、TS和Dart?

  • 完全基于实用主义。作为个人开发者和小微团队,基本上都需要全栈开发。而基于C#的.NET是后端的最优选之一,而前端框架使用过Blazor、WPF/MAUI、Vue、Flutter和小程序,所以选了C#、TS和Dart。

 

三、简单说一下C#、TS和Dart这三门语言?

  • C#是完全面向对象的强类型语言,对标的语言是Java,无论语法还是底层原理,都非常相似。性能以及语法特性上,C#是能够胜过Java的,但在使用的广泛度上,C#明显要弱于Java,尤其是在国内。两者都主要用于后端开发,但也都有涉及前端。而C#的前端框架非常丰富,包括MVC、Blazor、winform、WPF、MAUI等。
  • TS是JS的超级。TS在JS原型对象的基础上,扩展了静态类型、类、接口、泛型、联合类型等功能,使JS在开发环节具备了完全面向对象语言的特性,非常有利于构建大型应用。但在运行时,仍然是通过编译器将TS转译为JS执行,本质上还是JS。现代前端UI框架,如Vue、React等,都已全面转向TS(javascript的后端框架nodejs,也已支持TS)。
  • Dart结合了面向对象语言(如C#/Java)和JS的特性,如静态类型、类、接口(使用抽象类实现)、泛型等,接近于C#/Java;而变量和函数又都是顶级成员(可以在类以外的全局定义和使用),接近于JS。同时,Dart支持JIT和AOT两种编译模式,在开发阶段使用JIT,能有效提升开发效率(编译速度和热重载),而在部署阶段,通过AOT编译为目标平台的机器码,有dart2native(原生平台)和dart2js(javascript)两种方式。可以说,Dart兼顾了开发效率和运行性能。Dart目前主要用于Flutter跨平台前端UI框架,早期Dart作为JS的替代者出现,但现在可以说,它就是为Flutter而生的一门语言。

 

四、一些基本概念的命名规范。三种语言对类似概念有不同的命名,对类似概念统一命名,将有助于多语言的学习和使用

1、在全局作用域中(仅TS和Dart):

  • TS和Dart存在全局作用域。但是,C#不存在全局作用域,所有数据都必须在类中定义和使用。
  • 在全局作用域中,定义的变量,称之为全局变量;定义的常量,称之为全局常量 ;定义的函数,称之为函数。 

2、在类中(C#、TS、Dart):

  • 属性:在类中定义的变量或常量,称之为属性。我们知道在C#中,会称之为字段,但之后统一称之为属性。对于变量和常量的区别,可以变量属性常量属性加以区分。
  • 方法:在类中定义的函数,称之为方法。
  • 构造方法:在类中定义的特殊函数,在实例化对象时自动调用,主要用于属性的初始化。在C#中还存在一个析构方法,非常少使用,不会介绍。
  • 属性存取器:通过定义getter和setter方法,对私有属性进行读取和修改。我们知道在C#中,会称之为属性,虽然有非常方便的语法糖,实质还是“私有属性+存取器”的组合,之后统一称之为属性存取器。 

3、在函数/方法的局部作用域中(C#、TS、Dart): 

  • 函数/方法通过{}符,划分出局部作用域
  • 在局部作用域中,定义的变量,称之为局部变量;定义的常量,称之为局部常量
  • 函数/方法的参数是比较特殊的变量,定义时称之为形参,调用时称之为实参。 

4、在TS对象中(仅TS)(不是与实例相对应的那个“对象”概念,所以称之为“TS对象”加以区分):

  • TS中存在特殊的对象数据类型,以{key1:value1,key2:value2......}形式表示。
  • TS对象中的变量成员,称之为对象属性
  • TS对象中的函数成员,称之为对象方法

5、函数变量

  • TS和Dart中,函数也是一种数据类型,所以可以直接作为函数的参数。
  • C#中,要实现类似功能,需要使用委托。委托与类是同一层级的概念,需要先定义委托类型,然后再定义委托变量,但绝大多数情况下,我们使用C#为我们提前定义好的泛型委托Action和Func来创建委托变量。
  • 从实用主义出发,之后在TS、Dart、C#中,当我们定义一个函数类型的变量时,统一称之为函数变量。其实,如果你从TS/Dart的角度去理解委托,会更简单;从C#本身的语言特征去理解,反而复杂了。

 

五、会有深入原理性的内容吗?

  • 比较少。一是怕讲不好;二是我认为掌握了使用,原理层面的东西大概就知道七七八八了,而剩下的20%,通过看不同的文章和案例,以及日后实际开发过程中,接触到不同的开发框架时,会一下顿悟。

 

六、会有全面的知识点吗?

  • 不会。一是对于同一个功能有多种表达的情况,可能只会根据自己的习惯,提供一种表达方式;二是会追求尽量简洁的表达,能用代码表达的,就不用文字;三是这里不是文档的重复。

 

七、使用什么学习环境?统一使用Visual Studio Code

  • C#:①安装.NET SDK,如果已安装Visual Studio,则不需要再安装SDK,在命令行的任意目录下,输入【dotnet -h】命令验证是否安装成功;②运行vscode,安装C#、C# Extensions插件;③终端输入【dotnet new console】命令,初始化一个控制台项目。入口文件为Program.cs,如果使用了顶级语句,建议改回显式的Program类和Main方法;④终端输入【dotnet run】命令,运行项目。
  • TS:①安装node.js(登陆官网下载nodejs.org);②运行vscode,打开终端,输入【npm config set registry https://registry.npm.taobao.org】命令,设置npm镜像;③继续在终端中,输入【cnpm install -g typescript】命令,全局安装typescript;④继续在终端中,输入【tsc --init】,生成typescript配置文件tsconfig.json,终端再输入【tsc --watch】命令;⑤新建index.ts,保存后会自动转译一个index.js文件,如未自动保存,可执行【tsc index.ts】命令;⑥在终端中,输入【node index.js】命令,运行项目。
  • Dart:①安装Dart SDK,使用命令行或者下载Dart for Windows安装包,安装完后,在命令行的任意目录下,输入“dart --version”;②运行vscode,安装dart、Code Runner插件;③创建index.dart文件(文件名可随意),输入入口函数【void main(){}】;④右击run code(或者Ctrl+alt+N快捷键)运行,或者终端输入【dart run index.dart】命令运行。
  • PS1:VSCode的常规操作,如打开项目、新建文件夹、新建文件、打开终端命令行等操作,自行查阅相关文档。
  • PS2:如果在VSCode终端,执行tsc等命令出错,有可能是执行策略的设置问题。以管理员身份打开Windows PowerShell,执行【set-ExecutionPolicy RemoteSigned】命令,选择Y。
  • 效果如下:

 

 

**********七、目录**********

1 概述和目录

变量和作用域

3 编译时常量和运行时常量

4 类型

4.1 类型概述

4.2 基本类型:数值

4.3 基本类型:布尔

4.4 基本类型:字符/字符串

4.5 集合类型:列表类(Array、List、Set、Tuple)

4.6 集合类型:键值对类(Dictionary、Map、object)

4.7 枚举类型

4.8 特殊类型

4.9 TS对类型的扩展(类型别名、联合类型、交叉类型)

5 函数/方法

5.1 函数的声明和调用

5.2 函数的返回值

5.3 函数的参数

5.4 闭包和委托捕获

5.5 扩展方法

5.6 函数变量和委托

5.7 函数指针

6 表达式、运算符和语句

6.1 表达式和字面量

6.2 运算符

6.3 特殊运算符

6.4 运算符重载

6.5 判断和循环语句

7 类基础

7.1 类的声明和使用

7.2 类的成员-属性

7.3 类的成员-方法

7.4 访问修饰符

7.5 构造函数

7.6 静态成员和实例成员

7.7 嵌套类和部分类

7.8 结构体

8 类高级

9 接口

10 泛型

11 异步

12 事件

13 常用类库

13.1 日期

13.2 RegExp

13.3 JSON

13.4 迭代集合

13.5 文件操作

13.6 Web请求

14 其它

14.1 类型转换

14.2 多维数组

14.3 异常处理

14.4 反射特性-C#

14.5 装饰器-TS

14.6 元数据-Dart

14.7 索引器-C#

14.8 协变和逆变-C#

14.9 原型链-TS

14.10 并发isolate-Dart

......

 

posted @ 2023-01-11 16:41  functionMC  阅读(1360)  评论(0编辑  收藏  举报