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

のんびりした人の日記

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

今回のネタはstatic修飾子についてです。
これは以前やったpublicやprivateみたいに以前の自分にとってはちんぷんかんぷんだったものです。
それが独習C#のおかげでどうにか理解できるようになりました。
けど、結構約束事が多いですね。覚えるのは大変そうですが理屈からいけば覚えるというより感覚でわかるようになると思います。それをまずは目指したいと思います。


では、まずstaticがついている変数やメソッドはどのような働きをするのかについてです。
staticがついている変数やメソッドは、そのクラスのインスタンスごとではなくクラスごとにデータを持ちまたはデータを処理します。今までだと、クラスという名の設計図をもとにしてインスタンスという実体を作りだし、インスタンスという実体にはそれぞれにステータス(変数だと思ってください)と機能(メソッドと思ってください)を持っていたわけです。しかし、なにかの部品の生産現場を想像してみてください。部品(インスタンス)を作るときには「今、この設計図のものを何個作ったか」という情報も必要になると思います。その「何個作ったか」という情報は個々の設計図(クラス)ごとに持つ情報ですよね。そのような情報についてはstaticをつけるという感じでしょうか。・・・・けど、家電とかロット番号があるから例としてはだめかなww


先ほどの説明では、「変数について」という感じが強く出てしまっていますが、最初に説明してた通りメソッドにもstaticをつけることもあります。

そして、このstaticをつけた変数やメソッドの約束事
①staticの付いている変数やメソッドに対してアクセスするときには必ずクラス名を使ってアクセスする。
②静的メソッドにはthisを使ってアクセスすることはできない
③静的メソッドが直接呼び出せるメソッドは、他の静的メソッドだけである
④静的メソッドは、静的な変数にのみアクセスすることができる。

①~④で共通することは「staticなメンバーはstaticなメンバーに対してのみアクセスすることができる」という感じでしょうか。あと、アクセスもクラス名を必ず使うということは忘れてはいけませんね。
先ほどの説明がある程度想像できるならば、この約束事もなんとなくわかる気がする感じがする・・・・・かな。僕は結構わかる気がするのですが。


そして、staticは変数やメソッドだけではなく、コンストラクタやクラスにもつけることができるのです。・・・・あぁ、先ほどの説明がww
staticをコンストラクタにつけた時にはそれは静的コンストラクタと呼ばれ、静的コンストラクタは、特にクラス全体の初期化を目的に用いられます。通常のコンストラクタというのは、そのクラスのインスタンスを生成する際にクラスメンバを初期化するために使われますが、やはりstaticはインスタンスとは絶縁関係にあるのでしょうかねww
また、この静的コンストラクタはそのクラスがコンパイルの時にロードされたときに働くものなので、インスタンスの生成に先立ってクラスの初期化がされます。
制限としましては、静的変数や静的メソッドと同じような感じですね。
①静的コンストラクタにはアクセス修飾子をつけることはできない
②①を受けて、プログラムの他の場所からはアクセスできない(アクセス修飾子を付けれないということはprivateがつけられている状態と同じなので)
③静的コンストラクタを実行する際には、静的なメンバにしかアクセスできない(静的メソッドと同じですね)


そして、クラスにstaticを付けた場合にはそれは静的クラスと呼ばれ、それには以下の2つの特徴があるといわれています。
①静的クラスからはインスタンスを生成することができない。
②静的クラスの中には、静的なメンバしか定義することができない
いずれも、静的な変数、メソッド、コンストラクタの共通の要素を持っているという感じでしょうか。




印象に強く残るのは「staticなメンバにはstaticなメンバを」というイメージでしょうかね。これをまず頭の中に置いておきたいと思います。

では、今回は非常に長くなりましたがこの辺で。


のんびりした人の日記-初Linux

我が家の初めてのLinux環境です。

とりあえず大学以外でLinuxなんて扱うのは初めてなので、まずは雑誌を買ってそれについてくるライブCDとかを試してからどうにかしようと思いました。

んで、買った雑誌が「絶対つまずかないLinux超入門」というものです。


まぁ、「絶対に」とか「完全」とかつく書籍というのは大半があまりいい評価がついていないというイメージを持っているのであまり買いたくはないのですが、密林さんではこの本が結構評判良かったのでこれに決定。

そして、UNIXとLinuxに関する勉強もしておこうと思いまして、これはかなりのベストセラーである「林晴比古実用マスターシリーズ 新Linux/UNIX入門」も買いました。とくにシェルプログラミングとかは言葉は知っているけどどんなことをやっているのかとかは全然知らないので、この際勉強しようと思いました。


んで、ディストリビューションはUbuntuにしました。理由は日本語のサポートが充実しているのとアプリの種類の豊富さとかですかね。あとは、巷ではUbuntuがLinux初心者には使いやすいとか書いてあったので。

今はまだインストールしたばっかなのですが、これからいろんなことをやっていきたいと思います。




今回のお題は
①Mainメソッドから値を返すには?
②コマンドライン引数とは?
です。C言語とJavaをやっている人ならわかるものですよね。
C言語ではmain関数の戻り値はint型でしたし、Javaではmainメソッドの部分を「public static void main(String args[])」と書いていたはずです。
でも、C#ではMainメソッドでは戻り値なし(void)の場合が多いですよね。けど、void以外にも戻り値を設定できるんです。ただしint型のみかな。
あと、コマンドライン引数についても入門書では結構設定してないことが多いですが、これもちゃんとできるのです。


ではまず①について。
Mainメソッドの戻り値が何を表しているかですよね。何に対して値を提供しているのかをまず知っておきましょう。
「何に対して」というのはOSに対してというのが一般的というか大多数らしいです。なので、OSに対して値を提供することはわかりました。ではどんな情報を提供しているのか。
Mainメソッドの戻り値というのは、実行したプログラムが正常に終了したかどうかを表していますC#では、戻り値0は正常終了を表しています。それ以外の戻り値はエラーが生じていることを表しているそうです。
これって結構重要なことだと思うのですが、戻り値を常にint型にしておかなくてもいいんでしょうかね?そこがちょっと疑問です。


んで②について。
まずはコマンドライン引数とはなんぞやというところから。コマンドライン引数とは、特にWindowsではプロンプトでソースコードを実行するときに、ソースコードのあとに記述する文字列のことです。
コマンドライン引数は主にstring型の配列の形で定義されるので、プロンプトで文字列を複数記述することもできます。その場合には文字列の間にスペースを入れる必要があります。

まぁこんなところでしょうかね。あまり話題のない部分という感じですからね。

次はstaticについてやりたいと思います。これは僕もアクセス修飾子並みによく理解していない部分ですので、ちゃんと本を読み込んで理解したうえで勉強メモを取りたいと思います。