のんびりした人の日記 -25ページ目

のんびりした人の日記

仕事の愚痴とアニメ関連のことを書いていきます。


のんびりした人の日記-初めてのマイコン


我が電子工作の師匠である剣菱Pさんの動画をみて作ってみました。

画像では左側の赤のLEDしか点灯していないように見えますが、じつは500ミリ秒経った後に右側の白色のLEDも点灯するので、500ミリ秒ごとに点滅を繰り返すというものなのです!!


電子工作をやってみたことのない人にとっては「そんぐらい簡単にできんだろ!」とか思うかもしれないですが、文系の学部に行った大学生でしかも理科とは5年以上も離れた人にとっては結構大変なのです。

しかも「たかがLED」だと思いますけど、「されどLED」なのです!

本当に、プログラミングとかして実際にマイコンに読み込ませた後に動作させる時には緊張しますし、ちゃんと動作してくれた時の感動というのはLEDだけでもひとしおです。


とりあえずこれからも剣菱Pさんの動画で勉強していろいろなものを作っていきたいと思います。

とりあえず、大学院の授業が始まるまではプログラミングとか電子工作の方に力を注いでいきたいと思います。


しかし、LEDだけでも本当に感動したなぁ~

今回の勉強メモは可変長引数というものです。
今までパラメーターといえば、自分で関数やメソッドを定義したときには、定義したときに設定したパラメーターの個数しか変数をセットすることはできないという感じでしたよね。
けど、C#では「パラメーターの何個まで、みたいな感じにしたい」という要望にこたえてくれています。それが今回の可変長引数です。


使い方はメソッドのパラメーターを配列の形で設定し、型を決めます。んでその前にparams修飾子というものを加えて終了です。
あとは、メソッドの処理を定義する際に添え字を利用して配列の演算を書いていくという感じで、メソッドの処理の定義は通常の配列のように書いちゃえば問題ないです。
またその時に配列が持っているLengthプロパティを使ったりすると便利かも知れません。
というか、配列というとfor文と併用するというイメージがありますが、今回もそんな感じですね。うん、繰り返し文で有効ですw


パラメーターのセットの仕方は
①変数を格納した変数を渡す。
②値を直接渡す
③配列を定義してそれを渡す
などいろんな方法があります。また①~③を組み合わせることも可能です。
また、パラメーターに渡すものが1つもなくても動作してしまいます。なので、渡すものが1つもないときには別の処理を行うようにするなどしておくべきだと思います。


そして、パラメーター配列の設定をする際に注意すべきことは
①メソッドにおいて通常の仮引数とパラメーター配列を引数に持つときには、必ず最後の引数にパラメーター配列を記述すること
②どのような場合でも、1つのメソッドにおいてパラメーター配列は1つしか記述できないこと
を頭に入れておけばいいと思います。

これがあるのとないのではプログラミングの幅も結構変わってくると思いますね。
大学の授業の時にやったアルゴリズムを実際にプログラミングして動作させるときこれがあれば結構楽だったと思うんですけどね。

では今回はこの辺で。

今回は、僕が今まで見たこともない参照パラメーターと出力パラメーターについてです。
今までC、Java、アセンブラとやってきましたがこんなの初めて見ました。
けど、内容的には簡単な感じです。
特にC言語をやっていてポインタをちゃんと理解しているならかなり理解はしやすいし、何より便利に感じるはずです。


参照パラメーター修飾子refは、通常値渡しによってメソッドを実行するところを参照渡しにできるものです。
つまり、ポインタ変数とか面倒な変数を呼び出す必要がない感じですね。
refの使い方は単純に、メソッドを定義する際にパラメータの変数の型の前にrefを加えるだけです。
また、メソッドを呼び出すときにも変数の前にrefを付けます
これだけで値渡しから参照渡しのメソッドを実行することができます。
んで、注意点として「refを使って渡す引数には、呼び出しの前に値を代入しておかなければならない」とあるのですが、
これは当たり前のような感じもします。まぁ、入れるものなけりゃ0を入れときゃいい話ですよね。


お次、出力パラメータ修飾子outについて。ケースとしては「参照渡しの引数を使ってメソッドから値を受け取りたいが、値を渡したくはない」というもの
メソッドのパラメーターとして変数をセットはするけど、それは値を渡すためではなく値を受け取るため・・・・・ということでしょうかね。
さきほどやったref修飾子では「渡す引数には、呼び出し前に値を代入しておかないといけない」という約束事があったのでrefは使えませんよね。
そんなときには出力パラメータ修飾子outの出番というわけです!!
なんとこれは、メソッドのパラメータとしてセットした変数の値を処理終了後も保持している状態にしてくれるものです。
通常の値渡しではこんなことはできないですよね。パラメータとしてセットした変数に変更が加えられていたとしても、メソッドの処理が終了してしまうとその変数はメソッドの処理開始前の値に戻ってしまいますから。
んで、return文とかが最後にあると演算結果とかを返してくれるという感じですよね。
パラメーターとして指定した変数に変更を加えられる方法というのは案外少ないんですよね。僕も関数とかメソッドを使うときのパラメーターの認識としては「演算に必要な要素」という感じでしたから。
んで、out修飾子の使い方もrefと同じで、値を入れたいパラメーターの型の前にoutを加えるだけ。
そして、パラメーターをセットするときにはその変数には値をあらかじめ格納する必要があるのですが、out修飾子が付いているパラメーターにはそんなこと必要ありません。なぜならメソッド内で値を格納してくれるから。
逆にいうと、メソッド内でout修飾子のついたパラメーターに指定した変数については、メソッド内でその変数に値を代入する処理を加えないといけないということです。



説明はまだまだ下手糞だし、用語もちゃんとつかいこなせていないっぽいけど、それもそのうち。ゆっくりやっていこうと思います。

しかし、C#の機能というのは結構面白いものが多いですね。
これからインデクサーとかプロパティとかあるのでそこが結構楽しみだったり!

今日の勉強メモはこんな感じで。