-
【第3部】 メソッドチェーンは危険信号?「デメテルの法則」で実現する疎結合なクラス設計
この記事は、保守性の高いコード設計シリーズの一部です。これまでの記事で、凝集度を高めるための様々なテクニックを見てきました。今回はその総仕上げとして、クラス間の「お作法」とも言える重要な設計原則を学びます。 こんにちは。皆さんは、object.g... -
【第2部】 メソッドの引数、多すぎませんか?「プリミティブ型執着」を乗り越えるクラス設計
この記事は、保守性の高いコード設計シリーズの一部です。前回の記事「【第1部】 そのstaticメソッド本当に必要?凝集度を高める設計の基本」では、データとロジックを一つにまとめることの重要性を見ました。 こんにちは。メソッドを設計する際、その「顔... -
【第1部】 そのstaticメソッド本当に必要?凝集度を高める設計の基本
この記事は、保守性の高いコード設計シリーズの一部です。これまでの記事では、クラスの内部構造を堅牢にする「不変性」などについて解説しました。今回は、クラスとクラスの関係性に目を向け、ソフトウェアの変更を困難にする「低凝集」の問題とその解決... -
【第2部】 副作用をなくす設計術:不変オブジェクトがもたらす絶大な安定性
この記事は、保守性の高いコード設計シリーズの一部です。前回の記事「【第1部】 変数の再代入はなぜ悪い? finalで学ぶ、追跡しやすいコードの書き方」では、finalを使ってメソッド内部のコードを安定させる方法を学びました。 こんにちは。前回の記事で... -
【第1部】 変数の再代入はなぜ悪い? finalで学ぶ、追跡しやすいコードの書き方
この記事は、保守性の高いコード設計シリーズの一部です。これまでの記事では、クラス設計の基本として「完全コンストラクタ」や「値オブジェクト」を解説しました。今回は視点をメソッド内部に向け、コードの安定性を損なう「再代入」の問題とその解決策... -
【第2部】 不変性(Immutability)が鍵!安全な操作を実現する値オブジェクト設計入門
この記事は、保守性の高いコード設計シリーズの一部です。前回の記事「【第1部】 バグを未然に防ぐクラス設計:完全コンストラクタで実現する自己防衛責務」では、オブジェクトが不正な状態で生成されるのを防ぐ方法を学びました。 こんにちは。前回の記事... -
【第1部】 バグを未然に防ぐクラス設計:完全コンストラクタで実現する自己防衛責務
この記事は、保守性の高いコード設計シリーズの続編です。前回までの記事では、メソッドや変数の整理方法を解説しました。今回は、オブジェクト指向設計の核となる「クラス」に焦点を当て、バグを未然に防ぐための堅牢な設計手法を探求します。 こんにちは... -
【第2部】 データとロジックをまとめよう:クラスで実現する、堅牢なコード設計
この記事は、保守性の高いコード設計シリーズの一部です。前回の記事「【第1部】 読みやすいコードの第一歩:変数とメソッドの正しい扱い方」では、変数とメソッドを整理し、コードを読みやすくする方法を解説しました。 こんにちは。前回の記事では、変数... -
【第1部】 読みやすいコードの第一歩:変数とメソッドの正しい扱い方
この記事は、保守性の高いコード設計シリーズの一部です。プログラミングの初歩から一歩進んで、誰が読んでも理解しやすいコードを書くための具体的なテクニックを紹介します。 こんにちは。プログラミングを始めたばかりの頃は、とにかく動くコードを書く... -
データと振る舞いを分離させない!凝集度の高いクラス設計のすすめ
この記事は、読みやすいコードを書くための実践ガイドシリーズの一つです。前回の記事「深すぎるネストはバグの温床!ガード節でシンプルにする条件分岐の書き方」では、条件分岐をシンプルにする方法を解説しました。 こんにちは。今回は、オブジェクト指... -
深すぎるネストはバグの温床!ガード節でシンプルにする条件分岐の書き方
この記事は、読みやすいコードを書くための実践ガイドシリーズの一つです。前回の記事「その名前、未来の自分を苦しめますよ?読みやすいコードを書くための命名規則入門」も併せてお読みいただくと、より理解が深まります。 こんにちは。今回は、コードの... -
その名前、未来の自分を苦しめますよ?読みやすいコードを書くための命名規則入門
この記事は、読みやすいコードを書くための実践ガイドシリーズの一つです。コードの品質を向上させるための基本的なテクニックを紹介していきます。 こんにちは。ソフトウェア開発において、私たちはコードを書く時間よりも、他人の(あるいは過去の自分の... -
PythonのsmtplibでEメールを送信する方法(Gmail対応版)
この記事では、Pythonの標準ライブラリであるsmtplibモジュールを使い、GmailなどのSMTPサーバー経由でEメールを送信するスクリプトの作成方法を解説します。スパムとして判定されないよう、適切にフォーマットされたメールを作成するemailモジュールも併... -
Pythonでアラーム音付きのシンプルなカウントダウンタイマーを作成する
この記事では、Pythonのtimeモジュールとsubprocessモジュールを使い、指定した秒数をカウントダウンし、終了時にアラーム音を鳴らすコマンドラインタイマーの作成方法を解説します。 1. プロジェクトの概要と準備 このスクリプトは、以下の2つの主要な機... -
Pythonのsubprocessモジュールで外部プログラムを実行する方法
この記事では、Pythonの標準ライブラリであるsubprocessモジュールを使い、Pythonスクリプトから外部のアプリケーション(電卓やメモ帳など)やコマンドを実行する方法について解説します。 subprocess.Popenによる非同期なプログラムの起動 subprocess.Po... -
Pythonのthreadingモジュールによるマルチスレッド処理入門
この記事では、Pythonのthreadingモジュールを使い、プログラム内で複数の処理を同時に(並行して)実行するためのマルチスレッド処理の基本について解説します。 シングルスレッドの問題点 通常のPythonプログラムは、書かれた順に一行ずつ処理を実行する... -
Pythonのdatetimeモジュール入門:日付と時間の操作
この記事では、Pythonで日付と時刻を扱うための標準ライブラリdatetimeモジュールの基本的な使い方を解説します。現在時刻の取得、特定の日時の表現、時間差の計算、そして日付と文字列の相互変換について説明します。 datetimeオブジェクト datetimeモジ... -
Pythonでコマンドラインストップウォッチを作成する
この記事では、Pythonのtimeモジュールを使い、ラップタイムも計測できるシンプルなコマンドラインベースのストップウォッチプログラムを作成する方法を解説します。 1. プログラムの設計 このストップウォッチは以下のロジックで動作します。 プログラム... -
Pythonのtimeモジュール入門:時間計測とプログラムの一時停止
この記事では、Pythonの標準ライブラリであるtimeモジュールを使い、プログラムの実行時間を計測したり、処理を一時的に停止させたりする基本的な方法について解説します。 time.time()関数:エポック秒の取得 time.time()関数は、エポックと呼ばれる基準... -
Pythonでコマンドライン天気予報ツールを作成する
この記事では、Pythonを使って、指定した地名の3日間の天気予報を取得し表示する簡単なコマンドラインツールを作成する方法を解説します。requestsモジュールで気象情報APIにアクセスし、返されたJSONデータを解析します。 1. 準備:必要なモジュールとAPI... -
PythonのjsonモジュールによるJSONデータの操作
JSON(JavaScript Object Notation)は、ウェブAPIや設定ファイルなどで広く使われる、軽量なデータ交換フォーマットです。Pythonの標準ライブラリであるjsonモジュールは、Pythonのデータ構造(辞書やリスト)とJSON形式の文字列を相互に変換するためのシ... -
Pythonで複数のCSVファイルからヘッダー行を削除するスクリプト
この記事では、特定のフォルダ内にあるすべてのCSVファイルから、先頭のヘッダー行を自動的に削除し、その結果を新しいファイルとして別のフォルダに保存するPythonスクリプトの作成方法を解説します。 1. プロジェクトの概要と準備 このスクリプトの目的... -
PythonのcsvモジュールによるCSVファイルの読み書き
Pythonの標準ライブラリであるcsvモジュールは、CSV(Comma Separated Values)形式のファイルを読み書きするためのシンプルで強力な機能を提供します。この記事では、その基本的な使い方を解説します。 CSVファイルの読み込み CSVファイルを読み込むには... -
【C++】オーバーロード入門 | 関数と演算子を多重定義する方法
はじめに C++では、同じスコープ内に、同じ名前の関数や演算子を複数定義することができます。これを**オーバーロード(多重定義)**と呼びます。コンパイラは、渡された引数の型や個数(シグネチャ)を元に、どのバージョンを呼び出すべきかを自動的に判... -
【C++】テンプレート (template) 入門 | 汎用的な関数とクラスの作り方
はじめに C++のテンプレート (template) は、型をパラメータ化することで、汎用的なコードを書くための非常に強力な機能です。単に関数やクラスを汎用化するだけでなく、可変長の引数を扱ったり、特定の型に対して特別な処理を定義したりと、C++の表現力を... -
【C++】constexprとは?コンパイル時定数を使いこなす方法
はじめに C++で、配列のサイズやテンプレートの引数を指定する際、その値はコンパイル時に確定している必要があります。従来は、const修飾子を付けた定数などがこの役割を担っていましたが、より複雑な計算結果をコンパイル時定数として扱いたい、という要... -
【C++】ラムダ式の使い方を徹底解説(キャプチャ、ジェネリックラムダ)
はじめに C++でstd::sortやstd::find_ifのような標準アルゴリズムを使う際、条件を指定するためだけに関数を別途定義するのは面倒な場合があります。 C++11で導入されたラムダ式は、このような「その場で使い捨ての簡単な関数が欲しい」という要求に応える... -
【C++20】コルーチン入門 | 処理を中断・再開できる関数の作り方
はじめに C++の通常の関数は、一度呼び出されたら、returnするまで処理を中断できません。しかし、非同期処理や、データを少しずつ生成するジェネレータのような機能では、「処理の途中で一旦中断し、呼び出し元に制御を戻し、後でまた続きから再開する」... -
【C++】プリプロセッサ指令 (#include, #define, #if 等) の使い方を徹底解説
はじめに C++のソースコードが、コンパイラによって機械語に翻訳される前には、「プリプロセス(前処理)」というステップが存在します。プリプロセッサは、このステップで動作し、# で始まる特別な**ディレクティブ(指令)**に従って、ソースコードのテ... -
【C++】名前空間 (namespace) の使い方を徹底解説(スコープ、エイリアス、using)
はじめに C++で大規模なプログラムを開発したり、複数の外部ライブラリを組み合わせて使ったりすると、異なる場所で定義された関数や変数が、偶然同じ名前を持ってしまうことがあります。これを「名前の衝突(競合)」と呼び、コンパイルエラーや意図しな...