はじめに
今回はプログラムの初心者向けに基礎的な考え方についてまとめます。

解説というより…
メインスキルが3DCGの人間がどうやってプログラムを把握して使ってるのかという「考え方」をまとめたものとなってます。
PythonやRUSTあたりの言語を入れ、解説本を片手にしながら見ていくと分かりやすいと思います。
◆Python
・よく使われてるプログラム言語
・とりあえず学習しておけば外れなし
◆RUST
・最近注目されているプログラム言語
・低負荷かつ安定性が高いのが魅力
・バックグラウンドで動かすようなソフト開発向け
プログラムの基本的な考え方
プログラムは基本的に何かの入力を元にした「出力」を繰り返してます。

この出力は別の処理の「入力」として使えます。

また出力したモノを自身の入力に入れなおすこともできます。
(フィードバック回路)

このような入出力の処理を繰り返して複雑な回路は動いてます。
「人間の判断」や「動作」もある意味ではプログラムの一種と見ることができます。


○○さんはいつも金曜日の夜はカレーを食べるみたいな…。
○○さんというプログラムがあり、そこに「曜日(金)」と「時間(夜)」という入力が行われる「カレーを食べる」という出力を出すイメージ。
ただし人間は例外も起こす。
あくまでそう「見ることもできる」だけ。
以上がプログラムの基本的な考え方です。
入出力について
プログラムの基本的な入力は下記。
◆初期値
→ プログラム内に記述
◆センサーの値
→ 時間、温度、人間の操作、心拍数など
→ 人間の操作はマウスやキーボード、コントローラーなどの入力デバイスで取る
→ 入力デバイスの中身はセンサーの塊。(ボタンや半固定抵抗など)
◆加算/減算フィードバック
→ ある値に+1、-1をした値を繰り返し入力する処理
→ これを実行すると値が+1、+2、+3...と増えていく
→ forなどで回数指定して増える上限を決めるのが一般的
◆ランダムな値
→ 実行するたび結果が変わる処理
→ サルを完全に破壊する実験などで分かるように人間に依存性を作る
→ ゲームなどはランダム値の塊になりがち(30%の確率で会心ダメージのように)
→ 値の範囲を「0~100」にして30以下なら実行で30%の確率で実行のような処理が作れる
◆別プログラム
→ プログラムは処理用の値を出力する機能があるものがある
→ その値を受け取って別の処理が使うこともできる
→ プログラム同士をつなげる企画は「OSC、TCP、UDP」などが一般的

加算/減算フィードバックは下図のような回路になります。
この記事ではこれも「入力」の一種としてカウントしました。


というより私が「入力」と認識してるという話。
処理はプログラム内部で作ります。
「繰り返し処理」と「条件分岐」分を組み合わせて作成可能。
【変数の例】(RUST言語の場合)
let mut i = 0;
while i < 5 {
//ーーここに適当な処理を書くーー
i += 1;
}

細かいことはのちほど紹介しますが…
① let mut i = 0;で「i」という変数・受け皿を作り数字の0を格納。
② while指定した条件まで繰り返す
③ while i < 5 でiが5以上になったら処理を止める
④ whileの中に「i +1」を書くことで繰り返すたびにiの数値が上がる
⑤ 結果5回繰り返すと「i = 5」となるので処理が止まる
⑥ iの値を使った処理に組み込むことで繰り返すたびに処理を微妙に変えたものが作れる
※「;」はプログラム的には文字列の最後を表します。
日本語で言うなら「。」です。
あと出力は「用途次第」です。
あなたが何を作りたいかによってどのようにも変化します。

以上が入出力についての解説です。
プログラムの基本的な処理について(変数と演算)
次はプログラムの処理を見ていきます。
まず受け取った入力を使えるようにプログラム内で情報を規定する必要があります。
この規定は「変数」というモノで行われます。

【変数の例】(RUST言語の場合)
① → 「let a」で「a」という変数を作ります宣言
② → a:横の「: i8;」でデータ型を数字(-127~+128)と伝える。
③ → 初期値としてaに10を入力
let a: i8;
a = 10;
//ーーーーーー
※RUSTは入力した内容によってデータ型を推測する機能があります。
なので一気に書くなら「データ型」の記述は不要です。
let a = 10;
変数宣言の際はこれは○○ですと伝える「データ型」入力をするのが一般的です。

細かな描き方はプログラム言語で異なります。
だいたいの言語では下記の表記。
・整数は(int)
・少数は(folat)
・文字は(str)
C++だと整数を扱う変数なら下記のように書きます。
int a;
a = 10;
より細かなデータ型の解説はこちら(クリックで展開)
【データ型について】変数で扱う情報が “何” かをプログラムに伝える処理。
これがないと「2」を入力した場合「文字」か「数字」のどちらで扱えばいいか分からない問題が起こります。
//ーーーーー
【データ型の例】
・主に「整数、少数、文字、ブーリアン」かを区別する
・ブールはわかりやすく言うとスイッチ0(False)か1(Ture)でのみ処理が行われる
・RUST言語はそこに使うビット数まで指定して数値の範囲を決める
(↓RUST言語の場合↓)
◆整数の8bitは2通りの書き方ができる
i8 → -127~+128
u8 → 0~+255
※ビット数は(8,16,32,64,128まで対応)
◆少数は2通りのBit数を使い分ける
f32 → 32Bit少数(7桁、低負荷のゲーム向け)
f64 → 64Bit少数(15~16桁、後負荷でも制度が求められる研究や金融向け)
◆文字型
char → これで文字を使いますと伝える
中身の内容が文字ですよとPCに伝えるため ” や “” で囲むことが多い
これで囲むことで数字を文字として出せる
↓ーーRUSTの生成例ーー
let c: char = ‘A’
◆ブーリアン
0(False)か1(Ture)を使って行う処理。
RUSTならletで変数宣言してaやbの変数に = 0(False)か1(Ture)で入れる。
let a = false;
let b = true;
そしてプログラムは一般的に変数で入力した情報を加工します。
主な加工方法は「演算」です。


四則演算が一般的な「足し算、引き算、かけ算、わり算」です。
この4つが使えることさえ分かってれば一旦OKです。
ここまでの流れをまとめると下記。
1を入力 → 変数に1が整数と定義し格納 → 演算で+2を実行 → 3を出力。

先ほど紹介したデータ型を文字にすると下記のような処理になります。
1を入力 → 変数に1が文字と定義し格納 → テキスト出力処理を実行 → 文字として1を出力。

プログラムに数学は必要になる理由
プログラムは数学ができなくても動きます。
やってることは「入力 → 変数に格納 → 何らかの演算処理 → 出力」だけです。

ただこの「演算」部分に数学力が必要になることがあります。

簡単なツールを作るだけならいいですが…
ゲームを作るとなると数学力があった方が良い世界になります。

ゲーム開発では心地いい動きを作るために「三角関数 (sin)」や「ばね係数」を動きに組み込んで使ったりします。
今は良い時代になったのでChat GPTに聞けば何とかなります。
以上がプログラムの基本的な処理についての解説です。
複雑化する処理への対処(配列、関数、モジュール、ライブラリーなど)
複雑なプログラムを作っていると処理が複雑化します。
そして大量の「データ(文字)」で埋め尽くされます。

そこで使うのがパーツ分け機能です。
「タプル、配列、行列」で変数に2つ以上のデータを入れてまとめたり…
「関数、モジュール、ライブラリー」でプログラムの処理をまとめたりできます。

まとめることで一部だけ引き出して再利用したり…
プログラムの文字数を減らしたりできます。

無理やりわかりやすく言うと「フォルダー分け」です。
写真が増えすぎたので「フォルダー」を作り、まとめたりするイメージ。
フォルダーを分けることでフォトアプリなどで8月の思い出だけ引き出したりするのが可能。
そんな感じのことをプログラムでやるイメージです。
本職の人から怒られそうですが…
個人的に「処理」の根底にかかわる部分ではないので学習は後回しでも良いと思います。
以上が複雑化する処理への対処法です。
条件分岐でできることを増やす(if文)
プログラムには「条件分岐」という処理があります。
これを使うと入力に合わせて「A」や「B」などの2つ以上の出力を作れます。

一般的には「 if “条件” { “処理の内容” } 」で表されます。
これで一気にできることが増えます。


個人的に条件分岐がプログラムの一番の核だと思ってます。
この条件分岐があることで「ボタンを押したら○○を実行」のような処理が作れます。


これが無いとゲームのスタートボタンは押しても動きません。
攻撃を押しても攻撃せず、敵のHPが0になっても倒されない世界になります。
条件分岐で使える主な条件は下記。
= → 等しいなら
< → より大きいなら
<= → 以上なら
> → より小さいなら
>= → 以下なら

より大きい/小さいはその数字を含めません
以上/以下はその数字を含めます。
a=10
if a < 10 {} → 実行されない
if a <= 10 {} → 実行される
等しくないを表す場合は「else」を使います。
これで論理回路的な表現をするならNOTに相当することができます。

elseの状態の中で2つ以上の条件があるなら「else if」と書かないと動かない言語もあります。

そしてこんな感じの書き方になっていきます。
a=10
if a < 10 {}
else if a <= 10{}
else {}
2つ以上の条件付け(ANDとOR)
条件分岐の所は「2つ以上の条件」を設定できます。

2つ以上の条件は「AND」と「OR」で表されます。
記号だと andは&& になり、orは || になります。
【2つ以上の条件分岐】
・AND → 2つ以上の条件が両方有効なら実行
・OR → 2つ以上の条件のうちいずれか1つが有効なら実行
ANDは2つの条件が有効な時だけ実行されます。
直列でつなぐイメージ。

いずれか1方が有効が無効だと実行されません。

ORはいずれか1つが有効なら実行されます。
並列でつなぐイメージ。

もちろん2つとも有効でも実行されます。


他にもNAND(2個揃った時だけ無効)や…
XOR(両方が揃ってない、両方が揃うときに無効)などあります。
めったに使わないので解説を省きます。
必要になったらChat GPTに聞いて作ってください。
以上が条件分岐の解説です。
何かを操作するための処理を引き出す(配布ライブラリーやAPI)
これまで紹介した処理で “都合よくマウスやキーボードを操作できるの?” という問題があります。
「プログラム言語単体」ではできないことが多いです。

そこで使うのが配布されている「ライブラリー」や「API」です。
これを使うことで過去の猛者たちが作った仕組みで意図したものを動かすことができます。


ライブラリーやAPIを使わないと1 + 1 = 2と内部で計算しても…
640×320pxの画面を生成して「答え : 2」と書くようなことができません。
そんな感じの問題が多々起こります。
【ライブラリー】
・PCの中に入れて使うモノ
・プログラム言語の塊、部品の集合体
・特定の処理に使える
【API】
・特定のWEBサービスなどで配布されてるモノ
・ソフトウェアやサービスがデータや機能を使えるようにした仕組み
・Twitter(X)のBOTや抽選ツールなどは配布されてるAPIを引き出して動いている
これらのライブラリーを使うことで初めて画面を作ったり…
マウスやキーボードの値を読み込んだりできます。

時間、四則演算、文字表示などの標準的なモノはプログラム言語内に内蔵されてることがあります。
そのような場合は呼び出さなくても良いです。

マウスやキーボードの入力もプログラムに内蔵されてる事もあります。
細かくはChat GPTに聞きながら作りましょう。

ではこの「ライブラリー」や「API」はどうやって作るのと言われると…
もう私では「プログラムの猛者になる」としか言い表せません。
たぶんこの記事を見てる層の人はここまで考えなくて良いです。
天から降ってくるものぐらいの認識でいてください。
(というより私がそう認識してます)
以上が何かを操作するための処理を引き出すの解説です。
処理の表現方法(コードとノード)
プログラムは主に2通りの方法で書き表します。
コード → 文字だけで処理を書き表す
ノード → 図形に配線をするような形で書き表す
↓こんな感じの文字だけで処理を書く形式がコードになります。

↓こんな感じのオプジェクト呼び出し+配線処理を使って動かすのがノードになります。

アナログの電子回路や電子工作もある種のノードと考えれます。

ノードは慣れるとだんだん「配線の手間」や「ソフト特有の作法」が問題になってきます。
そして最初からコードでやらしてくれという世界になっていきます。
おまけ:よく見る画面の呼び方(GUI)
多くの人がパソコンを動かすために使ってる画面はGUIと呼ばれるものです。
これはプログラマーが一般人向けに使いやすいよう必要な情報だけを表示した画面になります。


このGUIを操作することでプログラム内部の処理を動かすことが可能です。
言い方を変えればプログラムのコントローラー的なモノです。
このGUIがなかったことは「CUI」という文字だけでパソコンを動かしてました。
今でもPowerShellなどを起動するとCUI操作が体験できます。
↓これはX:Rustのフォルダからcdでhello_cargoというフォルダ中に入る。
そしてdirでフォルダの中身を表示させる操作。

↓これの “画面” がなかった頃はこんな感じのことをしてましたという説明。


今は多くの場合でGUI操作で事足ります。
ただ、たまにCUIを使わないと動かないモノがあったりします。
RUSTというプログラム言語もCUI操作じゃないと動きません。
以上がよく見る画面の呼び方(GUI)の解説です。
まとめ
今回は初心者向けにプログラムの基礎的な考え方についてまとめました。
・基本的な考え方は「入力 → 処理 → 出力」の3つ
・処理を行うために情報を変数に入れて扱う
・処理の代表的なモノは四則演算
・人間側の数学力を上げれば高度な処理が使える
・複雑化するプログラムは配列、関数、モジュール、ライブラリーなどで対応
・条件分岐を使うと一気にできることが増える
・ライブラリーやAPIを使うと高度な操作や入出力の管理が行える
また他にもプログラムなどについて解説してます。
ぜひ、こちらもご覧ください。
コメント