TypeScript/JavaScript のレンズを通して理解する

DDD
リリース: 2024-10-26 05:29:02
オリジナル
707 人が閲覧しました

Understanding Go through the Lens of TypeScript/JavaScript

TypeScript/JavaScript のバックグラウンドを持っていて Go に飛び込む場合は、学習をスピードアップするために 2 つの言語間の類似点を描くと役立つ場合があります。これらは多くの点で根本的に異なります (Go は静的に型付けされ、コンパイルされる言語であり、TypeScript/JavaScript は動的に型付けされ、解釈またはトランスパイルされる言語です) が、Go をより直感的にするのに役立つ便利な類似点がいくつかあります。

1. Go の構造体 ≈ TypeScript の型

TypeScript では、オブジェクトの形状を記述するための型とインターフェイスを定義します。同様に、Go にはカスタム型の定義に使用される構造体があります。 TypeScript の型またはインターフェイスに異なるプロパティを含めることができるのと同様に、構造体には異なる型のフィールドを含めることができます。

TypeScript:

type Book = {
  title: string;
  pages: number;
  read(): void;
}
ログイン後にコピー
ログイン後にコピー

行きます:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

どちらの場合も、オブジェクトの構造を定義します。ただし、Go の構造体はより厳密であり、インターフェイスとクラスの継承によるより動的な動作を可能にする TypeScript とは異なり、継承をサポートしません。

2. Go のメソッド: レシーバー ≈ JavaScript のプロトタイプ

JavaScript では、オブジェクトのプロトタイプにメソッドを定義すると、そのメソッドはそのオブジェクトのインスタンスに関連付けられます。 Go は、特定の構造体に関連付けられた レシーバー関数 で同様の概念を使用します。これは、JavaScript でプロトタイプを介して関数がオブジェクトに付加される方法と似ています。

JavaScript:

function Book(title, pages) {
    this.title = title;
    this.pages = pages;
}

Book.prototype.read = function() {
    console.log("Reading", this.title);
}
ログイン後にコピー
ログイン後にコピー

行きます:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Go では、Read メソッドにはレシーバー (b Book) があり、JavaScript でメソッドがプロトタイプに関連付けられるのと同じように機能します。これにより、オブジェクトのインスタンス (ここでは b) が提供され、フィールドにアクセスしてメソッドを使用できるようになります。

3. TypeScript の let、var、const ≈ Go の変数宣言

Go で変数を宣言する方法は、JavaScript の let、var、const を思い出させます。 Go では、TypeScript と同様に、変数は var で宣言され、定数は const で宣言されます。

TypeScript:

let name: string = "TypeScript";
const maxItems: number = 100;
ログイン後にコピー
ログイン後にコピー

行きます:

var name string = "Go"
const maxItems int = 100
ログイン後にコピー
ログイン後にコピー

Go の := 省略表現は、変数を迅速に宣言できるという点で、JavaScript の let に似ています。

type Book = {
  title: string;
  pages: number;
  read(): void;
}
ログイン後にコピー
ログイン後にコピー

Go では、JavaScript のような let と const の区別はありません。デフォルトでは、Go のすべての変数は var で宣言された場合に変更可能です。つまり、それらの値は後で変更できます。 Go で変数を不変にしたい場合は、明示的に const キーワードを使用する必要があります。可変変数には let 、不変変数には const の両方がある JavaScript とは異なり、Go では、const として宣言しない限り、すべてが可変です。

4. Go インターフェイス ≈ TypeScript インターフェイス (相違点あり)

TypeScript インターフェイスはオブジェクトの形状を定義し、Go インターフェイスは動作 (つまり、オブジェクトが持つ必要があるメソッドのセット) を定義します。 Go では、オブジェクトは必要なメソッドをすべて持つことによって暗黙的にインターフェイスを「実装」します。これは、TypeScript の明示的な実装とは対照的です。

TypeScript:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

行きます:

function Book(title, pages) {
    this.title = title;
    this.pages = pages;
}

Book.prototype.read = function() {
    console.log("Reading", this.title);
}
ログイン後にコピー
ログイン後にコピー

Go では、Read メソッドを実装する型は、明示的に宣言していなくても、Reader インターフェイスを実装しているとみなされます。

5. Go でのエラー処理 ≈ JavaScript での Try-Catch (ただし異なります)

Go でのエラー処理は、JavaScript の try-catch とは大きく異なります。 Go では、エラー処理は戻り値を使用して明示的に行われますが、JavaScript では例外が使用されます。

JavaScript:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

行きます:

let name: string = "TypeScript";
const maxItems: number = 100;
ログイン後にコピー
ログイン後にコピー

Go では、エラーは関数から返されるため、明示的にチェックする必要があります。これにより、制御フローがより予測可能になりますが、JavaScript の try-catch メカニズムと比較して手動によるエラー処理が必要になります。

6. Go のパッケージ システム ≈ TypeScript の ES モジュール

TypeScript では、他の機能部分をインポート/エクスポートできるモジュールにコードを編成します。 Go には同様のパッケージ システムがあり、各ファイルはパッケージの一部であり、パッケージは他のパッケージから機能をインポートできます。

TypeScript:

var name string = "Go"
const maxItems int = 100
ログイン後にコピー
ログイン後にコピー

行きます:

name := "Go" // type inference, like in TypeScript
ログイン後にコピー

Go では、メイン ファイルが ES モジュールを使用する TypeScript プロジェクトのエントリ ポイントとして機能するのと同様に、パッケージ main はアプリケーションのエントリ ポイントです。

7. Go の同時実行性: ゴルーチン ≈ 非同期プログラミング

async/await と Promise を使用した JavaScript の非同期プログラミングは、Go のゴルーチンにいくらか似ているように感じます。 Goroutine を使用すると関数を同時に実行できるため、Go の同時実行モデルが非常に強力になります。

JavaScript:

interface Reader {
  read(): void;
}

class Book implements Reader {
  read() {
    console.log("Reading a book");
  }
}
ログイン後にコピー

行きます:

type Reader interface {
    Read()
}

type Book struct {
    Title string
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}
ログイン後にコピー

Go のゴルーチンを使用すると、go キーワードと同時に関数を起動できますが、TypeScript は async/await と Promise を通じてこれを実現します。

結論

TypeScript/JavaScript から Go への切り替えは、最初は気が遠くなるように思えるかもしれませんが、これらの比較を行うと、移行をよりスムーズに行うことができます。 Go のより厳密な型システム、明示的なインターフェイス、同時実行モデルを理解することで、やりがいのあるものになります。 Go のより明示的で構造化された性質を理解すれば、堅牢なシステムを構築する際のそのパフォーマンスと信頼性を理解できるでしょう。

以上がTypeScript/JavaScript のレンズを通して理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!