メソッドとselfパラメーター
構造体に振る舞いを追加します。
「メソッドとselfパラメーター」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
データと振る舞い
structにはフィールド以外も含められます。内部にメソッドを宣言できます。メソッドは、それが属するデータを操作する関数です。
関数を内部に置く
struct本体の中に通常のfnを書きます。すると型の名前空間に属し、Type.nameとして呼び出せるようになります。
const Point = struct {
x: i32,
y: i32,
fn origin() Point {
return Point{ .x = 0, .y = 0 };
}
};selfパラメーター
インスタンスを操作するメソッドは、最初のパラメーターとして値を受け取ります。慣例的に、このパラメーターはselfと名付けます。
fn magnitude(self: Point) i32 {
return self.x + self.y;
}ドットで呼び出す
インスタンスのドットを通じてメソッドを呼び出します。Zigがインスタンスをselfとして自動的に渡します。
const p = Point{ .x = 3, .y = 4 };
const m = p.magnitude();selfは単なる引数
隠れた魔法はありません。ドット呼び出しp.magnitude()は、Point.magnitude(p)とまったく同じです。
const m = Point.magnitude(p);値でselfを読み取る
selfを値で受け取ると、コピーが渡されます。フィールドの読み取りには問題ありませんが、コピーへの変更は反映されません。
fn sum(self: Point) i32 {
return self.x + self.y;
}変更にはポインターが必要
フィールドを変更するには、selfを*Pointによるポインターとして受け取ります。これで書き込みがコピーではなく元のインスタンスに反映されます。
fn moveRight(self: *Point) void {
self.x += 1;
}呼び出し時の自動参照
メソッドが*Pointを必要とすると、Zigは変数のアドレスを自動的に渡します。記述するのはp.moveRight()のままで構いません。
var p = Point{ .x = 0, .y = 0 };
p.moveRight();@Thisで型を参照する
本体の内部では、@This()を使って外側の型を参照できます。まだ外側の名前がない型で便利です。
const Counter = struct {
n: i32,
fn get(self: @This()) i32 {
return self.n;
}
};selfなしのメソッド
メソッドはselfをまったく受け取らなくても構いません。コンストラクターやヘルパーでは省略し、通常の名前空間付き関数として動作させることがよくあります。
fn init(x: i32, y: i32) Point {
return Point{ .x = x, .y = y };
}メソッドで整理する
データの近くに振る舞いをまとめると、コードを整然と保てます。メソッドを使うと、structが小さく自己完結したコンポーネントのように読めます。
確認問題
インスタンスのフィールドを変更するには、メソッドに何が必要ですか?
まとめ
メソッドを追加しました。メソッドはstructの内部にある関数で、selfがインスタンスを表します。読み取りにはself: Point、変更にはself: *Pointを使います。🔧
AI チューターと学ぶ Zig — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「メソッドとselfパラメーター」レッスンは無料ですか?
はい。「メソッドとselfパラメーター」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「メソッドとselfパラメーター」で何を学びますか?
構造体に振る舞いを追加します。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「メソッドとselfパラメーター」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 構造体とフィールドを宣言する
- メソッドとselfパラメーター
- フィールドのデフォルト値
- 匿名構造体とタプル