SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【最新Kotlinアップデート解説】バージョン1.1からの変更点総まとめ

Kotlin最新アップデートまとめ ──関数の変更点を紹介、引数の渡し方・引数のデフォルト値

【最新Kotlinアップデート解説】バージョン1.1からの変更点総まとめ 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 Android開発において第1言語の地位を獲得したKotlin。JVM言語であるがゆえに、もちろん、Android以外でも利用されています。そのKotlinの最初の安定版であるバージョン1がリリースされたのが2016年2月です。その後、アップデートを重ね、バージョン2が2024年5月にリリースされました。この連載では、8年間に及ぶアップデート、すなわち、バージョン1.1以降、2.0までに施されたアップデートに関して、バージョン横断でテーマ別に紹介していきます。第1回である前回は、連載の内容を概観するとともに、細かいテーマを複数紹介しました。今回は、関数に関する変更点をまとめて紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

関数の引数の名前指定

 本連載は、Kotlinのバージョン1.1から2.0までのアップデート内容を、テーマごとにバージョン横断で紹介する連載です。今回は、関数をテーマに、その変更点を紹介していきます。まずは、関数の引数の名前指定に関するアップデートです。

Kotlinの関数の引数のデフォルト値

 Kotlinには、関数という仕組みが存在します。JVM言語の大元となるJavaには関数がないので、関数はKotlinの大きな特徴のひとつと言えます。とはいえ、クラス内に記述しないだけで、その定義構文はメソッドと同じです。ただし、Javaにはない仕組みがいくつかあります。

 まず、引数のデフォルト値を設定できます。例えば、リスト1のような関数定義です。

[リスト1]引数のデフォルト値が設定された関数の例
fun createLandmark(name: String, lat: Double = 0.0, lon: Double = 0.0, note: String = "") {
  :
}

 リスト1の関数createLandmark()には、name、lat、lon、noteの4個の引数が定義されており、そのうち、name以外には=で値が記述されています。この値が、引数のデフォルト値となり、デフォルト値が定義されている引数に関しては、関数呼出の際に引数を省略できるといった特徴があります。

 例えば、リスト2の2行のcreateLandmark()の実行は、どちらも問題なく動作します。(1)ではすべての引数を渡している一方で、(2)では必須引数のnameのみを渡しています。その場合は、latとlonはともに0、noteは空文字("")として処理されます。

[リスト2]引数を省略したcreateLandmark()の実行コード例
createLandmark("日本のへそ公園", 35.0, 135.0, "兵庫にある。")  // (1)
createLandmark("ナル島")  // (2)

名前を指定して引数を渡す方法

 Kotlinで関数を呼び出す際、名前を指定することもできます。その場合、引数の渡す順序は任意となり、定義順である必要がなくなります。例えば、リスト3の実行コードです。

[リスト3]引数名を指定したcreateLandmark()の実行コード例
createLandmark(note = "兵庫にある", name = "日本のへそ公園", lon = 135.0, lat = 35.0)

 引数名を指定して引数を渡す関数実行は、引数が省略できる際に真価を発揮します。必要な引数のみを順序に関係なく渡せるのです。例えば、リスト4の実行コードです。このコードでは、必須引数の第1引数nameはともかく、第2引数と第4引数を省略して、第3引数のlonを渡しています。こういった飛び飛びの引数渡しは、名前を指定しない限りは不可能です。

[リスト4]引数名を指定して必要な引数のみを渡したcreateLandmark()の実行コード例
createLandmark(name = "ポンティアナ", lon = 109.3)

定義順を保持したまま名前を指定

 ここまで紹介した2種の引数の渡し方は、混在させることが可能です。すなわち、定義順に引数を渡しながら、名前を指定する方法です。例えば、リスト5のコードです。

[リスト5]定義順を保持したまま引数名を指定してのcreateLandmark()の実行コード例
createLandmark("アンタナナリボ", lat = -18.93, lon = 47.52, "マダガスカルの首都。")  // (1)
createLandmark("グリニッジ", lat = 51.477)  // (2)
createLandmark(name = "グリニッジ", 51.477)  // (3)

 リスト5では、(1)ですべての引数を定義順に渡しながら、latとlonだけ引数名を指定しています。こうすることで、どの値がどの引数かが一目瞭然です。もちろん、デフォルト値が指定されている場合は引数を省略できるので、(2)と(3)では、lonとnoteを省略して、第1引数nameと第2引数のlatのみを渡しています。

 実は、これらのコードのうち(1)や(3)のコードが問題なく実行できるようになったのはバージョン1.4からです。それまでは、(2)のように「引数名を指定せずに引数を渡す場合は、最初に引数名を指定する引数よりも前のものでなければならない」といった決まりがありました。この制約に従うならば、リスト5の(1)は次のコードである必要がありました。1.4でこの制約がなくなりました。

createLandmark("アンタナナリボ", lat = -18.93, lon = 47.52, note = "マダガスカルの首都。")

次のページ
関数型引数の渡し方

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【最新Kotlinアップデート解説】バージョン1.1からの変更点総まとめ連載記事一覧
この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20990 2025/02/25 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング