処理を実装する際には、挙動を設計する必要がありますが、構造を思考する際には最初に準備しておく内容が存在しています。
動作の最小構成は、
■ 入力
■ 出力
になりますが、回路で考えると電源と豆電球で構成された閉回路のような構造になりますが、ここにオンとオフの選択を追加する際にはスイッチを追加することになります。
これが二値の入力による判定になりますが、この構造にすることで、操作による状態の変化を追加することができるようになります。
入力の変化
スイッチには
■ タクトスイッチ
■ トグルスイッチ
があり、これによって、
■ 押したときだけオンになる
■ オンとオフの状態を維持する
という異なる状態を作れる仕様のものがあります。
前者の場合、押した時間でパルス信号を出すことができますが、この信号の出し方も構造によって制御することができます。
マインクラフトでは、レッドストーンが使用できますが、この際に信号の種類を変更することができるようになっています。
シューティングゲームを作る場合、ショット用の入力として
■ 一定間隔で射出
■ 貯め
■ 連射
で動作するように指定する場合がありますが、この構図もレッドストーン回路で使い分けることができます。
ショットのタイミングを指定する場合、連続入力を行うまでの感覚を開ける必要がありますから、信号の場合だと
のようになります。
シューティングゲームではチャージができる物がありますが、こうした処理だと
のようになります。操作部分で考えるとタクトスイッチを実装すればいいのですが、カウントの上限を用意しておいて、ボタンを押している状態の時に時間単位でカウントを行いチャージの状態を確認し、最大値で離すと条件に応じた処理をするような流れになります。
ゲームの場合、【 連射 】が存在しますが、これについては、
のような構造になります。
これは、タイマー回路を使用した構成になりますが、これを用いることで、クロックのタイミングを指定して連射を行うことができます。
マイクラの感知板の場合
のようにアイテムが乗っているだ状態で動作しますが、回収すると切れます。
ボタンの場合、
のように押した時に点灯した状態が維持されるようになっています。
クロック回路の構造については、
のように信号を出した後に切れるような構造のか色を連続して動作させるような仕組みになっています。これを使うと
のような回路を使うことができますが、こうしたパルス信号を連続して出す回路がクロック回路になります。クロック回路を使用すると、
のような構造になりますが、クロック信号を使用すると
のようになります。信号については、
■ パルス
■ ロック
の選択がありますが、前述のクロック信号が連続して処理を実行する時に使用するものになりますが、データを記録する際にはラッチなどを使用します。操作で考えると、
■ 感知版
■ レバー
を使うことになります。レバーは手動で状態にをロックをかけることができるので、メモリーのような挙動をすることになりますが、通常の構造だとこうした物を併設して論理和(OR)で処理をすることになります。
こうした併設の構造ですが、論理ゲートを使用すると
のようにすることで、片方を選択するともう片方の選択ができなくなるような仕組みを作ることができますが、マイクラのレッドストーンリピーターには遅延だけでなく、
のようなロック機構があるので、
のような形でセレクターを作ることができます。これでデコーダーを制御すると
のようなものを作ることができます。この
■ ロックをかける
■ 遅延を入れる
という処理を使用すると、
のような構造にするだけで、片方だけの信号を得ることができるようになります。
信号を送ると
のようにリピーターロックがかかりますが、この時に
のようにリピーターロックがかかります。この状態でもう一方から信号を送ると
のようになります。この視点を変えると
のようになりますが、片方の信号を切ると
のようにロックが切れるだけで状態は維持されます。
この構造は、
■ 信号の入力(固定)
■ 信号の追加(遮断)
ができるので、選択後に固定をする指定で切断を同時に行えば、いずれかの選択しかできない仕組みを作ることができます。
処理とコード
処理を行う際には、入力とその後の変化で挙動が変わりますが、前述の処理では、
■ 状態の記録
■ 入力後の状態変化
を扱いました。こうした処理は、Scrarchでブロックを使用して処理を実装する場合にも使用しますが、処理を粉うさ井伊は、
■ 処理の実行
■ 持続時間
でコントロールすることがります。Scratchでは、 【 ()秒待つ 】 のようなブロックがあるので、処理の跡にこれを使用することで、 【 持続時間 】 を実装します。この考え方は、マイクラの音ブロックと同じですが、このブロックでは遅延を入れることで音価を追加できるようになっています。
処理を行う上では、アプリケーションとデバイス制御の双方で遅延を使用しますが、これにより挙動の変化を与えることができるようになっています。
これが 【 タイミングの調整 】 になりますが、何かの処理を実装した時に処理の順序を決めたり、速度の調整などを行う時に遅延を入れることになります。
Pythonの場合だと、timeモジュールをインポートして、
time.sleep(秒数)
で指定すると遅延を入れることができますが、処理を実装する場合には、
■ 動作
■ タイミングの調整
を行うことになります。
Pythonだとturtleで遅延による制御を行いますが、この際に
■ 一瞬で描画
■ 移動がわかるように描画
を行う際に遅延の量を指定することになります。
処理とコード
プログラミング言語を使用してコードを書く際には、使用するものを事前に用意することになりますが、
■ ライブラリ
■ 変数
■ 関数
■ クラス
などを事前に用意して、それを使用して処理を実装します。そのため+、これを最初に記述してから処理を書いていくことになります。
高校の情報Iでは関数まで学習しますが、関数を使用する際も処理の前に関数を記述します。この記述方法はPascalも同様の書式になっているのでPascal型と言われていますが、C++では、main関数の後ろに関数を配置することもできます。Pythonでもmain関数を使用すると、C++のように関数をmain関数以降に配置できるようになっています。
Pythonを使用して組み込み関数だけでコードを書く場合だと、
■ 変数を用意する
■ 処理を実装する
と言う流れを考えるので、この基本構造の処理の部分に工程が入る形になります。
この構造だと
■ 材料 : 変数
■ 加工 : 処理
ということになりますから、処理の順番を工程で指定するようにコードを書くことになります。
標準ライブラリは、組み込み関数では実装されていないものが多く収録されているので、複雑な処理を行う際にはこれを使用します。
ただし、Pythonの場合、標準ライブラリよりも高速に動く外部ライブラリなども存在しているので、外部ライブラリを追加して処理をすることもあります。
標準ライブラリを使用する場合には、
【 import モジュール名 】
で指定することになりますが、これは、外部ライブラリも同じです。
コンソールアプリとデスクトップアプリ
高校の情報Iでは、Pythonを使用しますが、Anacondaなので、ライブラリの追加はcondaで行っていると思います。Pytyhonをインストールした状態だとcondaはオプションなので、通常は、pipを使用して外部モジュールの追加を行います。
WINDOWS環境だと
■ コンソールアプリ
■ デスクトップアプリ
を作成できますが、LinuxやMACの場合、tkがないのでインストールする必要があります。tkのインストール後に
■ tkinter
■ turtle
が使用できるようになるので、デスクトップアプリの生成をおk萎えるようになります。
Pythonに限らず、ほとんどのプログラミング言語はコンソールアプリを作る仕様になっているので、ウィジェット環境を追加してからウィジェットとの連携をするようなコードを書いてデスクトップアプリを作ることに生るので、内部処理の部分はコンソールで動作するコードと同様のものを使うことになります。
コンソールアプリでは、
■ 入力 : input
■ 出力 : print
を使用するか、
■ 入力 : sys.stdin
■ 出力 : sys.stdout
を使用することになりますが、デスクトップアプリの場合だと、この入力と表示がウィジェットになるので、コンソールアプリでは発生しない 【 ウィジェットの制御 】 が発生します。
この辺りは、HTML+ES(JavaScript)の組み合わせで、コンテンツの制御をするのと同じですが、この構造は、
■ 表示 : HTML
■ 装飾 : CSS
■ 制御 : ES(JavaScript)
で行うようになっています。
■ 表示用の枠組み
■ デザイン
■ 制御
は個別のものになっていますから、これらをすべて覚える必要がありますが、フロントエンド(人が操作したり見えていたりする部分)のプログラムを行う場合には、制御を行う記述だけでなく、表示の制御方法も学習する必要があります。デスクトップアプリもフロントエンドがあるので、コードの書き方だけでなくウィジェットの取り扱いや連携の方法について学習する必要があります。
このようにフロントエンドはオプション扱いなので、ウィジェット環境が存在しないプログラミング言語も存在するので、基本となるのはコンソールアプリの制作とその方法になります。
これらは、 【 人が操作したり見ることがない部分 】 なので、バックエンドになりますが、自動処理などのように 【 そもそも人が触れることのない処理 】 についてはバックエンドの処理を行うことになります。
こうした自動制御の事例で考えると、
■ ドローンの制御
■ マイコンによるデバイスの制御
が含まれますが、ワンボードマイコンによる制御などは人に触れることはありませんから、バックエンドと同じように人に見えない部分の処理を実装して動かすことになります。
プログラミング言語の学習時には、自動処理の部分を扱うことになりますが、この時に内部処理だけだと初期値として
■ 乱数
■ 初期化した値
しか使用できないので、 【 入力値 】 を使うことができません。その為、表示を行うだけでなく、入力を行うinputなどを組み合わせて使用することになります。
組み込み関数と実装機能
組み込み関数では、
■ 変数(配列含む)
■ 関数
■ クラス
の生成が可能で、処理で必要に生る
■ 順次 : 順番に処理する
■ 反復 : 繰り返す
■ 分岐 : 判定を行う
を実装できるようになっています。その為、ある程度のことは組み込み関数でできるので、組み込み関数だけでもアプリケーションを作ることができます。
アプリケーションの場合、
■ 操作
■ 応答
が必要になりますが、
■ 操作 : input
■ 応答 : print
で行うことになります。
この時の処理の最小構成は、
a=input('値を入力してください')
print(a)
となりますが、この構成にすることで、入力したものを使用した処理を実装することになります。inputは1文字入力ではなく、
■ 入力待ち
■ バッファへのデータの記録
■ Enterキーで確定
■ 変数に値を代入
■ メモリーの区画にデータを記録
のような流れになっているので、操作としては、
■ 入力
■ Enterキーでの確定
を行うようになっています。入力待ちは、
■ 処理を止める
■ Enterキーを押すと処理が再開
と言う流れになっているので、コード内に実装すると、
【 処理を一旦止める効果 】
があります。また、入力した値はEnterキーで確定させるので、リアルタイム処理が必要なイベントハンドラのような動作にはならないので、
■ 質問 : PC
■ 応答 : 人
■ 返答 : PC
のような受け答えのような形の処理に限定されます。また、座標をそのまま指定するようなことはできないので、
【 入力した値で判定をする 】
ことになりますから、クリックイベントのような座標を選択するような処理を実装することはできません。
これが、input関数を使用した際の処理になりますが、これをprint関数を使用することで、変数に格納した値を使用することができます。
この構成では、値の表示しかできないので、この構造を
t1='\t入力した値は、'
t2='です。\n'
a=input('値を入力してください_ ')
print(t1+a+t2)
のようにすると
入力した値は、(変数aの値) です。
のようになります。input関数は文字列型で値を取得するのですが、Pythonでは、文字列同士だと+を使用することで結合できるので、上記のような処理を実装することができます。
この構造は、
■ 確定した値
■ 入力した値
になっていますが、他のプログラミング言語だと、上記の変数部分は定数として扱えますから、C言語だと構造体などで管理することになります。C言語のコードでstructを使用すると定数を固めて管理することができるのですが、この構造をその都度メモリーに展開すると容量が無駄に肥大化するので、ポインタを使用した管理を行うようことで、使うデータのみを使用する仕組みになっています。
変数の宣言をすると箱の中にデータを入れるような仕組みになっているわけですが、この構造だと用意した箱をすべて呼び出すことに生るので、無駄が多いので、C言語ではポインタを使用することでデータにタグを貼り付けて管理をするような形になっています。
Pythonのリストもそういった構造になっています。その為、
■ 変数 : 箱
ですから、考え方としては、中学校一年生の数学の項のカリキュラムで登場する 【 変数項 】 と同じ構造になっていますが、配列を使用した場合、この構造だと扱いにくいので、C言語のポインタを使用したときのような管理方法が用いられています。
上記の構造は、
■ 定形の文面
■ 変数
で構成されているので、差し込み印刷と同じ構造になっています。
オフィースソフトではテンプレートを用意してスプレッドシートのセルの内容を参照して書面を作ることもできますが、データベースソフトのレコードを参照してレポートを作るのも同じ考え方になります。
オフィースソフトでは、スクリプトによる自動処理ができますが、基本的な考え方は同じです。現在のオフィースソフトでは、標準実装のスクリプト言語とは別にPythonにも対応しているので、処理の記述を覚えるとPythonのコードでExcelの制御をすることができます。
この構造は、
■ 変数(定数)の実装
■ 変数(入力値)の取得
■ データの結合
■ 表示
を行っていますが、変数を扱う場合には何かしらの処理を行ってから結果として出力することもできます。
変数の場合、
■ 数値
■ 文字
がありますが、この区別は、引用符の有無で区別します。
と言っても、他のプログラミング言語のように型を指定して変数の宣言を行うこともできるようになっています。初期に登場するものは、
■ a=1
■ a='Hello,Python!'
のようなものですから、文字列には
■ ' : シングルクォーテーション
■ " : ダブルクォーテーション
で囲むようになっています。この時の型ですが、
■ 数値型
■ 文字型
になりますが、数値は整数と少数点数で型が異なるので
■ 数 値 : int
■ 小数点数 : float
■ 文字列 : str
のようになっています。前述のようにinput関数は文字列型になるので、変数に格納するとstr型になりますが、これを数式で使用する場合には、数値に変更する必要があります。この時に整数を用いる場合だと、int型二変更する必要があるので、
a=int(input(text))
のように処理をint()で囲むことになります。
例えば、
a=1
a1=str(a)
print(a+a)
print(a1+a1)
のようにすると、
■ 数字 : a+a
■ 文字 : a1+a1
になりますから、
■ a+a : 2
■ a1+a1 : 11
のようになります。a1+a1は先程の文字列の結合になりますが、同じ処理でも整数のint型の場合だと計算を行うことができます。
工程を実装する
先程のコードでは、
■ 入力
■ 文字列の結合
■ 表示
のような処理でしたが、この構造も連続して配置をすることができます。例えば、
a=input('お名前は?')
print(a+'さんですね。')
a1=input('年齢は?')
print(a+'さんは、'+a1+'歳ですね。')
a2=input('性別は?')
print(a+'さんは、'+a2+'ですね。')
のようにすると、質問と応答ができます。この仕組みですが、input関数の実行ごとに変数を追加しているので、メモリー内に追加した値は記録されます。
これがプログラミング言語を使用してコードを実行した時の仕組みになりますが、メモリー内のデータを初期化するか、もしくは、メモリーの開放をしない限りこうした変数の値は維持されるので、変数に代入された変数の値を常に使うことができるようになっています。
上記のコードでは、名前の変数aを再利用しながら文面が構築されていますが、それ以外の部分は、定形フォーマットとなているので、この部分を変数で記録しておけば、文字列の結合だけで同じ処理を行うことができます。
配列による管理
先程のコードを見てみると、文字列は、
■ は
■ さん
■ ですね。
■ 、
■ ?
で構成されているので、表示はこの文字列だけで構成されています。これに対して、
■ お名前
■ 年齢
■ 性別
のようなデータがありますから、これらを変数で管理しておけば、文字列の結合だけでこの処理を行うことができます。これを変数で管理する場合、個別に変数を用意してもいいのですが、これらを見てみると、
■ 主要の文字列
■ 質問内容
で分けることができます。Pythonでは、複数の変数を一つにまとめて処理をする 【 リスト 】 が用意されているので、配列の中に複数のデータを格納して処理を行うことができます。
配列は、
配列名=[値,値,値,値,...]
のような形でデータを格納することができます。Pythonでは、\を使うとコードを途中で開業が行えるので、
t1=[\
'は'\
'さん'\
'ですね。'\
'、'\
'?'\
]
t2=[\
'お名前'\
'年齢'\
'性別。'\
]
のように格納することができます。この値を取得する際には、
配列名[インデックス]
で指定することになりますが、インデックスは桁の中に格納できる数字の変化で推移するので、十進数だと[0]〜[9]のような構造で、推移します。その為、リスト内の一番最初の値を呼び出す場合だとインデックスは0になります。その為、上記の宣言をして、
【 お名前は? 】
のような文字列を作る場合だと、
【 t2[0]+t1[0]+t1[4] 】
のような構造になります。この構造をリストに格納することもできるので、文字列をインデックスで管理をすることもできます。
プログラミング言語では、データの管理が主体になりますが、表示を行う場合には、変数の制御を行うことに生るのでデータの管理が必要になります。また、アプリケーションを作ると 【 表示 】 を行うことに生るので、
■ 座標
■ 文字列
■ 数字
を扱うことになります。座標は数値で指定したものですし、数字はそのままですが、文字列についてもデータなので、この管理が必要になります。こうしたデータは、
■ 定数 : 変化しない
■ 変数 : 変化する
という特性の違いで分けて考えることになりますが、通常は動かすことを前提に考えるので、変数を使うことになります。
今回は、
■ 変数の宣言
■ 変数の代入
をセットで行う 【 初期化 】 を行っていますが、Pythonだとこの記述で変数二値を代入した状態で宣言することが多いです。
データについては、単体の記録とリストのような複数のデータを格納した構造のものがありますが、これは、集合や行列のような構造なので、リストのような配列は、数学で使用する
■ 集合
■ 行列
を扱う際にも使用できます。
コンソールで動作するものを作る場合も
■ リスト
■ input関数
■ print関数
を使うと質問と応答のような構造で、記録した変数を使って対話のような処理を実装することができますが、この状態だとアプリケーションを作ることができません。
それは、この処理が、一度実行すると終わる構造になってしまうのと、【 判断と言う概念がない 】 ためです。
今回のコードは、先頭から末尾に向かって処理が行われるような構造になっていますが、このような構造の処理のことを 【 順次 】 といいます。
コードの場合だと、
のようになりますが、プログラミング言語を使用して記述したコードも最小構成にすると、このような形で上から順番に処理を行う仕組みになっています。
現在のプログラミング言語では、関数を使用できるので、
のように関数を使用できますが、これは、高校の数学で登場する
【 関数本体 】
■ f(x)=3x+9
【 値の代入 】
■ f(10)
と同じ構造になっています。その為、プログラミング言語でも
■ 関数の宣言
■ 引数を指定して実行
のような形にできますが、値を代入して解を求めるという点は数学もプログラミング言語も同じですが、プログラミング言語では、関数内の値をそのまま参照できないので、戻り値を出力することで使用する作りになっています。その為、関数の宣言では、
のように
■ 引数
■ 戻り値
を使用する構造になっています。引数を参照して、処理に反映させて、その結果を実行時に戻り値として使用することになります。その為、関数では、
のようにreturnを使用して関数内の値を出力する仕組みになっています。
そして、プログラミング言語の関数の戻り値は、そのままでは使用できないので、変数に代入して使用することになります。
Pythonだとinput関数が同様の記述になりますが、関数を使用する場合も変数に代入する形になります。その際に引数を使用する記述だと実行時に引数を追加します。この構造は、数学の関数と同じですが値をそのまま使用できないという点が数学の関数との違いになります。その為、関数を実行する際には、
のように関数を変数に代入して使用することになります。
関数を使用すると、処理を一つにまとめることができますが、これは、マイクロソフトオフィースのスクリプトによる自動処理で使用するVBAのプロシージャと同じ考え方になります。
VBAは少し特殊なので、 【 subプロシージャ 】 が存在しますが、関数は、 【 functionプロシージャ 】 と同じものと考えることができます。VBAでは、プロシージャと言う処理の塊を一つの構造物として扱うので、
BASICしか知らない場合には
何に事だか解らない仕様
になっていますが、この処理の塊を実装することで挙動を指定することになります。VBAはVisualBASICベースなので、プロシージャ内に記述する時のコマンドがBASICなので理解しやすい作り担っていますが、他のプログラミング言語同様にウィジェットを使用すると見たこともない記述になるので、フォームを使うだけで ”未知のプログラミング言語” になってしまいます。
オフィースソフトのマクロもゲームエンジンで任意のプログラミング言語を使用しているのと同じなので、考え方としては、外部ライブラリで使用できる物が大量に存在しているだけですから、VisualBASICの基本的な処理の実装方法を踏襲し、その上で、オフィースソフトでの制御用の記述を用いて処理を実装すると言う流れになっています。
その為、ゲームエンジンを使用する場合もコードの記述の基本的な考え方は
【 大量の外部ライブラリを使用している状態 】
と同じなので、基本と生るプログラミング言語での制御の実装方法を理解した上で、外部ライブラリに相当する通常のインストールでは存在しない機能を使用する作りになっています。ただし、3DCGを使用したゲームやアプリケーションの製作時には、【 シェーダー 】を使用することになりますから、
■ GLSL
■ HLSL
などを用いたシェーダーの制御をするための記述の方法を学習する必要があります。あと、ゲームエンジンの場合、高校以上の数学と物理の知識があったほうが 【 何をしているのか理解しやすい 】 ので、処理の内容をしっかりと理解する場合には、コードを書く以外の知識も必要になります。
コードの構造は、順次が基本になりますが、関数を使用すると、
のように関数を実行する順番を指定して処理の流れを作るkとができます。