Menu
Coddy logo textTech

形状へのメソッドの追加

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

Lua OOP の章で、function は他の値と同じように table に格納できることを学びました。Shape はそれらの function フィールドも記述できます。つまり、shape を data behavior の小さな契約に変えられます。

method フィールドでは、functions の章で学んだ function-type 構文を使用します。最初のパラメーターは慣例的に self と名付けます。これは method が属する table です。また、shape は自分自身を参照することさえできます。

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

shape を実装するには、フィールドに function を格納し、その function に self パラメーターを指定します。

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

これを call するには、自分で table を self として渡します:greeter.greet(greeter)self を通して、method は call された対象の table の fields を読み取ります。

table を2回書くのは少し扱いにくく感じますが、Lua の解決策はすでに知っています:コロンです。次のレッスンでは、: 構文をこれらの型付き shape に関連付けます。

challenge icon

チャレンジ

簡単

Rectangleという名前の型エイリアスを作成し、以下を定義してください。

  • 型がnumberwidth
  • 型がnumberheight
  • areawidth * heightを返すメソッド(self: Rectangle) -> number
  • perimeter2 * (width + height)を返すメソッド(self: Rectangle) -> number

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

それぞれ1行ずつ、以下を出力してください(ドット構文でメソッドを呼び出し、rectselfとして渡します)。

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

自分で試してみよう

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

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

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

自分で練習してみよう: Luaオンラインコンパイラ