Skip to Content
Java から Kotlin へ
book

Java から Kotlin へ

by Duncan McGregor, Nat Pryce
May 2025
Intermediate to advanced
424 pages
6h 55m
Japanese
O'Reilly Media, Inc.
Book available
Content preview from Java から Kotlin へ

第16章. 関数へのインタフェース

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

Javaでは、ある機能を定義するコードとそれを必要とするコードとの間の契約を指定するためにインタフェースを使用する。 これらのインタフェースは両者を結合させるため、ソフトウェアを保守しにくくする可能性がある。 関数型はこの問題をどのように解決するのだろうか?

もし 、あなたが書いているコードからメールを送信する必要があると想像してみてほしい。 メールを受信したり、送信されたメッセージをリストアップしたりするのではなく、とりあえずメールを送信し、忘れるだけだ。

電子メールを記述するコードは簡単だ:

data class Email(
    val to: EmailAddress,
    val from: EmailAddress,
    val subject: String,
    val body: String
)

Email が与えられたら、クライアントコードはそれを送信するために最も単純な関数を呼び出したい

fun send(email: Email) {
    ...
}

もちろん、この関数を実装しようとすると、実際にメールを送信するためには、他にもいろいろな情報が必要であることがわかる。 メールそのものに関する情報ではなく、メールの送信方法に関する設定である。 送信サーバのホスト名やセキュリティ資格情報など、技術者ではない親戚は知らないが、彼らの新しいコンピュータをセットアップするために必要なものすべてである。 このようなすべての設定のために、sendEmail に3つのパラメータを追加することにする:

fun sendEmail(
    email: Email,
    serverAddress: InetAddress,
    username: String,
    password: String
) {
    ...
}

クライアントとしては、利便性が大幅に低下してしまった。 メールを送りたいところはすべて、この設定を知っていなければならない。 コードベースの上から下まで、この設定を受け渡すことになるのだ。 グローバル変数に詳細を隠すことでこの問題を解決するのは、単体テストスイートを実行するたびに50通のメールが送信されることに気づくまではうまくいく! このような些細な詳細を隠す、もっと良い方法があるはずだ。

オブジェクト指向カプセル化

オブジェクト指向言語 には、この問題に対する解決策が用意されている。オブジェクトがデータをカプセル化できるのだ:

class EmailSender(
    private val serverAddress: InetAddress,
    private val username: String,
    private val password: String
) {
    fun send(email: Email) {
        sendEmail(
            email,
            serverAddress,
            username,
            password
        )
    }
}

Eメールを送りたいときは、(静的関数ではなく)EmailSenderEmailSender 、関数を呼び出す代わりにメソッドを呼び出す。メソッドに細かいことを伝える必要はない:

// Where we know the configuration
val sender: EmailSender = EmailSender(
    inetAddress("smtp.travelator.com" ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Kotlin を使用した Android のプログラミング

Kotlin を使用した Android のプログラミング

Pierre-Olivier Laurence, Amanda Hinchman-Dominguez, G. Blake Meike, Mike Dunn
Java 開発者向け DevOps ツール

Java 開発者向け DevOps ツール

Stephen Chin, Melissa McKay, Ixchel Ruiz, Baruch Sadogursky
JavaScript 第7版

JavaScript 第7版

David Flanagan, 村上 列

Publisher Resources

ISBN: 9798341651890Supplemental Content