どうも!LSSです!!
AndroidStudio+Kotlinでスマホアプリ開発の勉強中です。
途中2回の公募企画を挟んでの「その4」です。
その1では、Classを作ってみたら案外簡単に出来た話、
その2では、Classからインスタンスを作る時に引数を省略できる方法の話、
その3では、それまでプロパティしかなかったBloggerクラスにメソッドを作ってみた話でした。
公募企画結果発表で、新たに3人のバーチャルブロガー仲間を加えて、今回からは
「読者登録(バーチャルブロガーが他のバーチャルブロガーをフォローする)」
機能を追加したいと思います!
- 読者登録機能を作るに先立って必要なモノは?
- Blogger.ktをいじってみる!
- 不安になったので、動作は何も変わってないけど実行!
- tourokuメソッドを追加してみますね。
- メソッドの実行確認のために、MainActivity.ktの編集
- どきどきの実行!
読者登録機能を作るに先立って必要なモノは?
リアルの「はてなブログ」のブロガーの皆さんお馴染みの「読者登録」機能。
- 登録すると、自分(ブロガー)の登録したブログ一覧に他ブロガーが追加登録される
- 登録された側の、読者一覧に自分(登録したブロガー)が追加登録される
- 登録したブログの更新通知を受け取って『お知らせ』に通知が書きだされる
大きくまとめると、これだけの動作が必要です。
これを模した機能を追加するなら、機能自体を作るその前に!
ちょっと各ブロガーにプロパティ(データの入れ物)を追加しないといけません。
- 自分が登録したブログのリスト
- 自分を登録してるブロガーのリスト
- 自分の『お知らせ』欄
↑最低限、この3つは必要ですね。
Blogger.ktをいじってみる!
いきなり、書いてみます!
例によって赤文字部分が今回追記した内容です^^
package jp.littlestrangesoftware.a20200111_class_test
class Blogger ( var name:String="ななしのごんべ" , var pv:Int=0){
var follow= mutableListOf<Blogger>()
var follower= mutableListOf<Blogger>()
var notice_text=""
fun hello(): String {
pv++
return "こんにちは!${name}です。よろしく!"
}
}
followという任意の名前のプロパティ、これが「自分が登録したブロガー」のリストのつもりです。
followerという任意の名前のプロパティ、これが「自分を登録してくれたブロガー」のリスト。
notice_textという任意の名前のプロパティ、これが「お知らせ」を受け取るString型のプロパティ。
…あまり深く考えずにガシガシ書いちゃいました。これで大丈夫なんかな^^;
mutableListOf で、内容変更可能な配列変数を定義しています。
その内容としては<Blogger>と、ダイレクトにBlogger型のオブジェクトを入れられるようにしちゃっています。
…Blogger型の定義の中にBlogger型のプロパティ…「再帰呼び出し」みたいになってて、色々と不安になってきましたw
※再帰呼び出し…関数とかで、関数内でその関数自身を呼び出す事。
例えばPCのフォルダの中にサブフォルダがあって、その中にまたサブフォルダ…と何階層あるか分からないようなデータをあるだけ精査したい時なんかに使います。
が、一歩間違うと無限ループにならないか?って不安がつきまといますw
不安になったので、動作は何も変わってないけど実行!
うん、前回のままだけどちゃんと動作しました^^
tourokuメソッドを追加してみますね。
ブログ書きながら、コード書いて実行して、の実況状態。
不安しかないですwww
一応、脳内では色々考えてから始めてますが、はたして…
package jp.littlestrangesoftware.a20200111_class_test
class Blogger ( var name:String="ななしのごんべ" , var pv:Int=0){
var follow= mutableListOf<Blogger>()
var follower= mutableListOf<Blogger>()
var notice_text=""
fun hello(): String {
pv++
return "こんにちは!${name}です。よろしく!"
}
fun touroku(aite:Blogger):String{
follow.add(aite)
aite.follower.add(this)
return "${name}が ${aite.name}の読者になりました!"
}
}
また、赤文字部分が追記した部分になります。
メソッド名はtouroku、登録する相手Blogger型インスタンスを一時的に入れておく、引数の受け取り変数をaiteとしました。
(ここまで英語でやってきてのローマ字^^;;;)
follow.add(aite)
で、followと名付けた配列変数にaddで対象となるブロガーをBlogger型のままリスト追加します。
これは例えば、
blogtarou.touroku(sslkun)
と書いて実行すれば、ブログ太郎の登録ブログ一覧にSSL君が追加される、言い換えるとブログ太郎がSSL君の読者になる、という動作を期待しています。
aite.follower.add(this)
で、SSL君のfollowerと名付けた配列変数にaddで、tourokuを実行したほうのブロガー(blogtarou)が追加され、「SSL君を登録した読者の一覧」にブログ太郎が追加される事になります。
fun touroku(aite:Blogger):String{
ここに:Stringと書いているので、このメソッド自体がString型(文字列型)として値を返す事になり、
return "${name}が ${aite.name}の読者になりました!"
で登録が行われた事が分かる文字列を吐き出すようにしました^^
こうしておくと、tourokuメソッドを呼び出す時に、
tv0.text = blogtarou.touroku(sslkun)
という書き方をしておくと、tv0(とidをつけたテキストビュー)に
「ブログ太郎が SSL君の読者になりました!」
と表示される事を期待しています。
メソッドの実行確認のために、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)
var sslkun = Blogger("SSL君")
var urokogumo = Blogger("うろこ雲")
var pokeko = Blogger("ポケコ")
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() +"\n"+
"PV累計:" + blogtarou.pv.toString()+"\n"+
"\n"+
sslkun.hello()+"\n"+
urokogumo.hello()+"\n"+
pokeko.hello()+"\n"+
blogtarou.touroku(sslkun)+"\n"
}
}
前回までのtv0.textの代入にそのまま続けてみました!
ここまで、不安を感じつつもガシガシと書いてきたので、すんなりいけるかどうか…。
どきどきの実行!
いざ、実機で動作確認します!
大・成・功!!
なんかすんなり行きすぎて山場のない記事になりましたwww
…とはいえ、「返す文字列を確認した」だけなので、ホントは配列変数の内容を確認するモノも作らないとなんですが…まぁいけてるんじゃないかな^^(急に楽観的w)
と、なんとなく自信がついてきたところで、今回はここまで!
次回もまた、よろしくお願いします^^