🔁

プログラミング基礎: 制御構文(条件分岐、ループ)

2023/03/15に公開

はじめに

プログラミング初心者の皆さん、こんにちは!前回の記事では変数、データ型、演算子について説明しました。プログラムは、基本的に上から下へと命令が実行されます。しかし、条件によって異なる処理を行ったり、同じ処理を繰り返す場合があります。このような制御を行うためには、制御構文が必要です。
制御構文は、プログラムの実行フローを制御するための構文で、条件分岐やループなどが含まれます。本記事では、これらの制御構文の基本を解説します。

ブロック

制御構文の前にまずブロックについて簡単に解説させてください。ブロックは、一連の命令やステートメントをまとめたコードの単位です。ブロックは、制御構文(条件分岐やループなど)を使用して、プログラムの実行フローを構成します。ブロックの概念は、プログラミング言語によって異なる方法で表現されます。以下に、一般的なプログラムのブロックに関する説明を記載します。

ブロックの開始と終了

プログラムのブロックは、通常、特定の構文や記号によって開始および終了が示されます。

C言語やJava: 中括弧{}を使用してブロックの開始と終了を示します。

if (condition) {
    // ブロックの開始
    // ここに命令を記述
} // ブロックの終了

Python: インデント(通常はスペース4つまたはタブ)を使用してブロックの開始と終了を示します。

if condition:
    # ブロックの開始
    # ここに命令を記述
# ブロックの終了

ブロックの重要性

ブロックは、以下の点で重要な役割を果たします。

  • スコープの定義: ブロックは、変数や関数のスコープを定義します。スコープは、変数や関数が有効である範囲を示し、ブロック内で宣言された変数は、通常、そのブロック内でのみアクセス可能です。
  • コードの構造化: ブロックは、コードを構造化し、読みやすくするために使用されます。適切なブロック構造を維持することで、コードの可読性や保守性が向上します。
  • 制御構文の実装: ブロックは、制御構文(条件分岐やループ)を実装するために必要です。制御構文は、プログラムの実行フローを制御するための構文で、ブロックを使用して異なるパスや繰り返し処理を定義します。

条件分岐

条件分岐は、ある条件に基づいて、プログラムの実行フローを切り替えるための構文です。主にif、elif(else if)、elseというキーワードを使って構成されます。

例: 基本的なif文

age = 18

if age >= 20:
    print("You are an adult.")
else:
    print("You are not an adult.")

上記の例では、ageが20以上であればYou are an adult.と出力し、そうでなければYou are not an adult.と出力します。

elifを使って複数の条件を追加することができます。

例: elifを使った条件分岐

score = 75

if score >= 90:
    print("Excellent")
elif score >= 70:
    print("Good")
elif score >= 50:
    print("Average")
else:
    print("Poor")

この例では、scoreの値に応じて、ExcellentGoodAveragePoorのいずれかを出力します。

ループ

ループは、指定された条件が満たされる間、ある処理を繰り返し実行するための構文です。ループには主にforループとwhileループの2種類があります。

forループ

forループは、シーケンス(リスト、文字列など)の要素を順に処理する場合に使用されます。

例: forループを使ったリストの要素の出力

fruits = ["apple", "banana", "orange"]

for fruit in fruits:
    print(fruit)

この例では、fruitsリストの要素が順にfruit変数に代入され、print(fruit)が繰り返し実行されます。

whileループ

whileループは、ある条件が真である間、処理を繰り返し実行します。

例: whileループを使ったカウントダウン

count = 5

while count > 0:
    print(count)
    count -= 1

print("Liftoff!")

この例では、count が0より大きい間、count を出力し、1を減算します。count が0になったとき、ループが終了し、Liftoff!が出力されます。

上記の例では、次のような出力が得られます。

5
4
3
2
1
Liftoff!

forループとwhileループのどちらを使うべきかは、繰り返しの条件や処理内容によって異なります。forループは、シーケンスの要素を処理する場合や、繰り返しの回数が決まっている場合に適しています。一方、whileループは、繰り返しの条件が変数の値や外部要因に依存する場合に適しています。

分岐とループの組み合わせ

分岐とループを組み合わせることで、より複雑で実用的な処理を実現することができます。以下の例では、1から100までの数字の中で、3の倍数は「Fizz」、5の倍数は「Buzz」、3と5の公倍数は「FizzBuzz」、それ以外の数字はそのまま出力するプログラムを作成します。これは、よく知られたプログラミング問題であるFizzBuzz問題です。

for i in range(1, 101):
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

このプログラムでは、forループを使って1から100までの数字を順番に処理します。各数字に対して、if、elif、elseを使った条件分岐を行い、条件に応じて異なる文字列または数字を出力します。

条件分岐、ループと変数スコープ

制御構文を使用する際、変数のスコープ(変数の有効範囲)に注意することが重要です。スコープによって、変数がどの部分のコードからアクセス可能かが決まります。以下に、条件分岐とループ内での変数スコープの基本的な挙動を説明します。

条件分岐内の変数スコープ

条件分岐内で宣言された変数は、通常、その条件ブロック内でのみ有効です。ただし、Pythonなどの言語では、条件分岐内で宣言された変数は、条件分岐の外でもアクセス可能です。しかし、このような使い方は推奨されません。変数は、そのスコープが明確で理解しやすい場所で宣言することが望ましいです。

if some_condition:
    x = 10
else:
    x = 20

# xはここでもアクセス可能
print(x)

ループ内の変数スコープ

ループ内で宣言された変数は、ループ内でのみ有効です。ただし、ループ内で宣言された変数も、Pythonなどの言語ではループの外でもアクセス可能です。しかし、ここでも変数はそのスコープが明確で理解しやすい場所で宣言することが望ましいです。

for i in range(5):
    loop_var = i * 2

# loop_varはここでもアクセス可能(ただし推奨されない)
print(loop_var)

変数スコープを適切に管理することで、変数の誤用やバグを防ぐことができます。条件分岐やループ内で変数を使用する際は、そのスコープが適切であることを確認し、コードの可読性と保守性を向上させましょう。

まとめ

制御構文(条件分岐やループ)を理解し、適切に使用することで、プログラムの動作を柔軟に制御することができます。プログラムを作成する際に、適切な制御構文を使って、効率的で読みやすいコードを書くことを心がけましょう。

Discussion