どうも!LSSです!
AndroidStudio+Kotlinでアプリ開発の勉強中です。
さて、前回書いた通り、Classの学習のために実用性のないクラスを作ってみます!
とりあえずは簡単に「Blogger」というクラスを作成します。
仮想的ににブロガーをイメージしていますw
まず最初は「name(ハンドル名)とpv(数値で累計PV数のつもり)」というプロパティを持つBloggerクラスを作成してみます。
- 前置き「オブジェクト指向言語」
- まず、新規プロジェクト作成から!
- そして新規クラス作成!
- 「Blogger」クラスの中身を書いていきます。
- で、Classを使用するコードを書いていきます。
- いざ!実行!!
- まとめ
前置き「オブジェクト指向言語」
LSSはBASICからプログラミングを覚えはじめたような人ですが、いつの間にやら
「構造化プログラミング」とか「オブジェクト指向」とか言ったような言葉が出はじめ、とっかからないうちに主流になってましたw
昔なじみのBASICですら、VisualBasicなんていうオブジェクト指向な言語になってたり、その派生的な存在としてVBSやらVBAやらがいたりします。(別物とも言えますがw)
オブジェクトとはなんぞや?というと、
オブジェクト=物
オブジェクト指向=なんでもかんでも「物」として取り扱う
と理解しています。
昔ながらのプログラム言語でも、変数に「文字列型変数」「数値型変数」ってあって、
a="こんにちは"
だったり、
b=123
だったりと、「変数」という名前のわりに、中身は数値とは限らず、文字列である場合もありましたが、それがオブジェクト指向になると
c=画面内の左上のボタン
だったり、
d=画面中央のテキスト入力欄
だったりと、「型」に多様性が出てきている、という事なのかな、と理解しています。
※「と理解しています」というのは絶対的な自信がないことを意味していますw
で、実際のオブジェクト指向においては、「クラス」と「インスタンス」という概念が出てきます。
「クラス」=「型」。
以前からあったような「文字列型」「数値型」にとどまらず、「ボタン型」「テキストビュー型」など、なんでもかんでも「型」をベースとして作られて、そのベースとなるものが「クラス=型」。
「インスタンス」=「オブジェクト」=「物」。
「クラス=型」はあくまで「型」であって、実際に扱う対象はクラスではなく、クラスによって作られた「物体」。
例えとして用いられるのが、
「クラス」がレシピなら、「インスタンス」はレシピに沿って作った料理。
「クラス」が設計図なら、「インスタンス」はそれに基づいて作られた製品。
「クラス」が鯛焼き器なら、「インスタンス」はそこにタネやあんこを入れて焼いて作った鯛焼き。
今回は、そんな「クラス」の作成に挑戦してみます!
まず、新規プロジェクト作成から!
いつものように、Empty Actibityから始めます。
(他のを選んでみたらどうなるん?って気にはなりつつも)
プロジェクト名は「20200111_class_test」としておきました。
なんだか数字の並びが綺麗な日付ですね^^
これで作成したプロジェクトの内容は、
こんな感じになっています。
そして新規クラス作成!
↑画面写真の位置で右クリック、
「New」にマウスカーソルを合わせて、さらに右に出てくる
「Kotlin Files/Class」をクリックします。
すると、こういうちっちゃ可愛いダイアログが出てきます。
Nameを今回は「Blogger」としました。(任意の名前。好きに名付けてOK)
そうすると、「Blogger.kt」というのが作られます(画面左)。
画面右側ではそれが開かれた状態で「Package ~」行だけが入った状態である事が確認できます。
これから、ここにガシガシとクラスの定義を書いていきます!
「Blogger」クラスの中身を書いていきます。
とりあえず、手持ちの本を参考に、クラスの中身を書いていきます。
…と、書き始めたのですが、
package jp.littlestrangesoftware.a20200111_class_test
class Blogger(var name:String , var pv:Int){
}
とりあえず最初はnameというString型、pvというInt型のプロパティを持ち、コンストラクト時(=定義時)にその2つを引数として渡す事で作れるクラスを、と思ったら、上記の記述だけでいいみたいでした。
ほんまかいな。
なお、厳密には、
package jp.littlestrangesoftware.a20200111_class_test
class Blogger constructor( name:String , pv:Int){
var name=name
var pv=pv
}
という書き方もあるけど、こちらはname=nameだとか冗長と思われる記述があり、Kotlinでは「引数をそのままプロパティとして定義するような書き方でOKかつ一般的」で、さっきの
package jp.littlestrangesoftware.a20200111_class_test
class Blogger(var name:String , var pv:Int){
}
でOKという事らしいです。
え、ほんまかいな?(2回目)
↑画面的にはこんな感じです。
で、Classを使用するコードを書いていきます。
MainActivity.ktのほうで、Bloggerクラスを元にオブジェクトを作成し、その中身を確認するコードを書いてみます!
とりあえず、MainActibity直下に
var blogtarou=Blogger("ブログ太郎",1234)
と書いて定義します。
で、onCreate内に
tv0.text="ブロガー名:" + blogtarou.name + "\nPV累計:" + blogtarou.pv.toString()
と書いて、定義した名前とpvの値を、tv0というidをつけたTextVirewに出力してみます。
うーん、「とりあえず、まずは極力簡単に」と思ってやってみているものの、簡単すぎて本当にこれでいけるのか不安を感じつつ…w
いざ!実行!!
うん、実にあっさりといけてしまいましたねwww
まとめ
まとめ、ってほど内容があるわけでもないですがw
まずは、
class Blogger ( var name:String , var pv:Int){
}
という、中身のないクラスを定義しました。
クラス名が「Blogger」で、「name」という文字列型のプロパティと「pv」という数値型のプロパティを持ち、定義時にはその2つのプロパティを与えて定義する、というクラスです。
で、MainActibityのほうで
var blogtarou=Blogger("ブログ太郎",1234)
によって、「blogtarou」という変数に「Blogger型のnameはブログ太郎、pvは1234」というオブジェクトを代入しました。
この場合、blogtarouがインスタンス、この代入するという行為が「インスタンス化」ですね。
そんで、
tv0.text="ブロガー名:" + blogtarou.name + "\nPV累計:" + blogtarou.pv.toString()
と書く事で、blogtarou.nameという書き方でBlogger型変数のプロパティを取り出せる事が確認できました!
「変数blogtarouはBlogger型の変数です。」
っていう一文に奇妙な感動を覚えますw
これが当然の事、っていうのがオブジェクト指向なんだろうなぁ。
class Blogger ( var name:String , var pv:Int){
}
↑これだけなんですけどねw
てなとこで、今回はこのへんで!
次回もまた、よろしくお願いします^^