現在のコンピューター サイエンスの分野は、絶えず発展し、革新されています。プログラミング言語に関しては、JavaやCなど、かつて一般的だったオブジェクト指向プログラミング言語は、現在では新しいプログラミング言語に取って代わられています。中でも開発者に広く愛されているGolangは、従来のオブジェクト指向プログラミングモデルをサポートしていない言語です。この記事では、Golang に「クラス」がない理由と、同様のプログラミング モデルを他の方法で実装する方法について説明します。
Golang のクラスを削除する設計は、従来のオブジェクト指向言語設計に対抗する試みです。従来のオブジェクト指向言語では、クラスはプロパティとメソッドを含む固定プログラム構造です。したがって、オブジェクト指向プログラミング (OOP、オブジェクト指向プログラミング) をサポートするシステムを設計する場合、通常はオブジェクト指向クラスを扱う必要があります。
ただし、Golang は単なるオブジェクト指向言語の機能を備えたプログラミング言語ではなく、プロセス指向とオブジェクト指向の両方のプログラミング パラダイムを含む汎用言語になることを目標としています。したがって、Golang には次のような非常に便利なプログラミング機能がいくつかあります。
Golang では、Java や C などの従来のオブジェクト指向言語とは異なり、クラスがありません。代わりに、カスタム タイプである「構造体」が使用されます。構造体を通じて、変数を整理してパッケージ化し、メソッドを使用してこれらの構造体を操作できます。
たとえば、次は単純な構造定義です:
type Person struct { name string age int }
Person 構造の作成例:
p1 := Person{name: "John", age: 26}
構造のメソッドを呼び出します:
p1.hello() //在Person结构中定义的方法
構造を通じて、オブジェクト指向プログラミング言語での固定クラスの使用を必要とせずに、クラスのような操作を簡単に実装できます。
Golang のメソッドは、構造体を操作できる関数です。構造型を通じてメソッドを定義することにより、従来のオブジェクト指向言語のようにメソッドをクラスにバインドするのではなく、変数をメソッドにバインドできます。メソッドを使用して、構造を操作し、それらに対して操作を実行できます。
たとえば、上の例で定義された person 構造の場合、挨拶メソッドを定義できます。
func (p Person) hello() { fmt.Printf("My name is %s, I'm %d years old.\n", p.name, p.age) }
上の例のメソッドは、構造上で直接定義されていますが、これは少し複雑です。プログラミングにおけるオブジェクト指向の「メンバーメソッド」のようなものです。 Golang では、通常、構造体のメソッドは構造体の定義ファイルで定義されますが、定義ファイルは必須ではありません。
Golang では、インターフェイスはカスタム タイプです。インターフェイスはメソッドのセットのシグネチャを定義し、型が必要なメソッドをすべて定義している場合、その型はインターフェイスを実装しているとみなされます。インターフェイスを持つ型は、インターフェイスで置き換えて、同じメソッドのセットで定義できます。
インターフェースは Golang の非常に重要な概念であり、プログラムのモジュール間の関係をより透明にすることができます。開発者がモジュールのインターフェイスを提供すると、モジュールの特定の実装を実装しなくても、呼び出されたメソッドのシグネチャを保持できます。後続の開発者は、これをより豊富な実装に置き換えることができ、これはプログラムのスケーラビリティの向上に役立ちます。
Golang の関数は第一級市民であり、関数はオブジェクトであることを意味します。関数は変数に代入でき、他の関数でパラメータや戻り値として受け取ることができます。多くの人はオブジェクト指向設計を行うには関数の方が自然な方法だと考えているため、これは Golang において非常に重要な概念です。
Golang 自体にはクラスの概念がありませんが、開発者は構造とメソッドを使用してこのプログラミング モデルをシミュレートできます。このメソッドをGoでは「インスタンス」と呼びます。
たとえば、Person という名前の構造体に対してクラスのような操作を定義するとします。
type Person struct { name string age int }
次に、いくつかのメソッド (クラス メンバー関数と同様) を示します。
func (p *Person) SetName(name string) { p.name = name } func (p *Person) SetAge(age int) { p.age = age } func (p *Person) GetAge() int { return p.age }
上記の例では、Person 構造体を操作するための 3 つのメソッド、SetName、SetAge、GetAge を定義しています。構造体の元の値は、ポインター パラメーターを使用して変更できます。
以下は、Person 構造体の作成方法の例です。
p := Person{"Golang", 10}
ここで、「p」はクラスのような「インスタンス」です。
次に、関数を使用して構造体の新しいインスタンスを「作成」できます。以下に例を示します:
func NewPerson(name string, age int) *Person { p := Person{name, age} return &p }
「Newperson」関数は次のように使用でき、「Golang」インスタンスへのポインタを返します:
p := NewPerson("Golang", 10)
「インスタンス」は従来のオブジェクトとは異なりますが、プログラミング言語における「クラス」は同じですが、Golang での構造とメソッドの使用方法は、非常によく似た方法でクラスの概念をシミュレートできます。
クラスはありませんが、Golang の構造とメソッドはオブジェクト指向と手続き型プログラミング パラダイムの使用を調和させます。構造体とメソッドを使用すると、変数と操作を管理するクラスと同様のプログラミング モデルを実装できます。したがって、Golang はクラスがなくてもこれらの非常に便利な言語機能を使用できるため、高速かつ柔軟で強力な Web 開発言語となります。
以上がGolang に「クラス」がない理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。