1. 始める前に
このコースでは、Kotlin プログラミング言語でコードを記述してアプリを作成します。Kotlin プログラミング言語は、Android アプリを初めて作成するユーザー向けに Google が推奨している言語です。
Kotlin は、デベロッパーの生産性を高める最新のプログラミング言語です。たとえば、Kotlin では他のプログラミング言語と比べて、同じ機能を少ないコード行でより簡潔に記述できます。また、Kotlin で作成したアプリはクラッシュする可能性が低いため、堅牢で安定したアプリをユーザーに提供できます。基本的に、Kotlin を使用することで、より優れた Android アプリを短時間で開発できます。そのため、業界での Kotlin の人気は高く、プロの Android デベロッパーの大半が使用する言語となっています。
Kotlin で Android アプリを作成するには、最初に Kotlin プログラミングのコンセプトの基礎をしっかりと確立することが重要です。この Codelab では、アプリの作成に進む前に、Kotlin プログラミングの基本について学びます。
作成するアプリの概要
- 実行時にメッセージを表示する簡単な Kotlin プログラム。
学習内容
- シンプルな Kotlin プログラムを記述して実行する方法。
- シンプルなプログラムを変更して異なる出力を表示する方法。
必要なもの
- インターネットに接続でき、ウェブブラウザがインストールされたパソコン。
2. 始める
この Codelab では、シンプルな Kotlin プログラムの基本事項と変更方法を学びます。プログラムとは、パソコンやモバイル デバイスになんらかのアクションを実行させるための一連の命令と考えることができます。これには、ユーザーへのメッセージの表示や、ショッピング カートの合計額の計算などがあります。コンピュータが実行すべきことを順を追って示した命令を、「コード」と呼びます。プログラムのコードを変更すると、出力が変わる可能性があります。
コードの記述と編集には、コードエディタというツールを使用します。テキスト エディタでもテキストの記述と編集が可能ですが、コードエディタには、コードをより正確に記述するための機能が用意されています。たとえば、コードエディタでは、入力中にオートコンプリートの候補が表示され、コードが正しくない場合はエラー メッセージが表示されます。
Kotlin 言語の基本を練習するには、Kotlin プレイグラウンドと呼ばれるインタラクティブなコードエディタを使用します。ウェブブラウザからアクセスできるため、パソコンにソフトウェアをインストールする必要はありません。Kotlin プレイグラウンドでは、直接 Kotlin コードを編集して実行し、出力を確認できます。
Kotlin プレイグラウンド内で Android アプリを作成することはできません。後ほど Android Studio というツールをインストールし、Android Studio で Android アプリコードの記述と編集を行います。
Kotlin の概要を理解したところで、最初のプログラムを見てみましょう。
3.Kotlin プレイグラウンドを開く
パソコンのウェブブラウザで Kotlin プレイグラウンドを開きます。
この画像のようなウェブページが表示されます。
コードエディタにはすでに、デフォルトのコードがいくつか入力されています。この 3 行のコードで、簡単なプログラムが作成されています。
fun main() {
println("Hello, world!")
}
プログラミングの経験がない方も、このプログラムが何を実行するためのものか推測してみてください。
次のセクションで、その推測が正しいか確認しましょう。
4. 初めてのプログラムを実行する
をクリックして、プログラムを実行します。
実行ボタンをクリックすると、多くのことが行われます。Kotlin プログラミング言語のコードは人間が理解できるように設計されているため、Kotlin プログラムではコードの読み書きや共同作業を簡単に行うことができます。しかし、パソコンはこの言語をそのまま理解することができません。
そのため、記述された Kotlin コードを読み込んで 1 行ずつ解析し、パソコンが理解できる形式に変換する Kotlin コンパイラが必要になります。このプロセスは、コードのコンパイルと呼ばれます。
コードが正常にコンパイルされると、プログラムが実行されます。パソコンでプログラムが実行されると、パソコンは各命令を実行します。料理のレシピにたとえるなら、プログラムの各命令を実行することは、レシピの各ステップを実行することに相当します。
このスクリーンショットは、プログラムの実行時に表示される出力を示しています。
コードエディタの下部にあるペインに、プログラムの出力(結果)が以下のように表示されるはずです。
Hello, world!
この出力からわかるとおり、このプログラムは Hello, world!
というメッセージを出力(表示)することを目的としています。
このプログラムの仕組みを見てみましょう。Kotlin プログラムには、コード内で Kotlin コンパイラが開始する場所となる main 関数が必要です。main 関数は、プログラムのエントリ ポイント(開始点)です。
次に、関数について詳しく見ていきましょう。
5. 関数の構成要素
関数とは、特定のタスクを実行するプログラムのセグメントのことです。プログラムには複数の関数を含めることも、1 つの関数のみを含めることもできます。
関数の定義と呼び出し
コードでは、最初に関数を定義します。つまり、そのタスクの実行に必要なすべての命令を指定します。
関数を定義したら、その関数を呼び出すことで、その関数内の命令を実行できます。
これは次のように例えることができます。チョコレート ケーキを焼くための詳細な手順(命令)を書き出し、この命令セットに bakeChocolateCake
という名前を付けるとします。ケーキを焼きたいときには、bakeChocolateCake
命令を実行します。3 つのケーキが必要な場合は、bakeChocolateCake
命令を 3 回実行する必要があります。最初のステップでは、各ステップを定義し、それぞれに名前を付けます。これは関数の定義に相当します。その後、実行する必要のあるときに、いつでも各ステップを参照できます。これは関数の呼び出しに相当します。
関数を定義する
関数を定義するために必要な主要部分は次のとおりです。
- 関数には、後で呼び出せるように名前を付ける必要があります。
- 関数には、いくつかの入力や、関数の呼び出し時に指定する情報が必要になる場合もあります。関数は、こうした入力を使用して目的を達成します。入力は必須ではなく、入力が不要な関数もあります。
- 関数には、タスクの実行命令が含まれる本体もあります。
上の図を Kotlin コードに変換するには、次の構文(形式)を使用して関数を定義します。これらの要素の順序は重要です。「fun」という単語、関数名、丸かっこで囲まれた入力値、中かっこで囲まれた関数本体の順に記述します。
Kotlin プレイグラウンドに表示された main 関数の例には、関数の主要部分として以下が含まれています。
- 関数定義は
fun
という単語で始まっています。 - その後に、関数名の
main
があります。 - この関数には入力がないため、丸かっこ内は空になっています。
- 関数本体には
println("Hello, world!")
という 1 行のコードがあります。これは、関数の開き中かっこと閉じ中かっこの間にあります。
関数の各部分については、以下で詳しく説明します。
関数のキーワード
Kotlin で関数を定義することを示すには、新しい行で、特殊な単語である fun
(関数の略)を使用します。すべて小文字で、正確に「fun
」と入力してください。Kotlin コンパイラはプログラマーの意図を認識できないため、func、function などのスペルを使用することはできません。
これらの特殊な単語は Kotlin ではキーワードと呼ばれ、Kotlin で新しい関数を作成する場合など、特定の目的のために予約されています。
関数名
人間が名前で個人を識別しているように、関数にも名前があり、それによってお互いを区別しています。関数名は、fun
キーワードの後に記述します。
関数の目的に基づいて、関数に適切な名前を選択します。名前は通常、動詞または動詞句にします。関数名として Kotlin キーワードは使用しないことをおすすめします。
関数名は、キャメルケースの命名規則に従い、最初の単語をすべて小文字にする必要があります。名前に複数の単語が含まれる場合、単語の間にスペースを入れず、その他の単語はすべて大文字で始める必要があります。
関数名の例:
calculateTip
displayErrorMessage
takePhoto
関数の入力
関数名の後には必ず丸かっこが続きます。丸かっこ内には関数の入力を記述します。
入力は、関数が目的を果たすために必要なデータです。関数を定義する際には、関数の呼び出し時に特定の入力を渡すことを必須とすることもできます。関数に必要な入力がない場合、丸かっこは空のまま(()
)にします。
入力の数が異なる関数の例を次に示します。
次の図は、addOne
という関数を示しています。この関数の目的は、特定の数値に「1」を足すことです。入力は 1 つで、任意の数字を指定できます。関数本体には、関数に渡される数値に 1 を加算するコードがあります。
次の例は、printFullName
という関数です。この関数には、姓と名の 2 つの入力が必要です。関数本体が姓と名を出力することで、人物のフルネームが表示されます。
最後の例は、関数の呼び出し時に入力を渡す必要のない関数を示しています。displayHello()
関数を呼び出すと、Hello というメッセージが出力されます。
関数本体
関数本体には、関数の目的を達成するために必要な命令が含まれています。関数本体を見つけるには、開き中かっこと閉じ中かっこで囲まれたコード行を探します。
シンプルなプログラムの説明
この Codelab で見たシンプルなプログラムをもう一度確認してみましょう。
このプログラムには、main 関数という 1 つの関数が含まれています。main は、Kotlin の特別な関数名です。Kotlin プレイグラウンドでコードを記述する場合、コードは main()
関数内に記述するか、main()
関数から呼び出す必要があります。
この main()
関数の本体には 1 行のコードしかありません。
println("Hello, world!")
このコード行は、出力ペインに Hello, world!
テキストを出力するという特定のアクションを実行するため、ステートメントとなります。具体的には、このコード行で println()
関数が呼び出されています。println()
は、Kotlin 言語ですでに定義されている関数です。つまり、Kotlin 言語を作成したエンジニア チームによって、println()
関数の関数宣言がすでに作成されています。この関数には 1 つの入力が必要です。この入力がメッセージとして出力されます。
println()
関数を呼び出すときは、関数名の後の丸かっこ内にメッセージ テキストを記述します。表示するテキストは、必ず "Hello, world!"
のように引用符で囲みます。
プログラムを実行すると、println()
関数に渡されたメッセージが出力されます。
Hello, world!
試してみる
プログラムの元のコードを見てみましょう。出力に以下のメッセージが表示されるように、Kotlin プレイグラウンドのコードを変更できるでしょうか。
Hello, Android!
6. プログラムを変更する
- 出力に表示されるメッセージを変更するには、プログラムの 2 行目にある
println()
関数呼び出しを変更します。println()
関数のworld
をAndroid
に置き換えます。"Hello, Android!"
が引き続き引用符と丸かっこ囲まれていることを確認してください。
fun main() {
println("Hello, Android!")
}
- プログラムを実行します。
- 次のメッセージが出力されます。
Hello, Android!
これで、初めてのプログラムを変更できました。
次に、メッセージが 2 回出力されるようにコードを変更してみましょう。出力は次のようになります。
Hello, Android! Hello, Android!
複数のメッセージを出力する
関数内には、タスクの実行に必要な数だけ命令行を記述できます。ただし、Kotlin では 1 行につき 1 つのステートメントのみを指定する必要があります。別のステートメントを記述する場合は、関数の新しい行に配置します。
複数行のテキストを出力するようにプログラムを変更するには:
- 関数本体内の最初の
println()
ステートメントをコピーして、その下に 2 番目のステートメントとして貼り付けます。両方のprintln()
ステートメントを main 関数の中かっこ内に配置する必要があります。これで、関数本体内のステートメントが 2 つになりました。
fun main() {
println("Hello, Android!")
println("Hello, Android!")
}
- プログラムを実行します。
- プログラムを実行すると、出力は次のようになります。
Hello, Android! Hello, Android!
このようにして、コードへの変更が出力にどのように影響するかを確認できます。
Hello,
YOUR_NAME
!
と出力するようにコードを変更します。
7. Kotlin スタイルガイド
このコースでは、Android デベロッパーとして従うべき適切なコーディング慣習について学びます。そうした慣習の 1 つは、Kotlin でコードを記述する際に、Google の Android コーディング標準に従うことです。詳細なガイドはスタイルガイドと呼ばれ、コードを見やすくするための適切な形式や、コードを記述する際に従うべき規則が記載されています。たとえば、スタイルガイドには、空白文字、インデント、命名などに関する推奨事項が含まれています。
スタイルガイドを遵守することの目的は、コードを読みやすくするとともに、他の Android デベロッパーの記述方法との一貫性を持たせることです。この一貫性は、大規模なプロジェクトで共同作業を行う場合に重要となります。これにより、プロジェクト内のすべてのファイルでコードのスタイルが統一されます。
ここまでで Kotlin について学習した内容に関して、スタイルガイドの推奨事項をいくつかご紹介します。
- 関数名はキャメルケースで記述し、動詞または動詞句を使用します。
- ステートメントは 1 行に 1 つずつ記述します。
- 関数の先頭行の末尾には、開き中かっこが必要です。
- 開き中かっこの前にはスペースが必要です。
- 関数本体は、スペース 4 つ分インデントします。コードのインデントにはタブ文字を使用せず、スペースを 4 つ入力してください。
- 閉じ中かっこは、関数本体のコードの最終行の後に、単独の行で記述します。閉じ中かっこは、関数の先頭の
fun
キーワードと揃えます。
Kotlin の知識を身につける過程で、さらに Android のコーディング規則を学ぶことができます。詳細なスタイルガイドはこちらにあります。まだ学習していない Kotlin の他のトピックも含まれますが、気にする必要はありません。
8. コードのエラーを修正する
人間が言語を学習する場合、正しく単語を使用し、文を構成するための、構文や文法の規則があります。プログラミング言語にも同様に、有効なコード(正常にコンパイルできるコード)を記述するための特定のルールがあります。
コーディングでは、誤って無効なコードを記述することがよくあります。初心者はこのようなミスを見つけたときに、混乱したり戸惑ったりするかもしれませんが、心配する必要はありません。記述したコードがそのまま完全に機能することはめったにないからです。ドキュメントを作成する際に推敲を重ねるのと同様に、コードについても、期待どおりに動作するまで何度も記述し直すことがよくあります。
コードを正常にコンパイルできない場合は、エラーが発生します。たとえば、タイプミス(引用符やかっこが抜けているなど)があると、コンパイラはコードを理解できず、コンピュータに実行させる手順に変換することができません。コードが想定どおりに動作しない場合や、コードエディタにエラー メッセージが表示された場合は、コードに戻って修正する必要があります。これらのエラーを解決するプロセスは、トラブルシューティングと呼ばれます。
- 次のコード スニペットをコピーして Kotlin プレイグラウンドに貼り付け、プログラムを実行するとどうなるでしょうか。
fun main() {
println("Today is sunny!)
}
本来は Today is sunny!
というメッセージが表示されるはずですが、出力ペインには、代わりに感嘆符アイコンとエラー メッセージが表示されます。
Kotlin プレイグラウンドからのエラー メッセージ
エラー メッセージは「Expecting」で始まっています。これは、Kotlin コンパイラが「想定」していた対象をコード内で見つけられないことを示しています。この場合、コンパイラは、プログラムの 2 行目のコードに閉じ引用符と閉じ丸かっこがあることを想定しています。
println()
ステートメントを見ると、表示するメッセージには開き引用符はありますが、閉じ引用符がありません。コード内に閉じ丸かっこがあっても、その前に閉じ引用符がないため、コンパイラは丸かっこが出力テキストの一部であると判断します。
- 感嘆符と閉じ丸かっこの間に閉じ引用符を追加します。
fun main() {
println("Today is sunny!")
}
main 関数には、1 行のコード(println()
ステートメント)が含まれています。テキストは "Today is sunny!"
のように引用符で囲み、丸かっこ内に配置します。
- プログラムを再実行します。
エラーは発生せず、出力ペインに次のテキストが表示されるはずです。
Today is sunny!
これでエラーを修正できました。コードの記述やエラーのトラブルシューティングの経験を積むことで、コードを記述する際に、大文字と小文字、スペル、スペース、記号、名前に注意することの重要性を理解できるようになります。
次のセクションでは、学習した内容の演習を行います。この Codelab の最後に解答が用意されていますが、まずは自分で考えることをおすすめします。
9. 練習
- このプログラムのコードを読み、Kotlin プレイグラウンドで実行せずに出力結果を推測してみましょう。
fun main() {
println("1")
println("2")
println("3")
}
推測できたら、このコードをコピーして Kotlin プレイグラウンドに貼り付け、推測が正しいか確認してください。
- Kotlin プレイグラウンドを使用して、次のメッセージを出力するプログラムを作成してください。
I'm learning Kotlin!
- このプログラムをコピーして、Kotlin プレイグラウンドに貼り付けます。
fun main() {
println("Tuesday")
println("Thursday")
println("Wednesday")
println("Friday")
println("Monday")
}
以下の出力を行うようにプログラムを修正してください。
Monday Tuesday Wednesday Thursday Friday
トラブルシューティングに慣れておくため、次の演習ではエラーを修正します。各演習では、ブラウザの Kotlin プレイグラウンドにコードをコピーしてください。プログラムを実行しようとすると、エラー メッセージが表示されます。
- 目的の出力が生成されるように、プログラムのエラーを修正してください。
fun main() {
println("Tomorrow is rainy")
目的の出力:
Tomorrow is rainy
- 目的の出力が生成されるように、プログラムのエラーを修正してください。
fun main() {
printLine("There is a chance of snow")
}
目的の出力:
There is a chance of snow
- 目的の出力が生成されるように、プログラムのエラーを修正してください。
fun main() {
println("Cloudy") println("Partly Cloudy") println("Windy")
}
目的の出力:
Cloudy Partly Cloudy Windy
- 目的の出力が生成されるように、プログラムのエラーを修正してください。
fun main() (
println("How's the weather today?")
)
目的の出力:
How's the weather today?
これらの演習を完了したら、次のセクションの解答を使って答え合わせをしてください。
10. 解答
- プログラムの出力は次のようになります。
1 2 3
- プログラム内のコードは次のようになります。
fun main() {
println("I'm")
println("learning")
println("Kotlin!")
}
- プログラムの正しいコードは次のとおりです。
fun main() {
println("Monday")
println("Tuesday")
println("Wednesday")
println("Thursday")
println("Friday")
}
- プログラムの 3 行目に、
main
関数の関数本体の終了を示す閉じ中かっこがありません。
正しいコード:
fun main() {
println("Tomorrow is rainy")
}
出力:
Tomorrow is rainy
- プログラムを実行すると、
Unresolved reference: printLine
というエラーが表示されます。これは、printLine()
が Kotlin では認識されない関数であるためです。また、Kotlin プレイグラウンドで、エラーの原因となっているコードの部分が赤色でハイライト表示されています。関数名をprintln
に変更して、テキスト行を出力します。これにより、エラーが修正されます。
正しいコード:
fun main() {
println("There is a chance of snow")
}
出力:
There is a chance of snow
- プログラムを実行すると、
Unresolved reference: println
というエラーが表示されます。このメッセージでは、問題を解決するための方法が直接示されていません。これは、エラーのトラブルシューティングを行う場合によくあることで、予期しない動作を解決するためにコードを詳しく調べる必要があります。
よく見ると、コードの 2 番目の println()
関数呼び出しが赤色になっており、この部分に問題があることがわかります。これは、Kotlin では各行に 1 つのステートメントのみが記述されていることが想定されているためです。この場合、2 番目と 3 番目の println()
関数呼び出しを別々の新しい行に移動することで、問題を解決できます。
正しいコード:
fun main() {
println("Cloudy")
println("Partly Cloudy")
println("Windy")
}
出力:
Cloudy Partly Cloudy Windy
- プログラムを実行すると、
Function 'main' must have a body
というエラーが表示されます。関数本体は、丸かっこ(())ではなく閉じ中かっこ({})で囲む必要があります。
正しいコード:
fun main() {
println("How's the weather today?")
}
出力:
How's the weather today?
11. おわりに
以上で Kotlin の入門編は完了となります。
Kotlin でシンプルなプログラムを作成して実行し、出力されるテキストを確認しました。プログラムをさまざまな方法で変更し、その変更が出力に及ぼす影響を確認しました。プログラミングでミスをするのは珍しいことではありません。それを前提に、コード内のエラーをトラブルシューティングして修正するための初歩的な方法を学びました。これは今後役立つ重要なスキルです。
次の Codelab では、Kotlin で変数を使用して、より魅力的なプログラムを作成する方法を学習します。
まとめ
- Kotlin プログラムでは、プログラムのエントリ ポイントとして main 関数が必要です。
- Kotlin で関数を定義するには、
fun
キーワード、関数名、丸かっこで囲まれた入力、中かっこで囲まれた関数本体の順に指定します。 - 関数名はキャメルケースの命名規則に従い、小文字で始める必要があります。
println()
関数呼び出しを使用してテキストを出力します。- Kotlin スタイルガイドには、Kotlin でコーディングを行う際の形式とコード規則が記載されています。
- トラブルシューティングとは、コード内のエラーを解決するプロセスのことです。