Menu
Coddy logo textTech

属性の初期化

CoddyのLuaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 9/70。

学習した:new()コンストラクターはオブジェクトを作成しますが、すべてのインスタンスが同じ状態で始まります。実際のオブジェクトには固有のデータが必要です。たとえば、人物には特定の名前があり、プレイヤーには開始時のスコアがあります。オブジェクトを役立つものにするには、コンストラクターが引数を受け取り、それらを新しいインスタンスに割り当てる必要があります。

コンストラクターを拡張して初期値を受け取れるようにする方法は次のとおりです。

local Dog = {}
Dog.__index = Dog

function Dog:new(name, breed)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.breed = breed
    return instance
end

function Dog:introduce()
    print("I am " .. self.name .. ", a " .. self.breed)
end

constructor は現在、namebreed をパラメータとして受け取ります。空の instance を作成してその metatable を設定した後、これらの値を instance のフィールドに直接割り当てます。作成される各オブジェクトは、それぞれ独自の namebreed を持つことになります。

local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")

dog1:introduce()  -- 出力: 私は Rex、a German Shepherd
dog2:introduce()  -- 出力: 私は Bella、a Poodle

どちらの犬もプロトタイプから同じ:introduce()メソッドを共有していますが、それぞれのインスタンステーブルには固有の名前とbreedが格納されています。これは、プロトタイプとパラメーター化されたconstructorを組み合わせることの強みです。つまり、共有される動作と個別の状態を両立できます。

challenge icon

チャレンジ

簡単

独自の名前と年齢を持つ一意の個人を作成する Person class を構築しましょう。適切な module 構造を練習するため、コードを2つのファイルに分けて整理します。

次のものを作成します:

  • Person.lua:name と age を受け取る constructor を備えた Person class を Define します。各 person が自分自身を紹介できる :introduce() method を含めます。
  • main.lua:Person module を Require し、提供された入力を使用して person instance を作成します。その後、自分自身を紹介させます。

:new(name, age) constructor は両方の値を受け取り、新しい instance に Store する必要があります。:introduce() method は、次の正確な形式で出力する必要があります:

Hello, my name is [name] and I am [age] years old

2つの入力を受け取ります:

  1. person の name
  2. person の age

たとえば、入力が Alice25 の場合、Output は次のようになります:

Hello, my name is Alice and I am 25 years old
必須の出力形式: [翻訳したコンテンツ]

自分で試してみよう

-- Personモジュールを読み込む
local Person = require('Person')

-- 入力を読み取る
local name = io.read()
local age = io.read()

-- TODO: Person:new(name, age)を使用して新しいPersonインスタンスを作成する

-- TODO: personインスタンスでintroduce()メソッドを呼び出す
quiz icon腕試し

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

オブジェクト指向プログラミングのすべてのレッスン

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