言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Lua辞典

  1. トップページ
  2. Lua辞典
  3. コメント(-- と --[[ ]])

コメント(-- と --[[ ]])

『Lua』におけるコメントの書き方と使い方です。一行コメント(『--』)とブロックコメント(『--[[ ]]』)の2種類があります。ブロックコメントは長括弧記法と呼ばれる構文を使い、イコール記号の数でネストレベルを変えることで、コメント内に任意の文字列を含められます。

構文

-- 一行コメントです。-- 以降、行末までがコメントになります。

local count = 10  -- 行末コメントです。コードの右側に短い補足を添えます。

--[[
ブロックコメントです。
--[[ から ]] までの範囲がコメントになります。
複数行にわたるコメントを書くときに使います。
]]

--[==[
イコール記号を2つ使ったブロックコメントです。
]] を含む文字列をコメントに含めたいときに使います。
コメント終了は ]==] です。
]==]

コメントの種類

種類書き方概要
一行コメント-- テキスト『--』以降、行末までがコメントになります。行頭・行末どちらに置いても使えます。
ブロックコメント(レベル0)--[[ ... ]]複数行にまたがるコメントです。『--[[』で始まり『]]』で終わります。『]]』を含む文字列をコメントに入れることはできません。
ブロックコメント(レベルN)--[=*[ ... ]=*]イコール記号をN個はさんだ長括弧記法です。開始と終了のイコール数が一致していれば、コメント内に通常の『]]』を含められます。

長括弧記法(ブロックコメントのレベル)

Luaの長括弧記法(long bracket)は、コメントだけでなく文字列リテラルにも使われる構文です。開き括弧(『[』)と閉じ括弧(『]』)の間にイコール記号を同じ数だけ挟むことで「レベル」を指定します。コメントの場合は先頭に『--』を付けます。

レベル開き閉じ
レベル0[[]]--[[ コメント ]]
レベル1[=[]=]--[=[ コメント ]=]
レベル2[==[]==]--[==[ コメント ]==]
レベルN[===...=[]===...=]イコールをN個

コメント内に『]]』という文字列を含めたい場合は、レベル1以上を使います。レベル1のコメント(『--[=[...]=]』)は『]]』を含められますが、『]=]』は含められません。実際のユースケースとしては、コード全体を一時的にコメントアウトする際に内部の文字列と衝突を避けるために高レベルを選ぶことがあります。

コメントを書くべき場所・書かなくてよい場所

判断場面理由
書くべき「なぜこう実装したか」の理由コードを読むだけではわからない設計意図やトレードオフを残しておくと、将来の自分や他の開発者が助かります。
書くべき複雑なアルゴリズムや計算式何をしているか一見でわかりにくい処理には、動作の概要を補足します。
書くべき公開API・モジュールの関数引数・戻り値・副作用を関数の直前にコメントで記述しておくと、利用者が読みやすくなります。
書くべきデバッグ中の一時的な無効化コメントアウトした理由や期限を残しておくと、後で削除し忘れるリスクが減ります。
書かなくてよいコードを読めば明らかな処理自明な説明はノイズになります。変数名・関数名をわかりやすくすれば不要になります。
書かなくてよい変更履歴・削除したコードバージョン管理(git)があるため、コメントに古いコードや変更日を残す必要はありません。

サンプルコード

一行コメントとブロックコメントの基本的な使い方です。

comment_basic.lua
-- 点数データを集計するサンプルです。

local scores = {85, 92, 78, 95, 61}  -- テスト結果の点数テーブルです。

--[[
  scores テーブルの合計と平均を計算します。
  Lua の # 演算子でテーブルの要素数を取得します。
]]

local total = 0
local count = #scores  -- テーブルの要素数です。

for i = 1, count do
    total = total + scores[i]
end

local average = total / count  -- 平均点を算出します。

print(string.format("Count : %d", count))
print(string.format("Total : %d", total))
print(string.format("Average: %.1f", average))

実行すると次のように出力されます。

$ lua comment_basic.lua
Count : 5
Total : 411
Average: 82.2

長括弧記法のレベルを変えてコメント内に『]]』を含める例です。

comment_bracket_level.lua
--[=[
  レベル1の長括弧コメントです。
  コメント内に ]] を含めても終了しません。
  終了するのは ]=] が現れたときだけです。
]=]

--[==[
  レベル2の長括弧コメントです。
  ]] も ]=] も含めることができます。
  終了するのは ]==] が現れたときだけです。
]==]

-- 長括弧コメントでコードブロックを一時的に無効化する例です。
--[[
local result = heavy_computation()
print(result)
]]

print("active code")

実行すると次のように出力されます。

$ lua comment_bracket_level.lua
active code

関数のドキュメントコメントを書く慣習的なスタイルです。

comment_function.lua
-- calculateAverage: 数値テーブルの平均を計算します。
-- @param values  数値の配列テーブルです。空テーブルは不可。
-- @return        平均値(number)を返します。
-- @error         values が空の場合は nil と エラーメッセージを返します。
local function calculateAverage(values)
    local count = #values
    if count == 0 then
        return nil, "empty table"
    end

    local total = 0
    for _, v in ipairs(values) do
        total = total + v
    end

    return total / count
end

local avg, err = calculateAverage({10, 20, 30, 40, 50})
if err then
    print("Error: " .. err)
else
    print(string.format("Average: %.1f", avg))
end

local avg2, err2 = calculateAverage({})
if err2 then
    print("Error: " .. err2)
end

実行すると次のように出力されます。

$ lua comment_function.lua
Average: 30.0
Error: empty table

概要

Luaのコメントは一行コメント(『--』)とブロックコメント(長括弧記法)の2種類です。一行コメントはコードの右側に補足を添えるときや、処理を1行だけ無効化するときに使います。

ブロックコメントは長括弧記法(『--[[...]]』)を使います。コメント内に通常の『]]』を含めたい場合は、イコール記号を挟んだ高レベルの長括弧(『--[=[...]=]』や『--[==[...]==]』)を使います。開きと閉じのイコール数が一致していないとコメントが正しく終了しません。

Luaには公式のドキュメントコメント形式がありませんが、『--』による一行コメントに『@param』『@return』などのタグを付ける慣習が使われることがあります。LDoc(Lua Documentation Tool)を使うとこれらのコメントからHTMLドキュメントを生成できます。

よくあるミス

ブロックコメントの開始と終了のイコール数が一致しない

長括弧記法では開始(『--[==[』)と終了(『]==]』)のイコール数が一致していなければなりません。数が違うとコメントが終了せず、後続のコードがコメントとして扱われます。

--[==[
  このブロックコメントはレベル2です。
]=]   -- NG: ]=] はレベル1の閉じ括弧。レベル2は ]==] で閉じる必要があります。

print("ここには到達しません")  -- コメントの外に出ていないため実行されません。

修正後:

bracket_ok.lua
--[==[
  このブロックコメントはレベル2です。
]==]   -- OK: イコール数が一致しています。

print("ここに到達します")

実行すると次のように出力されます。

lua bracket_ok.lua
ここに到達します

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。