コンテンツにスキップ

プログラミング/命令型プログラミング

出典: フリー教科書『ウィキブックス(Wikibooks)』

命令型プログラミングとは

[編集]

命令型プログラミングは、プログラムの状態を直接的に変更する手法で、コンピュータにどのように特定のタスクを実行するかを明確に指示します。このアプローチでは、プログラマーが逐次的な手順を詳細に記述し、プログラムの各ステップを制御します。

命令型プログラミングの特徴

[編集]
  • 状態変更: プログラムの状態を逐次的に変更
  • 逐次的実行: 命令は順番に実行される
  • 明示的な制御フロー: 条件分岐やループを使用して処理を制御

基本的な概念

[編集]

変数と代入

[編集]

C言語

[編集]
int x = 10;
x += 5;  // xは15になる

Rust

[編集]
let mut x = 10;
x += 5;  // xは15になる

Java

[編集]
int x = 10;
x += 5;  // xは15になる

Go

[編集]
x := 10
x += 5  // xは15になる

制御構造

[編集]

条件分岐

[編集]
C++
[編集]
if (x > 10) {
    std::cout << "大きい" << std::endl;
} else if (x == 10) {
    std::cout << "同じ" << std::endl;
} else {
    std::cout << "小さい" << std::endl;
}

ループ

[編集]
Java
[編集]
for (int i = 0; i < 5; i++) {
    System.out.println(i);
}
Rust
[編集]
for i in 0..5 {
    println!("{}", i);
}

関数と副作用

[編集]

C++

[編集]
int total = 0;
void addToTotal(int value) {
    total += value;
}

Go

[編集]
var total int = 0
func addToTotal(value int) {
    total += value
}

実践的な例:リストのソート

[編集]

バブルソートの実装

[編集]

C言語

[編集]
void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

Rust

[編集]
fn bubble_sort(arr: &mut [i32]) {
    let n = arr.len();
    for i in 0..n-1 {
        for j in 0..n-i-1 {
            if arr[j] > arr[j+1] {
                arr.swap(j, j+1);
            }
        }
    }
}

命令型 vs 宣言型プログラミング

[編集]

比較例:配列の合計計算

[編集]

命令型(C++)

[編集]
int sum = 0;
for (int num : numbers) {
    sum += num;
}

宣言型(Rust)

[編集]
let total: i32 = numbers.iter().sum();

注意点と最適化

[編集]
  • 命令型プログラミングは、状態追跡が複雑になりやすい
  • 並列処理や複雑なシステムでは、副作用の管理が難しい
  • 関数型プログラミングと組み合わせることで、コードの可読性と保守性を向上させることができる

まとめ

[編集]

命令型プログラミングは、計算機の基本的な動作モデルに近い、直接的で制御可能なプログラミングパラダイムです。低レベルな制御と高いパフォーマンスが求められるシステムプログラミングや組み込みシステムで特に重要です。

推奨される学習ステップ

[編集]
  1. 基本的な変数操作を習得
  2. 制御構造(条件分岐、ループ)を理解
  3. 関数と副作用の概念を学ぶ
  4. 異なる言語での実装を比較
  5. リファクタリングと最適化の技術を探求