Bùi Hải Nam Help

So sánh giữ Dart và Swift

Dart và Swift là hai ngôn ngữ lập trình yêu thích của tôi, và bài viết này tôi sẽ só sánh điểm giống và khác nhau giữa Dart và Swift nhằm múc đích:

  • Chỉ ra chi tiết các điểm khác biệt giữa 2 ngôn ngữ

  • Để cho các bạn có thể chuyển từ ngôn ngữ này sang ngôn ngữ khác (hoặc sử dụng cả hai).

Một số đinh nghĩa

  • Dart thường được dùng cho Flutter (Một Framework của Google để xây dựng các ứng dụng native tuyệt đẹp chỉ bằng 1 mã duy nhất)

  • Swift thường được dùng cho SDK của Apple để phát triển các ưng dụng trên IOS, macOS, tvOS và watchOS.

Các so sánh sau đây được thực hiện trên các tính năng chính của cả hai ngôn ngữ (từ Dart 2.1 và Swift 4.2) Khi có các phần liên quan đến từng tính năng chuyên sâu nằm ngoài phạm vi của bài viết này, tôi sẽ đính kèm các tài liệu tham khảo để các bạn có thể đọc thêm.

  1. Bảng so sánh

Table comparison dart vs swift
  1. Variables

Variable declaration

Dart:

String name; int age; double height;

Switf:

var name = 'Andrea'; var age = 34; var height = 1.84;

Variable initialization

Dart:

var name = 'Andrea'; var age = 34; var height = 1.84;

Switf:

var name = "Andrea" var age = 34 var height = 1.84
  1. Type inference

Type inference

Có thể được viết như này trong Dart:

var arguments = {'argA': 'hello', 'argB': 42}; // Map<String, Object>

Và kiểu của arguments sẽ tự động được định nghĩa bở compiler.

Trong Swift được viết tưng tự:

var arguments = [ "argA": "hello", "argB": 42 ] // [ String : Any ]

Một số chi tiết

Dart documentation:

Và của Swift:

Dynamic types

Một variable có thể là bất kỳ kiểu dữ liệu nào khi được khai báo với từ khóa dynamic với Dart và Any đối với Switf

Kiểu Dynamic thường được dùng khi đọc data từ SON

  1. Mutable / immutable variables

Variables có thể được khai báo là mutable hoặc immutable.

Mutable

Khi khai báo variables kiểu Mutable, thì cả hai ngôn ngữ đều sử dụng từ khóa var

Dart

var a = 10; // int a = 20; // ok

Swift

var a = 10 // Int a = 20 // ok

Immutable

Khi khai báo variables kiểu Immutable, Dart sử dụng final, và Swift sử dụng let.

Dart

final a = 10; a = 20; // 'a': a final variable, can only be set once.

Swift

let a = 10 a = 20 // Cannot assign to value: 'a' is a 'let' constant

Trong Dart documentation có định nghĩa hai từ khóa, finalcost, hoạt động như sau:

Và được giải thích kỹ hơn trong bài viết trên website của Dart

Sử dụng final để định nghĩa Immutable variables trong Dart

Trong Swift, chúng được định nghĩa constants với từ khóa let

let constant name: type = expression

Đọc thêm: Swift Declarations

  1. Functions

Functions là first-class citizens trong Swift và Dart

Điều này có nghĩa là giống như các objecs, functions có thể truyền dưới dạng arguments và được lưu dưới dạng properties hoặc kết quả trả về.

Bước đầu so sánh, chúng ta sẽ khởi tạo các functions không có arguments.

Trong Dart, các kiểu trả về được đặt trước tên của method:

void foo(); int bar();

Trong Swift, chúng ta sử dụng -> T làm ký hiệu hậu tố. Điều này không bắt buộc nếu nó trả về giá trị void:

func foo() func bar() -> Int

Đọc thêm:

  1. Named và un-named parameters

Cả hai ngôn ngữ đều hỗ trợ namedun-named parameters

Named

Trong Dart, chúng ta định nghĩa named parameters trong dấu ({}):

void foo({String name, int age, double height}); foo(name: 'Andrea', age: 34, height: 1.84);

Trong Swift, named parameters là mặc định:

func foo(name: String, age: Int, height: Double) foo(name: "Andrea", age: 34, height: 1.84)

Un-named

Trong Dart, chúng ta định nghĩa un-named parameters bằng cách bỏ dấu ({}):

void foo(String name, int age, double height); foo('Andrea', 34, 1.84);

Trong Swift, chúng ta định nghĩa un-named parameters bằng cách sử dụng dấu (_):

func foo(_ name: String, _ age: Int, _ height: Double) foo("Andrea", 34, 1.84)

Đọc thêm: Function Argument Labels and Parameter Names trong Swift.

  1. Optional và default parameters

Cả hai ngôn ngữ đều hỗ trợ default parameters

func foo(name: String, age: Int = 0, height: Double = 0.0) foo(name: "Andrea", age: 34) // name: "Andrea", age: 34, height: 0.0

Đọc thêm: - Default Parameter Values trong Swift.

Trong Dart, optional parameters có thể là positional hoặc named, nhưng không thể là cả 2.

// positional optional parameters void foo(String name, [int age = 0, double height = 0.0]); foo('Andrea', 34); // name: 'Andrea', age: 34, height: 0.0 // named optional parameters void foo({String name, int age = 0, double height = 0.0}); foo(name: 'Andrea', age: 34); // name: 'Andrea', age: 34, height: 0.0

Đọc thêm: Optional parameters trong Dart.

  1. Closures

Là first-class objecs, functions có thể được chuyền dưới dạng arguments cho các functions khác, hoặc gán cho các variables.

Last modified: 16 February 2024