前回の説明で出てきた、謎の命令を解き明かします。
変数? 関数? 構造体?
前回の記事で、ちょっと不便な、というか正直なところ、まったく使い物にならないキーボードを製作してしまいました。失礼いたしました。
ただ、キーボードの基本機能である「PCに接続したときにUSBキーボードとして認識される」機能と「PCに文字データを送る(文字を入力する)」機能を実現することができました、作った意味はあったんだ、とご納得いただければと思います。
このシリーズでは、これからキーボードとしての実用的な機能を追加していきますが、この2つの基本機能を使用してプログラムを作っていきます。
ところで、プログラムで使用したキーボードライブラリの2つの命令、謎ですよね。
Keyboard.begin();
Keyboard.print();
今回は、この文法について詳しく説明します。以前も説明しましたが、まったく新しい概念ですので頭を柔らかくして読み進んでいただければと思います。
オブジェクトとメソッド
これら2つの命令は共通しているところがあります。
このように、Keyboard
という、一見すると変数に見える部分と begin()
または print()
という関数に見える部分があります。さらにそれらの間には「 . 」があります。
これらはまったく新しい概念なので、なかなかわかりやすい説明が難しい状況です。そこで、先に用語を説明してしまい、あとから考え方を説明します。
これらは以下のように「 . 」の前の部分を「オブジェクト」、後の部分を「メソッド」と呼びます。
プログラミングを習得する上で、この概念でつまづく人も多いので、このシリーズを通して一緒に理解を深めていきましょう。
今回の記事で、オブジェクトとメソッドについて説明しますが、読み終わっても分かったような、わからなかったような、という感じになると思います。
でも心配はいりません。次回以降の記事では実際にいろいろな使い方をして理解を深めていきますので、今回の記事を読んでよく分からなくても、徐々に理解していけば大丈夫です。
オブジェクトとは
まず「オブジェクト」とはどのようなものなのでしょうか。「変数」とは何が違うのでしょうか。そこで、変数と比較しながら「オブジェクト」の特徴を確認します。
まず変数について復習しましょう。例えば、
uint8_t count;
と書いた場合、以下のように count
という名前の0〜255までの数字が書けるメモ帳が用意されるんでしたよね。
変数は、値を代入する、変数どうし計算する、などの使い方をします。変数は読み書きができる「ただのメモ帳」です。また、使い方は変数によって変わることはなく、変数であれば同じ扱い方をします。
一方、「Keyboard」は、キーボードそのものなんです。
「キーボードそのもの」とはいっても、実際にキーやUSBケーブルがあるわけではありません。「Keyboard」とは、キーボードの「機能」を一通り持っている「物(もの)」なんです。
「Keyboard」は、先ほどの変数(=ただの紙切れ)とはまったく異なり、「Keyboard」自身が、実世界のキーボードとしての振る舞い方を知っている「物」なんです。
???という感じですよね。何だかずいぶん哲学的になってきました。
さて、この「Keyboard」というものを一般的になんと呼んだらいいでしょうか。
う〜ん、やはりこれは「物」としか言いようがないですよね。
このように「Keyboard」は変数とは異なり、実際の世界と同じような振る舞いを知っている「物」なんです。「物」は英語で「Object」(オブジェクト)と言います。そのため、「Keyboard」のことを「オブジェクト」と呼んでいます。
ところで、「Keyboard」は実際の振る舞いを知っているもの(オブジェクト)ということですので、この「Keyboard」オブジェクトに、実世界と同じような振る舞いをしてもらうにはどうしたらよいのでしょうか。
メソッドとは
ここまでの説明で、オブジェクトは自身の振る舞いを知っている、ということがわかりました。
次に、そのオブジェクトに対して、実世界と同じように振る舞ってもらう方法を習得しましょう。
オブジェクトに対して、振る舞いを指示するのが「メソッド」です。メソッド(method)は日本語では「やり方」「方法」などという意味です。
「メソッド」はオブジェクトに対して「.」をつけて、その後ろに関数と同じ書き方で振る舞いを指示します。
例えばキーボードオブジェクトは、PCと接続を確立するための「begin()」(引数なし)というメソッドがあります。
キーボードオブジェクトに対して、「begin()」メソッドを指示する場合は以下のように書きます。
Keyboard.begin();
この命令は、Keyboard
オブジェクトに対して、begin()
メソッドを指示する、つまり接続処理を指示する、というイメージです。
注意点としては、メソッドはArduino Microに対する命令ですので、他の普通の命令と同様に、最後に「;」(セミコロン)をつける必要があります。
また、メソッドは普通の関数と同じように引数を取ることもあります。PCに文字データを送る命令は以下のように書いていましたよね。
Keyboard.print("A");
begin()
メソッドと同様に、Keyboard
オブジェクトに対して、print()
はPCに文字データを送るメソッドを指示しています。
最後にKeyboardオブジェクトのメソッドにはどのようなものがあるか一通り確認しておきますので、今回はKeyboardオブジェクトについて理解を深めてください。
次回以降、他のオブジェクトも出てきますので、さらに理解を深めていきましょう。
Keyboardオブジェクトのメソッド一覧
Keyboardオブジェクトは、実世界のキーボードの振る舞いをする物(オブジェクト)ということを説明ましたが、ここで、Keyboardオブジェクトが持っているメソッドを一通り確認します。
これはあくまで参考ですので、すべて理解したり覚えたりする必要はありません。これだけのメソッドがあれば、実世界のキーボードのように振る舞えるな、と思っていただければ十分です。
メソッド | 意味 |
begin() | 接続したPCとUSBキーボードとして接続処理をする。引数なし |
end() | USBキーボードの動作を終了する。引数なし |
press() | 引数で指定してキーが押され続けているように振る舞う。 例) Keyboard.press(KEY_LEFT_CTRL); 左側のコントロールキーを押し続ける状態にする |
print() | 引数で指定した文字データをPCに送信する。引数は文字列 |
println() | 引数で指定した文字データをPCに送信後、改行コード(=リターンキー)を送る |
release() | 押され続けているキーを離す 例) Keyboard.release(KEY_LEFT_CTRL); 左側のコントロールキーを離す |
releaseAll() | 現在押され続けている全てのキーを離す。引数なし |
write() | 引数で指定した文字データをPCに送信する。引数は1文字 |
更新履歴
日付 | 内容 |
---|---|
2021.7.23 | 新規投稿 |