Twelve-Factor アプリは次のように述べています。
セットアップの自動化に宣言形式を使用して、プロジェクトに参加する新しい開発者の時間とコストを最小限に抑えます
「宣言形式」とはどういう意味ですか?
Twelve-Factor アプリは次のように述べています。
セットアップの自動化に宣言形式を使用して、プロジェクトに参加する新しい開発者の時間とコストを最小限に抑えます
「宣言形式」とはどういう意味ですか?
宣言形式とは、プログラムに到達する方法ではなく、プログラムの意図/最終結果を宣言する形式です。宣言型コードは通常、人間が読める明確な意図を持つ高レベルの関数または抽象化を呼び出すステートメントで構成されます。逆に、命令型コードは、高レベルの目標を参照することなく、プログラムの状態に明確に影響を与えるステートメントで構成されています。
もっと簡潔に言えば、宣言型コードは理由を伝え、命令型コードは方法を伝えます。
次のコードはMakefile
、架空のプログラムhellomake
です。このプログラムは、によって提供される抽象化を使用しmake
て、暗黙的な低レベルの詳細を指定せずにビルド プロシージャを定義します。Makefile
コンパイラ、ソース ディレクトリ、およびファイル依存構造を指定するだけでよく、抽象化を使用して、このmake
プログラム構造に基づいてすべてのボイラープレートを埋めます。declarative
ステートメントは低レベルのアクションを指定せずに高レベルの意味を伝えるため、これは形式と見なされます。
CC=gcc
CFLAGS=-I.
DEPS = hellomake.h
# Build an object file for each of the dependencies.
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
# Build the hellomake program using the hellomake and hellofunc object files.
hellomake: hellomake.o hellofunc.o
gcc -o hellomake hellomake.o hellofunc.o -I.
次の Python スクリプトは、 で定義されているのと同じタスクを実行しますMakefile
が、Python は よりもはるかに汎用的なためmake
、ビルドの詳細はすべて明示的に実行する必要があります。これらの明示的なプログラム アクションは、プログラムがビルド環境をどのように変更するかを明確に説明しますが、補助的な説明 (コメントなど) なしでは、プログラムをコンパイルするという全体的な目標にどのように貢献するかを説明することはできません。imperative
低レベルのアクションが明確に定義され、プログラマーに伝えられるため、これはフォーマットと見なされます。
CC = "gcc"
CFLAGS = "-I."
DEPS = ["hellomake.h"]
def make_o_file(o_file, deps):
#don't recompile if it exists & is current
c_file = "%s.c" % os.path.splitext(o_file)[0]
if (os.path.exists(o_file)
and is_newer(o_file, c_file)
and all(is_newer(o_file, dep) for dep in deps)):
return
#else actually compile it
compile_c_file(CC, code_file, o_file, CFLAGS)
if target == "hellomake":
make_o_file("hellomake.o", DEPS)
make_o_file("hellofunc.o", DEPS)
link_o_files("hellomake", ["hellomake.o", "hellofunc.o"])
命令型と宣言型の両方の形式は、プログラミングにおいて重要な目的を果たします。詳細については、宣言型プログラミングに関するウィキペディアが役立つ場合があります。