【2025年版】プログラミング基礎:変数と配列完全ガイド – 初心者でもわかる基本概念から実践まで

 

変数とは?プログラミングの基本概念

変数(Variable)は、データを格納するためのメモリ上の領域に名前を付けたものです。プログラミングにおいて最も基本的で重要な概念の一つで、すべてのプログラムで使用されます。

変数を学ぶメリット

  • データの管理:情報を効率的に保存・操作可能
  • プログラムの柔軟性:値を動的に変更できる
  • 可読性の向上:意味のある名前でコードが理解しやすい
  • 再利用性:同じ値を複数箇所で使用可能

変数の基本的な使い方

1. 変数の宣言と代入

# Python
name = "田中太郎"
age = 25
height = 170.5
is_student = True
// JavaScript
let name = "田中太郎";
let age = 25;
const PI = 3.14159;
var isStudent = true;
// Java
String name = "田中太郎";
int age = 25;
double height = 170.5;
boolean isStudent = true;

2. 変数の更新

# 変数の値を変更
score = 80
print(score)  # 80

score = score + 10
print(score)  # 90

score += 5    # 短縮記法
print(score)  # 95

3. 変数の命名規則

# 良い命名例
user_name = "山田"
total_price = 1500
is_valid = True
MAX_COUNT = 100

# 悪い命名例
a = "山田"          # 意味が不明
totalPrice = 1500   # Python では推奨されない
123name = "太郎"    # 数字から始まる(エラー)

データ型の基礎

1. 基本データ型

# 数値型
integer_num = 42        # 整数
float_num = 3.14        # 浮動小数点数

# 文字列型
message = "こんにちは"
single_char = 'A'

# 論理型
is_true = True
is_false = False

# 型の確認
print(type(integer_num))  # <class 'int'>
print(type(message))      # <class 'str'>

2. 型変換

# 文字列から数値への変換
str_num = "123"
int_num = int(str_num)      # 123
float_num = float(str_num)  # 123.0

# 数値から文字列への変換
num = 456
str_num = str(num)          # "456"

# 安全な型変換
def safe_int(value):
    try:
        return int(value)
    except ValueError:
        return 0

配列(リスト)の基本概念

配列は、同じ種類のデータを順序立てて格納するデータ構造です。複数の値を一つの変数で管理できる便利な仕組みです。

1. 配列の作成と初期化

# Python(リスト)
fruits = ["りんご", "バナナ", "オレンジ"]
numbers = [1, 2, 3, 4, 5]
mixed = ["文字", 123, True]
empty_list = []
// JavaScript
let fruits = ["りんご", "バナナ", "オレンジ"];
let numbers = [1, 2, 3, 4, 5];
let emptyArray = [];
// Java
String[] fruits = {"りんご", "バナナ", "オレンジ"};
int[] numbers = {1, 2, 3, 4, 5};
int[] scores = new int[10];  // 10要素の配列

2. 配列の要素アクセス

fruits = ["りんご", "バナナ", "オレンジ"]

# 要素の取得(0から始まるインデックス)
first_fruit = fruits[0]    # "りんご"
last_fruit = fruits[-1]    # "オレンジ"(Python の負のインデックス)

# 要素の変更
fruits[1] = "いちご"
print(fruits)  # ["りんご", "いちご", "オレンジ"]

3. 配列の基本操作

# 要素の追加
fruits = ["りんご"]
fruits.append("バナナ")      # 末尾に追加
fruits.insert(0, "いちご")   # 指定位置に挿入

# 要素の削除
fruits.remove("バナナ")      # 値で削除
deleted = fruits.pop()       # 末尾を削除して取得
del fruits[0]               # インデックスで削除

# 配列の長さ
length = len(fruits)

多次元配列

1. 二次元配列の基本

# 二次元配列(行列)
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 要素へのアクセス
element = matrix[1][2]  # 6(2行目の3列目)

# 行の取得
row = matrix[0]         # [1, 2, 3]

2. 実践的な二次元配列

# 成績表の例
students = [
    ["田中", 85, 92, 78],
    ["佐藤", 90, 88, 95],
    ["山田", 76, 84, 89]
]

# 特定の学生の平均点を計算
def calc_average(student_data):
    scores = student_data[1:]  # 名前以外のスコア
    return sum(scores) / len(scores)

for student in students:
    avg = calc_average(student)
    print(f"{student[0]}の平均点: {avg:.1f}")

配列の応用操作

1. 配列の検索

fruits = ["りんご", "バナナ", "オレンジ", "いちご"]

# 線形検索
def find_fruit(fruits, target):
    for i, fruit in enumerate(fruits):
        if fruit == target:
            return i
    return -1

index = find_fruit(fruits, "バナナ")  # 1

# Python の組み込み機能
if "バナナ" in fruits:
    index = fruits.index("バナナ")

2. 配列のソート

numbers = [64, 34, 25, 12, 22, 11, 90]

# 組み込み関数でソート
sorted_nums = sorted(numbers)      # 元の配列は変更されない
numbers.sort()                     # 元の配列を変更

# 逆順ソート
numbers.sort(reverse=True)

# カスタムソート(学生の成績順)
students = [("田中", 85), ("佐藤", 92), ("山田", 78)]
students.sort(key=lambda x: x[1], reverse=True)  # 成績順

3. 配列のフィルタリング

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 偶数のみ抽出
even_numbers = [n for n in numbers if n % 2 == 0]

# 関数を使った方法
def is_even(n):
    return n % 2 == 0

even_numbers = list(filter(is_even, numbers))

# 条件に基づく変換
squared_evens = [n**2 for n in numbers if n % 2 == 0]

実践的な配列の使用例

1. ショッピングカートシステム

class ShoppingCart:
    def __init__(self):
        self.items = []
    
    def add_item(self, name, price, quantity=1):
        item = {"name": name, "price": price, "quantity": quantity}
        self.items.append(item)
    
    def get_total(self):
        total = 0
        for item in self.items:
            total += item["price"] * item["quantity"]
        return total
    
    def show_items(self):
        for item in self.items:
            print(f"{item['name']}: ¥{item['price']} x {item['quantity']}")

# 使用例
cart = ShoppingCart()
cart.add_item("りんご", 100, 3)
cart.add_item("バナナ", 80, 2)
print(f"合計: ¥{cart.get_total()}")

2. 学生成績管理システム

def analyze_scores(scores):
    if not scores:
        return None
    
    total = sum(scores)
    average = total / len(scores)
    highest = max(scores)
    lowest = min(scores)
    
    return {
        "平均": average,
        "最高点": highest,
        "最低点": lowest,
        "合計": total
    }

# 使用例
math_scores = [85, 92, 78, 96, 88, 74, 90]
result = analyze_scores(math_scores)
for key, value in result.items():
    print(f"{key}: {value}")

3. データ集計とグループ化

def group_by_category(data, key):
    groups = {}
    for item in data:
        category = item[key]
        if category not in groups:
            groups[category] = []
        groups[category].append(item)
    return groups

# 売上データの例
sales_data = [
    {"商品": "りんご", "カテゴリ": "果物", "売上": 1000},
    {"商品": "にんじん", "カテゴリ": "野菜", "売上": 800},
    {"商品": "バナナ", "カテゴリ": "果物", "売上": 1200},
]

grouped = group_by_category(sales_data, "カテゴリ")
for category, items in grouped.items():
    total = sum(item["売上"] for item in items)
    print(f"{category}: ¥{total}")

よくある間違いと対策

間違い1:インデックスの範囲外アクセス

# 悪い例
numbers = [1, 2, 3]
print(numbers[5])  # IndexError

# 良い例
def safe_get(arr, index, default=None):
    if 0 <= index < len(arr):
        return arr[index]
    return default

result = safe_get(numbers, 5, "存在しません")

間違い2:リストの参照による予期しない変更

# 問題のあるコード
original = [1, 2, 3]
copy = original        # 参照のコピー
copy.append(4)
print(original)        # [1, 2, 3, 4] 元のリストも変更される

# 正しい方法
original = [1, 2, 3]
copy = original.copy()  # または original[:]
copy.append(4)
print(original)        # [1, 2, 3] 元のリストは変更されない

間違い3:変数名の命名ミス

# 悪い例
l = [1, 2, 3]          # 'l' は '1' と区別しにくい
data = [1, 2, 3]       # 抽象的すぎる

# 良い例
scores = [85, 90, 78]  # 具体的で意味が分かる
user_ages = [25, 30, 35]

パフォーマンス考慮事項

配列操作の計算量

# O(1) - 定数時間
arr[0]                 # インデックスアクセス
arr.append(value)      # 末尾への追加

# O(n) - 線形時間
arr.insert(0, value)   # 先頭への挿入
arr.remove(value)      # 値による削除
value in arr          # 線形検索

# 効率的な操作
from collections import deque
queue = deque([1, 2, 3])
queue.appendleft(0)    # O(1) で先頭に追加

メモリ効率の改善

# リスト内包表記(メモリ効率的)
squares = [x**2 for x in range(1000) if x % 2 == 0]

# ジェネレータ(さらに効率的)
def squares_generator():
    for x in range(1000):
        if x % 2 == 0:
            yield x**2

squares = squares_generator()

学習ステップとロードマップ

初級レベル(1-2週間)

  1. 変数の宣言と代入の理解
  2. 基本データ型の使い分け
  3. 配列の作成と要素アクセス
  4. 基本的な配列操作(追加、削除)

中級レベル(3-4週間)

  1. 多次元配列の操作
  2. 配列の検索とソート
  3. リスト内包表記の活用
  4. 配列を使ったデータ処理

上級レベル(2-3ヶ月)

  1. 高度なデータ構造の理解
  2. パフォーマンスを考慮した実装
  3. アルゴリズムとデータ構造の組み合わせ
  4. 実践的なアプリケーション開発

実践練習問題

  1. 基礎練習:配列の要素合計、平均計算
  2. 中級練習:配列のソートアルゴリズム実装
  3. 上級練習:複雑なデータ構造を使った問題解決

まとめ

変数と配列は、プログラミングの基礎中の基礎です。これらの概念をしっかりと理解することで、より複雑なプログラムを作成できるようになります。

重要なのは、適切な命名規則を守り、データの型を意識してプログラムを書くことです。また、配列の操作では、インデックスの範囲外アクセスに注意し、効率的なアルゴリズムを選択することが大切です。

実際のプロジェクトでは、これらの基本概念を組み合わせて、ユーザーに価値を提供するアプリケーションを構築していきます。継続的な練習を通じて、プログラミングスキルを向上させていきましょう。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座