1

Lua 関数のコントラクトを明確にする方法を探しています。特に、パラメータが持つべき属性。

私の問題を説明するために、現在のコードの典型的な構造を持ついくつかのコード スニペットを示します。2 つのパブリック関数で新しい「インスタンス」を構築する関数。

local function newTextPrinter(color)
    return {
        print = function(textToPrint)
            PrintText(textToPrint, 20, color, 5, 'center');
        end,
        printBig = function(textToPrint)
            PrintText(textToPrint, 30, color, 5, 'center');
        end
    }
end

同じシグネチャ (またはスーパーセット) を持つと想定されるパラメーターを受け取る関数。

local function printSomeStuff(textPrinter)
    textPrinter.print("some")
    textPrinter.printBig("stuff")
end

後の関数の呼び出し

local textPrinter = newTextPrinter("ffffffff")
printSomeStuff(textPrinter)

このコードの問題は、 の実装を見ないと、 にtextPrinter提供されたパラメータがどのように見えるべきかを判断できないことです。この例では簡単に実行できますが、多くの場合、そうではありません (私のシナリオでは、ファイル間のホッピングを強制します)。名前の類似性を除けば、を介して適切な値を取得できるというヒントもありません。printSomeStuffprintSomeStuffnewTextPrinter

コードをより自己文書化し、作成者の意図をより明確にする方法はありますか?

私は軽量で、クラスベースの継承をエミュレートしようとしないアプローチを好みます。同様に、ドキュメンテーションよりもコードが好まれ、そうでない場合は、フリー フォームよりもツールが理解できる形式のドキュメンテーションが好まれます。textPrinter明らかに、「パラメーターのニーズprintとパブリック関数」のようなコメントを書くことができますprintBigが、ドキュメントで犯した間違いについて何も教えてくれなかったり、コードをリファクタリングして更新するのを忘れたりすると、非常にエラーが発生しやすくなります。

私はLua 5.0を使用していますが、この言語にはまったく慣れていません。

4

1 に答える 1