形状へのメソッドの追加
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におけるその解決策はすでに知っています。それがコロンです。次のレッスンでは、 : 構文をこれらの型付きシェイプに結びつけます。
チャレンジ
簡単以下の内容を持つ Rectangle という名前の型エイリアスを作成してください:
number型のwidthnumber型のheightwidth * heightを返すメソッド(self: Rectangle) -> numberであるarea2 * (width + height)を返すメソッド(self: Rectangle) -> numberであるperimeter
幅 4、高さ 6 で、両方のメソッドを実装した(self パラメータを忘れないでください)Rectangle 型の変数 rect を作成します。
それぞれを独自の行に出力してください(rect を self として渡し、ドット構文でメソッドを呼び出します):
- 長方形の
area - 長方形の
perimeter - 長方形の
width
自分で試してみよう
-- ここにコードを書いてください
-- 1) 2つの数値フィールドと2つのメソッドを持つ型 Rectangle を定義する
-- 2) 両方のメソッドを実装する rect (width 4, height 6) を作成する
-- 3) area、perimeter、width を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数