| English | 意味 |
|---|---|
| paradigm/ˈpærədaɪm/ | パラダイム |
| low-level/ləʊ ˈlevl/ | 低レベル |
| imperative/ɪmˈperətɪv/ | 命令型 |
| declarative/dɪˈklærətɪv/ | 宣言型 |
| functional/ˈfʌŋkʃənl/ | 関数型 |
| pure functions/pjʊə ˈfʌŋkʃnz/ | 純粋関数 |
| logic/ˈlɒdʒɪk/ | 論理型 |
同一プログラムを4つの方法で記述
- イギリスの全顧客を取得する場合、Cプログラマは配列に対するループを記述する。Haskellプログラマはフィルタを記述する。Prologプログラマはルールを宣言してクエリを発行する。SQLユーザーは
SELECT * FROM Customer WHERE Country = 'UK'を記述する。 - 最初の手法だけがどのように行うかを指定する。他の手法は何が望まれているかだけを指定し、実行環境に「どのように」を行うかを任せる。これにより、処理順序の再構成、インデックスの使用、または8コアでの並列実行が可能になる。
- 一般的にどちらが優れているわけではない。異なるのは、どの意思決定を言語側が代行するかであり、これがまさにパラダイムとは何かである。
- このレッスンはシラバスで名称されるパラダイムである:低レベル、命令形( Imperative)、および**宣言形(Declarative)**である。
低レベルプログラミング
- 低レベルプログラミングは、機械語またはアセンブリ言語を用いてハードウェアに近い操作を行い、レジスタ、メモリアドレス、個別の命令への直接アクセスを可能にする。
- 利点: 最大限の制御と速度、そして可能な限り最小なコードサイズであり、メモリーがキロボайツしかない場合に重要となる。
- 欠点: アーキテクチャ固有であるため、異なるプロセッサでは書き直しが必要であり、記述に時間がかかり、保守も困難である。
- ハードウェアを正確に指令する必要がある場所、すなわちデバイスドライバ、ファームウェア、組み込みコントローラ、リアルタイムシステムの最も内側のループなどで使用される。
- アセンブリ言語のレッスンにおいて、即座の、直接的な、間接的な、インデックス付き、および相対的なアドレス指定を練習してください。そのトレース例は、同じ演算子でも異なる結果が生じる理由を示しています。
低レベルプログラミングについて真であるものはどれか。適用されるものをすべて選択してください。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
制御には努力が必要です:アセンブリは書きにくく保守が困難であるため、ドライバーやファームウェアに限定されています。
命令形プログラミング
- 命令形プログラミング(手続型とも呼ばれる)は、代入、条件分岐、ループ、手続き呼び出しといったプログラムの状態を変更する一連の命令である。
- プログラマは、結果がどのように計算されるかを段階的に指定する。状態を保持する変数がその中心となる。
- Python、C、Java、擬似コードのスタイルであり、ほぼすべての人が最初に学ぶものである。

一つ一つの命令が格納されている内容を変えていく
命令型(手続的)プログラミングの基礎となるものは:
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
命令型コードは、状態を変更するステップバイステップのコマンド(代入、ループ、呼び出し)を提供します。
宣言形プログラミング
- 宣言形プログラミングは、どうやってではなく何が計算されるべきかを宣言する。実行環境がステップを決定する。
- 関数型プログラミングは、副作用のない純粋関数を組み合わせる。同じ入力に対して常に同じ出力が得られ、関数外では何も変化しない。HaskellとLispがその例である。
- ロジックプログラミングは事実とルールを宣言し、エンジンが推論によってクエリに回答する。Prologがその例である。
- SQLは、ほとんどの人が接したことがある宣言形言語である。クエリはどの行が必要かを指定し、データベースがどう見つけるかを決定する。
プログラミング概念ラボ
各例とそれが示すプログラミングの概念を結びつけてください。
宣言型プログラミングとは、以下を指定することを意味します:
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
宣言型コード(関数的、ロジック、SQL)は目標を述べ、実行環境が手順を決定します。
純粋な関数(関数_programming):
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
純粋性とは副作用がなく、決定論的な結果を生成することであり、これが関数_programmingコードの分析を容易にします。
宣言型パラダイム(関数的、ロジック、SQL)は「何を」計算するかを述べ、実行環境に「どうやって」を任けます。一方、命令型コードはすべてのステップを詳細に記述します。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
SQLクエリは、テーブルをどのようにスキャンするかではなく、どの行を希望するかを指定します。これはステップバイステップの命令型コードとは対照的です。
純粋な関数は、同じ入力に対して常に同じ出力を返し、____を持ちません。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
これにより、単体でのテストが可能になり、並列実行も安全に行え、結果をキャッシュできるのです。
演習例:パラダイムの特定
FOR i ← 1 TO n : total ← total + A[i] : NEXT i— 命令形:totalに保持される状態を変化させる一連の命令である。SELECT Name FROM Customer WHERE Country = 'UK'— 宣言形: どの行が必要かを指定しているだけで、検索方法を指定していない。LDD 200 : ADD 201 : STO 202— 低レベル: メモリ位置に直接アクセスするアセンブリ命令である。parent(X, Y) :- father(X, Y).— 宣言形、具体的にはロジックプログラミング: エンジンが推論によって答えを導き出すルールである。- パラダイムを名指しし、それが示唆されるコードの特徴を記述せよ。
各断片を対応するパラダイムに結びつけください。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
状態を変更するコマンド、目的の記述、メモリを指し示す指示、そして推論のためのルール。
比較
| パラダイム | 宣言内容 | 強み | 典型的な用途 |
|---|---|---|---|
| 低レベル | 正確な指示 | 制御、速度、サイズ | ドライバ、ファームウェア |
| 命令形 | 如何、段階的に | 直接的で親しみやすい | 一般的なプログラミング |
| 宣言形 | 何が望ましいか | 簡潔、実行環境が最適化する | クエリ、ルール、データ変換 |
- 現代の言語はこれらを混合する。Pythonは命令形だが関数的特徴を持ち、SQLは命令形で記述されたプログラム内に存在する。パラダイムはスタイルであり、壁ではない。
各パラダイムをその核心的な概念に結びつけください。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
命令型はステップバイステップで「どうやって」を述べます;OOはオブジェクトをモデル化します;関数_programmingは純粋な関数を使います;宣言型は目標を述べています。
命令型プログラミングと宣言型プログラミングの決定的な違いは何ですか?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
宣言型バージョンは「どうやって」を固定しないため、実行環境は作業の順序を再配置したり、インデックスを使用したり、並列化したりできます。
演習例:副作用の重要性
- 純粋関数は副作用を持たない。その利点の一つを説明せよ。
- 同じ入力で常に同じ出力が得られ、外部で何も変化しないため、純粋関数は孤立してテストできる。セットアップや整えるべき隠れた状態がないからである。
- また、2つの呼び出しが互いに干渉できないため、並列に安全に実行でき、その結果をキャッシュすることも可能である。
- 対照的に、グローバル変数を更新する命令形ルーチンは、以前に実行された内容によって挙動が変わり、これが此类のバグの発見を困難にする要因となる。
見落としやすいポイント
- 命令形は如何を、宣言形は何がを指定する。この対比が本問の多くの解答である。
- 低レベルの欠点は「古い」ことではなく、アーキテクチャ固有であることや保守の難しさである。
- 純粋関数は副作用を持たず、同じ入力に対して同じ出力を与える。両方の条件が必要である。
- SQLは宣言形である。試験で最も頻繁に例として用いられるため、認識しておくこと。
理解できましたか
- パラダイムはコードを構造化するスタイルであり、現代の言語は複数のものを混合する。
- 低レベル: 機械語またはアセンブリ、ハードウェアへの直接アクセス、最大限の制御と速度、ただしアーキテクチャ固有で保守が難しい。
- 命令形: 状態を変化させる命令の一連の操作、如何を指定する。Python、C、擬似コードのスタイル。
- 宣言形: 何が望ましいかを宣言し、如何を実行環境に任せる。関数型プログラミングの純粋関数、ロジックプログラミングの事実とルール、SQLなど。