Little Strange Software

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

【実用性皆無!】学習のために無意味にClassを作ってみるテスト その6【誰得?】「バーチャルブロガーやっと記事を書く。の巻(前編)」

 どうも!LSSです!

 

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

 

 無意味にClassを作ってみる、バーチャルブログシリーズ「その6」です!

 

 前回は、「読者登録」機能を模したものを作り、バーチャルブロガーたちが全員、他の人の読者になりました。

で、今回なんですが、ホント今更感はありますが
バーチャルブロガーがやっと記事を書きます!w

  

 

記事を書く、とはいっても

 そもそも「記事」という概念を用意していないので、用意する必要がありますねw

で、それを言ったら「ブログタイトル」「ブログジャンル」ぐらいも用意したいところです。

 

という事で、色々作っていきますね!

 

 

新たなクラス「記事」を作ろう!

 一口に「記事」といっても最低限、
「書いた日時」「題名」「本文」ぐらいは欲しいところ。

 

 こうした複数の要素を「記事」という一括りにまとめるために、「記事」の概念をクラスとして作成します!

 

 

f:id:little_strange:20200121214414p:plain

 はい。AndroidStudio、Projectウィンドウの中の、

Java内のプロジェクト名を右クリック、

右に出てきた、Newにマウスカーソルを合わせ、

更に右に出てきた、Kotlin File/Classをクリックします。

 

 

f:id:little_strange:20200121215016p:plain

 小さいダイアログが出てくるので、Nameの欄にはこれから作りたいクラス名を入力します。

 ここではKijiとしました。(任意の名前。好きに名づけてOK!)

 

で、Kindは右の▼をクリックして、出てきた候補の中からClassを選択してOKボタンを押します。

 

 

f:id:little_strange:20200121215254p:plain

Kijiクラスの下地ができました^^

 

 

記事クラスの内容を用意します

class Kiji (title:String="無題",body:String="")

 とりあえず↑のように書きました。

 

 一応、これだけでも
「タイトルと本文をString型で渡せば記事のインスタンスが作れて、タイトルは省略すれば『無題』、本文は空欄になる」
というクラスとして使えます!

 

で、ここに「書いた日時」を管理するプロパティを追加します。

 

 書いた日時については、指定するものではなく、実際に記事インスタンスを作成した日時を入れたいので、コンストラクタ(↑の(title:String="無題",body:String="")の部分)には入れずに、

 

import java.util.*

class Kiji (var title:String="無題",var body:String=""){
val upload_time: Date = Date()
}

 

{ }の中でvalで宣言しました。

valで宣言すると、後からの変更はできなくなります。
 後から変更可能にしたい時はvarを使います。

 

 とりあえず、記事クラスについてはここで置いておきますね。

 

 

Blogger.ktの編集~!

 さて、「記事」は各ブロガーが固有で複数持つものなので、Bloggerクラスに、

  • ブログジャンル
  • ブログタイトル
  • 記事、を中身とする配列

の3つのプロパティの追加、そして

  • 記事を書く

というメソッドを追加していきます!

 

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=""

var blog_genre = ""
var blog_title = ""
var kiji_list = mutableListOf<Kiji>()


fun hello(): String {
pv++
return "こんにちは!${name}です。よろしく!"
}

fun post(str0:String,str1:String) {
kiji_list.add( Kiji( str0 , str1 ) )

follower.forEach{
it.notice_text += "$blog_title$str0\n"
pv++

}
}


fun touroku(aite:Blogger):String{
follow.add(aite)
aite.follower.add(this)
return "${name}${aite.name}の読者になりました!"
}

override fun toString(): String {
var s0=""

s0 = "ブロガー名:$name\n"
s0 += "累計PV:$pv\n"

s0 += "購読中:"
follow.forEach{
s0 += it.name + " "
}
s0 += "\n"

s0 += "読者:"
follower.forEach{
s0 += it.name + " "
}
s0 += "\n"

return s0
}

}

 

↑こんな感じに、がしがしと書きました。

 また、赤文字部分が今回追記した部分となります。

 

 

var blog_genre = ""
var blog_title = ""
var kiji_list = mutableListOf<Kiji>()

 

 上から順に、ブログジャンル、ブログタイトル、そして記事の配列を宣言しています。

 

 

fun post(str0:String,str1:String) {
kiji_list.add( Kiji( str0 , str1 ) )

follower.forEach{
it.notice_text += "$blog_title$str0\n"
pv++

}
}

 postという名前で記事投稿メソッドを用意しました。

 

 記事タイトル、記事本文を引数として渡すと、 

Kiji( str0 , str1 )

にて、記事インスタンスを作成、それと同時に

kiji_list.add

で、その記事をそのブロガーの記事リストの1つとして追加してくれる、という内容となっています。

 

follower.forEach{
it.notice_text += "$blog_title$str0\n"
pv++

}

続けて、記事を投稿したブロガーのfollower(読者)さん達のnotice_text(お知らせ)に、ブログ名と記事タイトルを追記しています。

 

…ついでに、読者さんの数だけループする処理の中にpv++を書いているので、
「読者さんの数だけPVが増える!」というオマケつき^^

 

 

 

ここで一旦、区切ります^^;

 ここから、MainActivity.ktの編集に入り、2つのクラスの動作を確認する段階に入るところですが、だいぶ長~くなってしまいそうなので、今回の記事はいったんここまで!とさせていただきます^^;

 

「後編」で確認部分を書きます!

…間違っても「中編」として3部構成にならないようにしなくちゃwww

 

 

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

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