mori– Author –
-
【C++】データ型の種類を徹底解説(基本型からポインタ、構造体まで)
はじめに C++プログラミングの根幹をなすのが「型」の概念です。全ての変数やオブジェクトは、必ず何らかの型を持ち、その型によって、どのような値を保持できるか、どのような操作が可能かが決まります。 この記事では、C++の型システムを構成する主要な... -
【C++】constとvolatileの使い分け | cv修飾子を徹底解説
はじめに C++で変数を宣言する際、int x; のように型を指定するだけでなく、const や volatile といった修飾子を付け加えることができます。これらは、その変数がどのように扱われるべきかをコンパイラとプログラマに伝えるための重要なキーワードです。 c... -
【C++】型の別名を付けるtypedefとusingの違いと使い方
はじめに C++で、unsigned long long や関数ポインタ void (*)(int) のように、型名が長くて複雑になることがあります。このような型を何度も記述するのは、コードを読みにくくし、typoの原因にもなります。 この問題を解決するのが「型の別名宣言(タイプ... -
【C++】autoとdecltype | 型の自動推論と取得の方法を解説
はじめに C++で、std::vector<std::string>::iterator のように、非常に長くて複雑な型名を手で書くのは、面倒で、typoの原因にもなります。 C++11では、このような問題を解決し、コードをより簡潔で読みやすくするために、型の自動推論の仕組みが導... -
【C++17】構造化束縛の使い方 | pair, tuple, structを分解して受け取る方法
はじめに C++で、std::pairやstd::tupleを返す関数を扱う際、従来はその戻り値を一度変数に受け取り、.firstやget<0>を使って個々の要素にアクセスする必要があり、少し冗長でした。 C++17で導入された構造化束縛は、この問題をエレガントに解決しま... -
【C++】4種類のキャストを徹底解説 (static_cast, dynamic_cast 等)
はじめに C++には、intからdoubleへ、あるいは親クラスのポインタから子クラスのポインタへ、といった**明示的な型変換(キャスト)**を行うための、4つの異なるキャスト演算子が用意されています。これらは、古いC言語スタイルのキャスト (type)value よ... -
【C++】newとdeleteによる動的なメモリ確保・解放を徹底解説
はじめに C++では、通常の変数は宣言されたスコープを抜けると自動的に破棄されます。しかし、プログラムの実行時まで必要なサイズが分からない配列や、関数のスコープを超えて存在し続けるオブジェクトを扱いたい場合、ヒープと呼ばれる特別なメモリ領域... -
【C++】sizeof, alignof等 | 型のサイズとアライメントを扱う方法
はじめに C++でパフォーマンスを意識したプログラミングや、ハードウェアに近い低レベルなデータ操作を行う際、オブジェクトがメモリ上で「どれくらいの領域を占めるか(サイズ)」や、「どのようなアドレスに配置されるべきか(アライメント)」を正確に... -
【C++】右辺値参照とムーブセマンティクス入門 | 不要なコピーをなくし高速化
はじめに C++で、大量のデータを格納したvectorやstringを関数から返したり、別の変数に代入したりすると、内部のデータが全てコピーされ、大きなパフォーマンス上のオーバーヘッドが発生していました。 例えば、巨大なデータが入ったvectorを返す関数があ... -
【C++】リテラルとは?数値、文字、文字列などの定数の書き方を徹底解説
はじめに C++でプログラムを書く際、私たちは様々な「値」を直接コードに記述します。これらの、ソースコード上に直接表現される固定値のことをリテラルと呼びます。 C++には、扱うデータの種類に応じて、様々なリテラルの記述方法が用意されています。こ... -
【C++】文とは?if, for, whileなど主要な制御文をまとめて解説
はじめに C++のプログラムは、セミコロン(;)で終わる文(statement)を上から下へ順番に実行していくことで成り立っています。C++には、単純な計算を行う文から、条件によって処理の流れを変える(制御する)ための制御文まで、様々な種類の文があります... -
【C++】スコープとは?グローバル、名前空間、ローカルスコープの違いを解説
はじめに C++で変数を宣言する際、その「宣言された場所」によって、その変数がプログラムのどこから見えるかが決まります。この「名前が見える範囲」のことをスコープと呼びます。 スコープを正しく理解することは、意図しない変数の上書きを防ぎ、プログ... -
【第2部】 Listをそのまま使わない。「ファーストクラスコレクション」で実現する、安全で凝集度の高いコード設計
この記事は、保守性の高いコード設計シリーズの一部です。前回の記事「【第1部】 forループのネストから脱却しよう。Stream APIと早期リターンで実現する、読みやすいコレクション処理」では、ループ処理をクリーンにする方法を学びました。 こんにちは。... -
【第1部】 forループのネストから脱却しよう。Stream APIと早期リターンで実現する、読みやすいコレクション処理
この記事は、保守性の高いコード設計シリーズの一部です。これまでの記事では、条件分岐を整理するための様々なデザインパターンを解説しました。今回は、多くの条件分岐が潜む「コレクションのループ処理」に焦点を当て、ネストを解消し、可読性を高める... -
【第3部】 複雑な条件分岐を賢く解決。ポリモーフィズムで実現する柔軟なルールエンジン設計
この記事は、保守性の高いコード設計シリーズの一部です。これまでの記事で、ifのネストを解消する「ガード節」や、switchの重複をなくす「ストラテジーパターン」を学びました。今回は、さらに複雑な条件分岐をエレガントに解決するための応用的なデザイ... -
【第2部】 switch文の増殖はバグの温床。ストラテジーパターンで条件分岐を撲滅する
この記事は、保守性の高いコード設計シリーズの一部です。前回の記事「【第1部】 ifのネストはもうやめよう。ガード節で可読性を劇的に改善するテクニック」では、ガード節を使ってif文のネストを解消する方法を学びました。 こんにちは。条件分岐には、if... -
【第1部】 ifのネストはもうやめよう。ガード節で可読性を劇的に改善するテクニック
この記事は、保守性の高いコード設計シリーズの一部です。これまでの記事では、クラス設計の原則について探求してきました。今回は、プログラミングの最も基本的な要素である「条件分岐」に焦点を当て、その可読性を損なう最大の要因である「ネスト」の問... -
PythonのpyautoguiでWebフォーム入力を自動化する
この記事では、pyautoguiライブラリを使い、ウェブサイト上のフォームにデータ構造から情報を読み取って自動的に入力し、送信するスクリプトの作成方法を解説します。この手法は、繰り返し発生するデータ入力作業を効率化するのに役立ちます。 注意:この... -
【C++】関数の基本 | 宣言・定義から戻り値の推論までを解説
はじめに C++プログラミングの中心となるのが「関数」です。関数は、関連する一連の処理を一つの単位としてまとめたものであり、プログラムを構造化し、コードの再利用性を高めるために不可欠です。 この記事では、C++の関数の基本を、以下のトピックに沿... -
【C++】クラス (class) とは?オブジェクト指向の重要概念を解説
はじめに C++におけるクラス (class) は、オブジェクト指向プログラミング(OOP)を実現するための中心的な機能です。クラスは、関連する**データ(状態)と操作(振る舞い)**を一つのまとまりとして定義した、オブジェクトの「設計図」として機能します... -
【Python】 pyautoguiによるスクリーンショット撮影とピクセル解析
この記事では、Pythonのpyautoguiライブラリを使い、画面全体のスクリーンショットを撮影する方法と、画面上の特定座標のピクセルの色を解析する方法について解説します。これらは、GUIオートメーションにおいて、プログラムが画面の状態を「見る」ための... -
Python pyautoguiによるマウス操作:クリック、ドラッグ、スクロール
この記事では、Pythonのpyautoguiライブラリを使い、マウスカーソルの移動だけでなく、クリック、ドラッグ、スクロールといった、より高度なマウス操作を自動化する方法について解説します。 1. マウスカーソルの現在位置を監視する GUIオートメーションの... -
Python pyautoguiによるマウスカーソルの移動と位置取得
この記事では、Pythonのpyautoguiライブラリを使い、画面上のマウスカーソルをプログラムで制御するための基本的な関数、moveTo()、moveRel()、position()、size()について解説します。 画面の解像度を取得する pyautoguiでマウスを正確に操作するには、ま... -
Python pyautoguiの安全機能:PAUSEとFAILSAFE
pyautoguiはマウスやキーボードを自動で操作できる強力なライブラリですが、スクリプトが意図しない動作をした場合に、ユーザーがコンピュータの制御を失うリスクも伴います。この記事では、そのような事態を防ぐための重要な安全機能であるpyautogui.PAUS... -
【C++】クラスメンバ徹底解説(変数・関数・型・アクセス制御)
はじめに C++のクラスは、オブジェクトの「設計図」です。この設計図は、メンバと呼ばれる様々な要素から構成されます。メンバを大きく分類すると、データを保持するための「メンバ変数」、操作を定義する「メンバ関数」、そしてクラス固有の型を定義する... -
【C++】クラスのメンバ変数 | データの種類とアクセス制御を徹底解説
はじめに C++のクラスは、オブジェクトの状態を表すデータを保持します。このクラス内で宣言された変数のことを「メンバ変数」または「データメンバ」と呼びます。メンバ変数には、オブジェクトごとに存在する通常の変数、クラス全体で共有される静的変数... -
【C++】継承のすべて | 仮想関数から抽象クラス、多重継承までを徹底解説
はじめに C++の**継承 (Inheritance)**は、オブジェクト指向の三本柱の一つであり、コードの再利用性を高め、拡張性の高い階層構造を構築するための強力な機能です。 この記事では、C++の継承にまつわる以下の主要な概念を、RPGのキャラクターを例に、網羅... -
【C++】関数オブジェクト(ファンクタ)とは?()演算子オーバーロードの使い方
はじめに C++のstd::sortのような標準アルゴリズムは、ソートの順序などをカスタマイズするために、比較ルールを引数として受け取ることができます。この「ルール」を渡す方法の一つが、**関数オブジェクト(ファンクタ)**です。 関数オブジェクトは、()... -
PythonのPillowで画像に図形やテキストを描画する方法
この記事では、Pythonの画像処理ライブラリPillowを使い、画像上に線、矩形、円、多角形といった図形や、様々なフォント・サイズのテキストを描画する方法を解説します。これらの機能は、ImageDrawモジュールとImageFontモジュールによって提供されます。 ... -
PythonとPillowで複数の画像にロゴを一括で追加する
この記事では、Pythonの画像処理ライブラリPillowを使い、特定のフォルダ内にあるすべての画像ファイルに、ロゴやウォーターマークを一括で追加する実用的なスクリプトの作成方法を解説します。 1. 準備:Pillowのインストールとファイル配置 このスクリプ...