Menu
Coddy logo textTech

Perimeterメソッド

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

challenge icon

チャレンジ

簡単

Shape マネージャーを拡張し、Rectangle と Circle の両方の class に :getPerimeter() method を追加しましょう。:getArea() と同様に、それぞれの shape は異なる方法で perimeter を計算しますが、同じ method name を共有します。これは、polymorphism が実際に機能する完璧な例です。

引き続き、既存のファイルを操作します。

  • Shape.lua:ベースとなる Shape class は変更しません。
  • Rectangle.lua:公式 2 × (width + height) を使って rectangle の perimeter を返す :getPerimeter() method を追加します。
  • Circle.lua:公式 2 × π × radius を使って circle の円周を返す :getPerimeter() method を追加します。π には math.pi を使用します。
  • main.lua:両方の shape module を Require し、input から dimensions を読み取り、Rectangle を 1 つと Circle を 1 つ create してから、6 行を Print します。順番は rectangle の name、area、perimeter、続いて circle の name、area、perimeter です。

これで両方の shape は、:getName():getArea():getPerimeter() による完全な interface を備えました。実装は異なりますが、すべて同じ method name を通じてアクセスできます。

input: 3 行:width(number)、height(number)、radius(number)。

Output: 順番に 6 行:rectangle の name、rectangle の area、rectangle の perimeter、circle の name、circle の area、circle の perimeter。

自分で試してみよう

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

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

-- 入力から幅と高さを読み取る
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- 指定された寸法で新しいRectangleインスタンスを作成する
local rect = Rectangle:new(width, height)

-- 指定された半径で新しいCircleインスタンスを作成する
local circ = Circle:new(radius)

-- 長方形の名前、面積、周囲長を出力する
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())

-- 円の名前、面積、周囲長を出力する
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())

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

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