Kotlinでオブジェクト(object)の動作確認

objectを使っていくつか遊びがてら実験してみた。オブジェクトに関してもやもやしていたが少しだけつかめてきた気がする。

companion objectでシングルトンの動作確認

Kotlinでcompanion objectを使って、JavaのStaticみたいな動作を行ってみた。次のHogeクラスはシングルトンパターンの基本的な形である。

class Hoge {
    companion object{
        var counter:Int = 0
    }

    fun countUp():Int {
        return counter++
    }
}

fun main() {
    val hoge1 = Hoge()

    println("hoge1 : ${hoge1.countUp()}")
    println("hoge1 : ${hoge1.countUp()}")
    println("hoge1 : ${hoge1.countUp()}")
    println("hoge1 : ${hoge1.countUp()}")

    val hoge2 = Hoge()
    println("hoge2 : ${hoge2.countUp()}")
    println("hoge2 : ${hoge2.countUp()}")
    println("hoge2 : ${hoge2.countUp()}")
    println("hoge1 : ${hoge1.countUp()}")

}

実行結果は次の通りとなる。確かにcompanion objectで囲まれた変数counterはインスタンスが1つだけとなっているようだ。

hoge1 : 0
hoge1 : 1
hoge1 : 2
hoge1 : 3
hoge2 : 4
hoge2 : 5
hoge2 : 6
hoge1 : 7

メソッドの関数オブジェクト

次のプログラム内のように、関数自体をオブジェクトとして扱う使うことができる。ただし、Hogeクラスのインスタンスを生成する必要がある。

class Hoge {
    var counter:Int = 0

    fun countUp():Int {
        return counter++
    }
}

fun main() {
    
    val hoge = Hoge()
    val countUp = hoge::countUp

    println("countUp1 : ${countUp()}")
    println("countUp1 : ${countUp()}")
    println("countUp1 : ${countUp()}")
    println("countUp1 : ${countUp()}")

}

実行結果は次の通り。

countUp1 : 0
countUp1 : 1
countUp1 : 2
countUp1 : 3

インタフェースとオブジェクトの組み合わせ

次のプログラムはOkHttpのCallbackで使うようなパターンだ。

interface Hoge {
    var counter:Int
    fun countUp():Int
}

val hoge = object:Hoge {
    init {
        counter = 0
    }

    override var counter: Int
        get() {
            println("counter ゲット ($field)")
            return field
        }
        set(value) {
            println("counter セット (${value})")
            field = value
        }

    override fun countUp(): Int {
        counter++
        return counter
    }

}

fun main() {
    
    hoge.countUp()
    hoge.countUp()
    hoge.countUp()
    hoge.countUp()
    hoge.countUp()

}

実行結果は次の通りとなる。

counter セット (0)
counter ゲット (0)
counter セット (1)
counter ゲット (1)
counter ゲット (1)
counter セット (2)
counter ゲット (2)
counter ゲット (2)
counter セット (3)
counter ゲット (3)
counter ゲット (3)
counter セット (4)
counter ゲット (4)
counter ゲット (4)
counter セット (5)
counter ゲット (5)

デスクワークの負担を減らすアイテム

作業効率をアップさせるには姿勢が大事です!実際に使ってみてどれもオススメなのでよかったら参考に!

Bestandノートパソコンスタンド 11 '' -16 '' Macbook Air Pro/富士通と互換性のある放熱性に優れたアルミニウム合金PCスタンド-シルバー
Bestandノートパソコンスタンド 11 '' -16 '' Macbook Air Pro/富士通と互換性のある放熱性に優れたアルミニウム合金PCスタンド-シルバー

ノートパソコンの高さをあげると、長時間のデスクワークでも作業者の負担を軽減する事が可能です。 アルミニウム製品、純正品、高品質、高級感があ ります。 対応機種:MacBook、MacBook Air、MacBook Pro、富士通と対応11"-16"ノートパソコン スタンド.

Amazon
AKRacing ゲーミングチェア Pro-X V2 GREY
AKRacing ゲーミングチェア Pro-X V2 GREY

AKRacingハイエンドゲーミングチェア。大きめの座面でゆったりとした座り心地。張地を経年劣化に強い高耐久仕様のPUレザーに変更したアップグレードモデル 寸法:背もたれ幅55cm/奥行55cm/高さ95cm、座面下高さ:32~39cm、座面厚さ:13cm、重量:25kg

Amazon
Kensington ExpertMouse ワイヤレストラックボール K72359JP
Kensington ExpertMouse ワイヤレストラックボール K72359JP

接続方式/Bluetooth、2.4GHz USB付属品/レシーバー、パームレスト、日本語取扱説明書 サイズ(本体):W130×D157×H65mm 対応OS:2.4GHzUSB:Windows10/8.1/8/7、MacOS10.8以降/Bluetooth4.0LE:Windows10/8.1、MacOS10.8以降

AmazonRakuten

Anrdoidアプリ開発にオススメの書籍

こちらの本は、図や絵が多くてわかりやすく、Androidアプリ開発初心者でも理解しやすい内容。基本的なことはしっかりおさえられるので、この手の本は一冊読んでおくと良と思う。

基本からしっかり身につくAndroidアプリ開発入門
基本からしっかり身につくAndroidアプリ開発入門

圧倒的な多数のユーザーが使っているヤフーのアプリ。その制作の最前線にいる黒帯エンジニアが、ユーザーが使いやすいアプリの大切な基本をしっかりと解説します。

KindleAmazonRakuten

Kotlinの実践的な使い方が学べる内容の本で、プログラミング技術をもっと磨きたい人向け。センスの良いプログラミングがたくさん紹介されていて、個人的には「目からうろこ」の連続だった本。

Kotlinプログラミング
Kotlinプログラミング

Kotlinは、Javaとの相互運用を可能にし、Android OSでGoogleがフルサポートする静的型プログラミング言語です。この言語は、Javaだけでは十全ではない(Javaだけでは実装に手間がかかりすぎる)、軽量かつ豊かな表現形式や、他言語ではすでに実装されている最新の機能を盛り込んでいます。

KindleAmazonRakuten

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

\Amazonギフトがお得/

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

\この記事をシェアする/