どうも!LSSです!
AndroidStudio+Kotlinでスマホアプリ開発の勉強中です。
クラス作成に挑戦するこのシリーズ、
その1では、
「プロパティを2つ持つBloggerクラスの作成と、そのテスト」で、
バーチャルブロガー『ブログ太郎』が誕生、
その2では、
「プロパティを省略してもデフォルト値でオブジェクトを作成する方法」で、
ブログ太郎氏が名前とpvを失うという回でしたw
「その3」となる今回は、Bloggerクラスにメソッドを実装します!
ブログ太郎が挨拶できるようになります!
- 今回はこんな事をやります。
- まず、メソッドとはなんぞや、について
- クラスにメソッドを追加してみる
- メソッドの動作確認。ブログ太郎が初めて挨拶しますよ!
- いざ、実行!
- …でも、正直、物足りない
- 挨拶したら、ご褒美?にpvが+1されるようにしよう。そうしよう。
- 再び実行!
今回はこんな事をやります。
class Blogger ( var name:String="ななしのごんべ" , var pv:Int=0){
fun hello(): String {
pv++
return "こんにちは!${name}です。よろしく!"
}
}
↑class定義の中に関数(fun)を書くと、それがメソッドになるよ、っていう記事です。
まず、メソッドとはなんぞや、について
前回までに、
class Blogger ( var name:String="ななしのごんべ" , var pv:Int=0)
とBloggerクラスを用意し、
var blogtarou = Blogger("ブログ太郎",1234)
として変数blogtarouに「ブログ太郎」というnameと「1234」というpvの2つのプロパティを与える事で、
blogtarou.name
という書き方で、blogtarouのnameに設定した「ブログ太郎」という名前を取り出せる事を確認しました。
「プロパティ」は単に値、データであって、それはそれでデータのセットを持つクラスが作れる!という意義がありますが、クラスにはプロパティだけじゃなく「メソッド」も持つ事が出来ます!
プロパティがデータなら、メソッドは行動。
プロパティが変数なら、メソッドは関数、といったほうがいいかもです。
今回は、Bloggerクラスにメソッドを用意して、
「ブログ太郎が挨拶できる」ようにしたいと思います!
クラスにメソッドを追加してみる
で、実際にクラスにメソッドを追加するんですが、やり方ってのが
「クラス定義の中に関数を書けば、それがメソッドになる」
というだけの話なんですね。
なので、Blogger.ktを以下のようにしました。
package jp.littlestrangesoftware.a20200111_class_test
class Blogger ( var name:String="ななしのごんべ" , var pv:Int=0){
fun hello(): String {
return "こんにちは!${this.name}です。よろしく!"
}
}
画面でいうと、
↑こんな感じです。
helloという関数をclassの中に書いて、その内容は
"こんにちは!(そのオブジェクトのnameプロパティ)です。よろしく!"
という文字列を返す、というもの。
なお、余談ながら、このぐらい単純な関数の場合は、
class Blogger ( var name:String="ななしのごんべ" , var pv:Int=0){
fun hello(): String = "こんにちは!${this.name}です。よろしく!"
}
のように、{}を使わないで=で返す値を書くだけでもいけます。
今回は先に書いた、{}つきの方で進めます。
メソッドの動作確認。ブログ太郎が初めて挨拶しますよ!
動作確認に使っているMainActivity.ktのほうのコードを
package jp.littlestrangesoftware.a20200111_class_test
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var blogtarou = Blogger("ブログ太郎",1234)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tv0.text = "ブロガー名:" + blogtarou.name + "\n" +
"PV累計:" + blogtarou.pv.toString() + "\n" +
blogtarou.hello()
}
}
のように書き換えました。(赤文字部分を追記)
ブロガー名、pv累計をtv0(と名付けたTextView)に吐き出すのに続けて、
blogtarou.hello()
を追加しています。
helloメソッドは
"こんにちは!(そのオブジェクトのnameプロパティ)です。よろしく!"
という文字列を返すように作ったので、ブロガー名・pv数に続けてその挨拶が表示されるか…?
いざ、実行!
無事、期待通りに出力されました!
ブログ太郎の初挨拶です!!
…でも、正直、物足りない
「メソッドは関数・行動です」って言っておきながら、単に定型文を吐き出すだけで
「これじゃプロパティとそう変わらないやん」。
って感じ。
もうひとひねり加えましょうか。
挨拶したら、ご褒美?にpvが+1されるようにしよう。そうしよう。
まず、Blogger.kt内を次のように書き換えます。
package jp.littlestrangesoftware.a20200111_class_test
class Blogger ( var name:String="ななしのごんべ" , var pv:Int=0){
fun hello(): String {
pv++
return "こんにちは!${name}です。よろしく!"
}
}
↑よく考えたらthis.nameのthisは無くても良かったかな、と思い、単にnameとしました。
で、その前に「pv++」←この書き方で変数pvが+1されます。
あと、pvが増えた事を確認するために、MainActivity.ktのほうも、
tv0.text = "ブロガー名:" + blogtarou.name + "\n" +
"PV累計:" + blogtarou.pv.toString() + "\n" +
blogtarou.hello() +"\n"+
"PV累計:" + blogtarou.pv.toString()
と、helloメソッドを呼び出したあとにもう一度pvの値を確認するようにしました。
再び実行!
挨拶が出力されると同時に、pvが1増えてる事が確認できました!
「挨拶するたび、pv増えるね☆」ぽぽぽぽーん!!(もしかしてもう古い?)
…てなとこで、今回はこのへんで!
次回もまた、よろしくです^^