Menu
Coddy logo textTech

形状へのメソッドの追加

CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 42/73。

Lua OOPの章で学んだように、テーブルは他の値と同じように関数を保持できます。シェイプはこれらの関数フィールドも定義できます — これにより、シェイプをデータおよび振る舞いの小さな契約へと変えることができます。

メソッドフィールドは、関数の章で学んだ関数型の構文を使用します。その最初のパラメータは慣習的に self(メソッドが属するテーブル)と命名され、シェイプ自身を参照することもできます:

type Greeter = {
    name: string,
    greet: (self: Greeter) -> string,
}

シェイプを実装するには、フィールドに関数を格納し、その self パラメータを渡します:

local greeter: Greeter = {
    name = "Ana",
    greet = function(self: Greeter): string
        return `Hello, I'm {self.name}`
    end,
}

これを呼び出すということは、自分自身でテーブルを self として渡すことを意味します: greeter.greet(greeter)self を通して、メソッドは呼び出されたテーブルのフィールドを読み取ります。

テーブルを2回書くのは煩わしく感じられます — そして、Luaにおけるその解決策はすでに知っています。それがコロンです。次のレッスンでは、 : 構文をこれらの型付きシェイプに結びつけます。

challenge icon

チャレンジ

簡単

以下の内容を持つ Rectangle という名前の型エイリアスを作成してください:

  • number 型の width
  • number 型の height
  • width * height を返すメソッド (self: Rectangle) -> number である area
  • 2 * (width + height) を返すメソッド (self: Rectangle) -> number である perimeter

4、高さ 6 で、両方のメソッドを実装した(self パラメータを忘れないでください)Rectangle 型の変数 rect を作成します。

それぞれを独自の行に出力してください(rectself として渡し、ドット構文でメソッドを呼び出します):

  1. 長方形の area
  2. 長方形の perimeter
  3. 長方形の width

自分で試してみよう

-- ここにコードを書いてください
-- 1) 2つの数値フィールドと2つのメソッドを持つ型 Rectangle を定義する
-- 2) 両方のメソッドを実装する rect (width 4, height 6) を作成する
-- 3) area、perimeter、width を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Luau入門のすべてのレッスン