参照透過性

参照透過とは、コンピュータプログラムの一部の機能のことです。プログラムの動作を変更することなく、それが返す値で置き換えることができる場合、プログラムの一部は「参照透過」と呼ばれます。参照的に透明な関数は純粋でなければなりません。同じ入力を取る場合は常に同じ出力を与えなければならず、プログラムの一部が値を返す以外の動作を行う副作用を持っていてはなりません。参照透過の反対は、参照不透明です。

数学では、数学関数は値を取り込んで値を吐き出すことしかできないため、すべての関数は参照透過的です。プログラミングでは、これは必ずしも真実ではありません。関数は今年の何曜日であるかを調べたり、画面にメッセージを表示したりすることもあります。このような違いがあるため、プログラミングでは関数をプロシージャのように別の名前で呼ぶ人もいます。

参照透過性を利用すると、プログラマやコンパイラはコードをリライトシステム、つまり式を取って他のものに置き換えるシステムと考えることができます。これは、以下のようないくつかのタスクに役立ちます。

  • プログラムやコードが正しいことを証明すること、つまり、何があっても、それが想定されていることを正確に行うこと。
  • アルゴリズムをよりシンプルにする
  • コードを簡単に変更できるようにしながら、それが想定されている通りに動作することを確認します。
  • コードの実行を高速化したり、少ないメモリを使い切るような方法で実行したりする。

最後のタスクを行うにはいくつかの方法があります。最もよく知られているのは、メモ化(初回の実行後に答えを保存する)、共通副式消去(同じコードの2つの部分を組み合わせることに価値があるかどうかを判断する)、遅延評価(コードが本当に必要になるまで答えを見つけない)、並列化(複数の問題を同時に処理する)です。

質問と回答

Q:参照透過性とは何ですか?


A:参照透過性とは、コンピュータプログラムの一部が、プログラムの動作を変えることなく、そのプログラムが返す価値と置き換えることができる機能のことです。

Q:Referential Transparencyの反対語は何ですか?


A:Referential Transparencyの反対は、Referential opacityです。

Q:数学の関数はすべて参照透過ですか?


A: はい、数学の関数は値を取り込み、値を吐き出すだけなので、数学の関数はすべて参照透過的です。

Q: 参照透過性はプログラマやコンパイラにどのように役立つのか?


A: 参照透過性は、プログラマやコンパイラがコードを書き換えシステムとして考えることを可能にします。つまり、ある式を受け取り、それを別のものに置き換えるものです。これにより、プログラムやコードが正しいことを証明する、アルゴリズムをよりシンプルにする、コードを簡単に変更できるようにする、コードをより速く、より少ないメモリで実行できるようにする、などのタスクに役立ちます。

Q: コードをより速く、より少ないメモリで実行させるために使用されるいくつかのテクニックは何ですか?


A: コードをより速く、より少ないメモリで実行するためのテクニックには、メモ化(初回に答えを保存する)、共通部分式の除去(同じコードの2つの部分を組み合わせる価値があるかどうかを見極める)、遅延評価(コードが本当に必要になるまで答えを見つけない)、並列化(複数の問題を同時に処理する)などがあります。

Q:プログラミングの関数は、数学の関数と何か違いがあるのでしょうか?


A:はい、プログラミングの関数と数学の関数の違いはあります。プログラミングの関数では、数学の関数では不可能な、何月何日かを調べたり、メッセージを画面に表示したりすることができます。

AlegsaOnline.com - 2020 / 2023 - License CC3