Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

【実用性皆無!】学習のために無意味にClassを作ってみるテスト その1【誰得?】「バーチャルブロガーブログ太郎誕生!の巻」

 どうも!LSSです!

 

 AndroidStudio+Kotlinでアプリ開発の勉強中です。

 さて、前回書いた通り、Classの学習のために実用性のないクラスを作ってみます!

 

 とりあえずは簡単に「Blogger」というクラスを作成します。
 仮想的ににブロガーをイメージしていますw

 まず最初は「name(ハンドル名)とpv(数値で累計PV数のつもり)」というプロパティを持つBloggerクラスを作成してみます。

 

 

前置き「オブジェクト指向言語

  LSSはBASICからプログラミングを覚えはじめたような人ですが、いつの間にやら
「構造化プログラミング」とかオブジェクト指向とか言ったような言葉が出はじめ、とっかからないうちに主流になってましたw

 

 昔なじみのBASICですら、VisualBasicなんていうオブジェクト指向な言語になってたり、その派生的な存在としてVBSやらVBAやらがいたりします。(別物とも言えますがw)

 

 オブジェクトとはなんぞや?というと、
オブジェクト=物
オブジェクト指向=なんでもかんでも「物」として取り扱う

と理解しています。

 

 昔ながらのプログラム言語でも、変数に「文字列型変数」「数値型変数」ってあって、

a="こんにちは"

だったり、

b=123

だったりと、「変数」という名前のわりに、中身は数値とは限らず、文字列である場合もありましたが、それがオブジェクト指向になると

 

c=画面内の左上のボタン

だったり、

d=画面中央のテキスト入力欄

だったりと、「型」に多様性が出てきている、という事なのかな、と理解しています。

※「と理解しています」というのは絶対的な自信がないことを意味していますw

 

で、実際のオブジェクト指向においては、「クラス」インスタンスという概念が出てきます。

 

「クラス」=「型」。
以前からあったような「文字列型」「数値型」にとどまらず、「ボタン型」「テキストビュー型」など、なんでもかんでも「型」をベースとして作られて、そのベースとなるものが「クラス=型」。

 

インスタンス」=「オブジェクト」=「物」。

「クラス=型」はあくまで「型」であって、実際に扱う対象はクラスではなく、クラスによって作られた「物体」。

 

 例えとして用いられるのが、

「クラス」レシピなら、インスタンスレシピに沿って作った料理
「クラス」設計図なら、インスタンスそれに基づいて作られた製品
「クラス」鯛焼きなら、インスタンスそこにタネやあんこを入れて焼いて作った鯛焼き

 

 今回は、そんな「クラス」の作成に挑戦してみます!

  

 

 

 

まず、新規プロジェクト作成から!

 

f:id:little_strange:20200111001829p:plain

いつものように、Empty Actibityから始めます。
(他のを選んでみたらどうなるん?って気にはなりつつも)

 

 

f:id:little_strange:20200111153710p:plain

 プロジェクト名は「20200111_class_test」としておきました。

 なんだか数字の並びが綺麗な日付ですね^^

 

 これで作成したプロジェクトの内容は、

f:id:little_strange:20200111155320p:plain

こんな感じになっています。

 

 

そして新規クラス作成!

f:id:little_strange:20200111155607p:plain

↑画面写真の位置で右クリック、
「New」にマウスカーソルを合わせて、さらに右に出てくる
「Kotlin Files/Class」をクリックします。

 

 

f:id:little_strange:20200111155847p:plain

 すると、こういうちっちゃ可愛いダイアログが出てきます。

 Nameを今回はBloggerとしました。(任意の名前。好きに名付けてOK) 

 

f:id:little_strange:20200111160040p:plain

 そうすると、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回目)

 

f:id:little_strange:20200111163733p:plain

↑画面的にはこんな感じです。

 

 

で、Classを使用するコードを書いていきます。

 MainActivity.ktのほうで、Bloggerクラスを元にオブジェクトを作成し、その中身を確認するコードを書いてみます!

 とりあえず、MainActibity直下

var blogtarou=Blogger("ブログ太郎",1234)

と書いて定義します。

 

で、onCreate内

tv0.text="ブロガー名:" + blogtarou.name + "\nPV累計:" + blogtarou.pv.toString()

と書いて、定義した名前とpvの値を、tv0というidをつけたTextVirewに出力してみます。

 

f:id:little_strange:20200111163554p:plain

 うーん、「とりあえず、まずは極力簡単に」と思ってやってみているものの、簡単すぎて本当にこれでいけるのか不安を感じつつ…w

 

 

いざ!実行!!

f:id:little_strange:20200111164202p:plain

 うん、実にあっさりといけてしまいましたね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

 

 

てなとこで、今回はこのへんで!

 次回もまた、よろしくお願いします^^