どうも!LSSです!
AndroidStudio+Kotlinでアプリ開発の勉強中です。
さて、前回は「Classを作ってみよう」として、単にプロパティを2つ持つ「Blogger」クラスを作成し、「Blogger型のオブジェクト」を作り、その中身を確認するという事をやりました。
プロパティをやったから次はメソッド…と思っていたのですが、 その前にもう少しプロパティでやっておきたい事があったので、今回もプロパティの続きとなります。
今回はこんな事をやります!
class Blogger ( var name:String , var pv:Int)
↑Classを作る際に、データクラスとしてなら{ }が無くても構わない、という話と、
class Blogger ( var name:String="ななしのごんべ" , var pv:Int=0)
↑のように引数にデフォルト値を=で設定しておけば、
var blogtarou = Blogger("ブログ太郎",1234)
↓
var blogtarou = Blogger()
と引数を省略してオブジェクトが作れる、という話の2本立てです!
ストーリー風に言うと
「ブログ太郎、無能になる!」
「ブログ太郎、名前とpvを失う!」
の回ですw
中身のないクラス=データクラスつって、それもアリアリな話
前回作ったのは、
class Blogger ( var name:String , var pv:Int){
}
こんなクラスでした。
{と}の間に何も書いていない事を、記事中で「中身のないクラス」と表現しましたが、「String型のプロパティとInt型のプロパティをセットで管理する入れ物」として、
そういうのもアリ
みたいです。
その場合、クラスはクラスの中でも「データクラス」と呼ばれるそうです。
※ちょっと嘘^^;。「データクラス」はもうちょっと違うモノみたい。
なんなら、
class Blogger ( var name:String , var pv:Int)
のように{}も省略しちゃって構わない(データの入れ物として使用するなら)です。
1行に収まって構文も単純で、スッキリしますね^^
「名前(引数){処理}」っていう書き方、Javaもそうなんですが「そういうもの」と思いこんでます。
その思い込みは「基本的にはそういうもの」で間違いではないと思いますが、要らない時は書かなくていいっていうKotlinが大好きですw
インスタンス化の時に、引数を省略できるクラスの作り方(簡単)
現在のBloggerクラスは、nameとpvという2つのプロパティを持ち、インスタンスを作る時に、
var blogtarou=Blogger("ブログ太郎",1234)
のようにnameになる引数とpvになる引数を添えて宣言する必要があります。
これを、例えばpvを省略して宣言したい場合。
var blogtarou=Blogger("ブログ太郎")
で「とりあえず名前だけ”ブログ太郎”で作りたい」って時ですね。
実際にAndroidStudio上で削ると、
こんな風に赤い波線で「ここおかしいで」って警告が出ます。
この赤い波線にマウスカーソルをあわせると、
どうおかしいのかを教えてくれます。
なんとなく分かりますが、Google翻訳にかけてみると、
という事ですね。
ごめんね。わざとなんだw
さて、ここで
「pvを省略してインスタンスを作ろうとした場合、pv=0のオブジェクトにしてくれるクラスにしたい」
「なんならnameすらも省略して、その場合nameを"ななしのごんべ"にしてくれるクラスにしたい」
と思った場合。
言い換えると
「デフォルト値を用意しておいて、省略した場合はプロパティにデフォルト値が適用されるクラス」
の作り方ですね。
これもとても簡単でした。
class Blogger ( var name:String="ななしのごんべ" , var pv:Int=0)
のように、「="ななしのごんべ"」「=0」をつけるだけでいけます。
Blogger.ktをそのように書き換えて、
画面でいうと↑のようになります。
この状態でMainActibity.ktのほうを見ると、
赤い波線が消えていますね^^
名前のほうもデフォルト値を設定したので、"ブログ太郎"も削ってしまいます。
「blogtarouはブログ太郎という名前のpv1234のBloggerです」という記述だったのが、
「blogtarouはBloggerです」という正体不明のブロガーができました^^
いざ実行!
↑引数を省略すると、デフォルト値が反映されたプロパティを持つオブジェクトが作られる事が確認できました!
もちろん、
var blogtarou = Blogger("ブログ太郎",1234)
と引数を与えると、従来通りpv1234のブログ太郎も作れます^^
てなとこで、今回はこのへんで!
次回もまた、よろしくお願いします^^