Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

冗長性

💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。

Flix コンパイラは、未使用の要素を含むプログラムを積極的に拒否します。これは、プログラマーが分かりにくいバグを避けられるように支援するためのものです[^1]。慣れるまで少し時間がかかるかもしれませんが、それに見合う価値のあるトレードオフだと私たちは考えています。

具体的には、Flix コンパイラはプログラムが次のものを含まないことを保証します:

未使用のローカル変数(Unused Local Variables)

Flix は未使用の変数を含むプログラムを拒否します。

例えば、次のプログラムは拒否されます:

def main(): Unit \ IO =
    let x = 123;
    let y = 456;
    println("The sum is ${x + x}")

エラーメッセージは次のとおりです:

❌ -- Redundancy Error -------------------------------------------------- Main.flix

>> Unused local variable 'y'. The variable is not referenced within its scope.

3 |     let y = 456;
            ^
            unused local variable.

未使用のローカル変数は、アンダースコア _ を接頭辞として付けることで、このエラーを抑制できます。例えば、y を _y に置き換えると、上記のプログラムはコンパイルできます:

def main(): Unit \ IO =
    let x = 123;
    let _y = 456; // OK
    println("The sum is ${x + x}")

シャドーイングされたローカル変数(Shadowed Local Variables)

Flix はシャドーイング(Shadowing)された変数を含むプログラムを拒否します。

例えば、次のプログラムは拒否されます:

def main(): Unit \ IO =
    let x = 123;
    let x = 456;
    println("The value of x is ${x}.")

エラーメッセージは次のとおりです:

❌ -- Redundancy Error -------------------------------------------------- Main.flix

>> Shadowed variable 'x'.

3 |     let x = 456;
            ^
            shadowing variable.

The shadowed variable was declared here:

2 |     let x = 123;
            ^
            shadowed variable.

無意味な式(Useless Expressions)

Flix は、結果が破棄される純粋な式を含むプログラムを拒否します。

例えば、次のプログラムは拒否されます:

def main(): Unit \ IO =
    123 + 456;
    println("Hello World!")

エラーメッセージは次のとおりです:

❌ -- Redundancy Error -------------------------------------------------- Main.flix

>> Useless expression: It has no side-effect(s) and its result is discarded.

2 |     123 + 456;
        ^^^^^^^^^
        useless expression.

The expression has type 'Int32'

副作用を持たず、かつ結果も使用されない式は疑わしいものです。なぜなら、その式はプログラムの意味を変えることなく、そのまま削除できてしまうからです。

[^1] 例えば Using Redundancies to Find Errors を参照してください。