SlideShare a Scribd company logo
Android Studio 3.0
with
Kotlin
〜 Google I/O 2017 報告会〜
@mokelab
● モバイルアプリの
受託開発
● 技術情報発信
● グッズ販売
Tech Sheets
20170618 Google I/O報告会in福岡
本がでます
初心者〜中級者向けに
アプリ開発時の落とし穴を50個ほど紹介
(おとなの事情で7月中旬予定)
20170618 Google I/O報告会in福岡
20170618 Google I/O報告会in福岡
● IntelliJ 2017.1
● Kotlinサポート
● サンプルデータ
● Downloadable fonts
● Device explorer
● Android Profiler
● APK Analyzerの改善
● エミュレータ
● etc
サンプルデータ
プレビューにサンプルデータ表示機能
tools:src=”@sample/xxxx”
JSONやtxtファイルで用意
(画像はだめっぽい。。。)
フォント
XMLでフォントが指定できるようになった!
<TextView
android:id="@+id/body_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/aclonica"
tools:text="@tools:sample/lorem"/>
フォント
Android Studioもいい感じに対応
Device explorer
地味だけど便利
Android Profiler
Chrome dev toolのAndroid版みたいなやつ
動画でどうぞ
20170618 Google I/O報告会in福岡
APK Analyzer
地味〜に改善
エミュレータ
Playストア入りエミュレータ
ただしRootはとれません
Gradle
dependenciesの書き方が変更に
compile 'com.android.xxxxx'
↓
implementation 'com.android.xxxxx'
api 'com.android.xxxxx'
20170618 Google I/O報告会in福岡
● JVM言語
○ Scalaとか、Groovyとか
● Javaと混ぜて使える
○ ブリッジを書く必要なし!
○ ただしAPTが混ざるとアヤシイ
● モダンな機能いろいろ入ってる
● コンパイルはそれなりに早い
○ というかSwiftが遅すぎや。。
変数
val name : String = "moke"
var age : Int = 5
[val|var] 名前 : 型 という形式
valだと変更できません
if式
var message = ""
if (Build.VERSION.SDK_INT >=
Build.VERSION_CODE.M) {
message = "Supported"
} else {
message = "not supported"
}
if式
式なので、こんな風にかける
var message = if (Build.VERSION.SDK_INT >=
Build.VERSION_CODE.M)
"Supported" else "not supported"
繰り返し(for)
Javaの拡張for文と同じかたち
val a = arrayOf(1, 2, 3, 4, 5)
for (item in a) {
Log.v("tag", "value=$item")
}
繰り返し(for)
for (int i = 0 ; i < 10 ; ++i) はどうやって書く?
for (item in 0..9) {
Log.v("tag", "value=$item")
}
繰り返し(while)
Javaとまぁ同じ
val k = 10
while (k >= 10) {
….
--k
}
繰り返し(do-while)
Javaとまぁ同じ
val k = 10
do {
….
--k
} while (k >= 10)
when式
switch文のちょいいい版
var name = ""
when (Build.VERSION.SDK_INT) {
Build.VERSION_CODE.M -> name = "M!"
Build.VERSION_CODE.N -> name = "N!"
else -> { name = "Unknown" }
}
when式
式なので右辺に使える
else は必須
var name = when (Build.VERSION.SDK_INT) {
Build.VERSION_CODE.M -> "M!"
Build.VERSION_CODE.N -> "N!"
else -> { "Unknown" }
}
プロパティ
Kotlinのクラスではプロパティになる
class KotlinClass {
var name : String = ""
}
プロパティ
Javaだとsetter/getter
valなプロパティだったらgetterのみ
public class JavaClass {
private void moke() {
KotlinClass c = new KotlinClass();
c.setName("moke");
}
}
コンストラクタ
その1:constructorで定義する
class KotlinClass {
val name : String
constructor(name : String) {
this.name = name
}
}
コンストラクタ
その2:プライマリコンストラクタで定義する
class KotlinClass(n : String) {
val name : String = n
}
※その1の方法はセカンダリコンストラクタと呼ぶよ
コンストラクタ
その3:プロパティも一緒に定義しちゃえ
class KotlinClass(val name : String) {
…
}
コンパニオンオブジェクト
staticメソッドはどうやって定義する?
// これはだめ
class KotlinClass {
static fun newInstance() : KotlinClass {
return KotlinClass()
}
}
コンパニオンオブジェクト
コンパニオンオブジェクトを使う
class KotlinClass {
companion object {
fun newInstance() : KotlinClass {
return KotlinClass()
}
}
}
コンパニオンオブジェクト
Javaではこう見える
void moke() {
KotlinClass c =
KotlinClass.Companion.newInstance();
}
コンパニオンオブジェクト
@JvmStatic をつけると、staticメソッドっぽく
class KotlinClass {
companion object {
@JvmStatic
fun newInstance() : KotlinClass {
return KotlinClass()
}
}
コンパニオンオブジェクト
Javaではこう見える
void moke() {
KotlinClass c =
KotlinClass.newInstance();
}
null安全
nullが入る可能性がある変数は
型に?をつける
fun moke(val name : String?) {
if (name != null) {
Log.v("tag", "name=$name")
}
}
null安全
nullだったらnullを返してメソッドを呼ばない
fun moke(val name : String?) {
Log.v("tag", "length=" + name?.length)
}
null安全
nullがはいらない場合は強制的にNon-Nullにでき
る
もし実行時にnullだったらクラッシュ
fun moke(val name : String?) {
Log.v("tag", "length=" + name!!.length)
}
null安全
Javaのメソッドの戻り値は?があってもなくてもOK
fun moke(val name : String?) {
val version : String = JavaClass.getVersion()
val version2 : String? =
JavaClass.getVersion()
}
null安全
Javaのメソッドに@Nullableや@NonNullをつける
と、Kotlin側で忖度してくれる
@Nullable
public static String getVersion() { /* */ }
fun moke(val name : String?) {
// エラー、NullableはNon-Nullにセット不可
val version : String = JavaClass.getVersion()
}
ラムダ式
メソッド1つで、その引数が1つの場合はいろいろ省
略できる
val b = Button(this)
b.setOnClickListener {
Log.v("tag", "id=" + it.id)
}
Thanks!

More Related Content

PDF
TypeScript & 関数型講座 第2回 TypeScript という言語
PDF
js-ctypes - ネイティブコードを呼び出す新しいカタチ
PDF
jqで極めるシェル芸の話
PPTX
Javascript勉強会資料1
PDF
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
PDF
Elasticsearchプラグインの作り方
PDF
Building asp.net core blazor and elasticsearch elasticsearch using visual stu...
PDF
C++ lecture-0
TypeScript & 関数型講座 第2回 TypeScript という言語
js-ctypes - ネイティブコードを呼び出す新しいカタチ
jqで極めるシェル芸の話
Javascript勉強会資料1
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
Elasticsearchプラグインの作り方
Building asp.net core blazor and elasticsearch elasticsearch using visual stu...
C++ lecture-0

Similar to 20170618 Google I/O報告会in福岡 (20)

PDF
Kotlin Meets Data-Oriented Programming: Kotlinで実践する「データ指向プログラミング」
PDF
.NET の今と今後に思うこと
PDF
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
PPTX
Electronについて
PPTX
Jetpack Library 事始め
PPTX
Molecule入門
PPTX
物体検出フレームワークMMDetectionで快適な開発
PDF
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
PDF
cocos2d-xとネイティブ間の連携
PDF
C#勉強会 ~ C#9の新機能 ~
PDF
Building React, Flutter and Blazor development and debugging environment with...
PPTX
Qlik TECHTALK Qlik Cloud 日本リージョン開設!テナント作成と移行方法を解説
PDF
KotlinでROSノードを書いてみた
PDF
sveltekit-ja.pdf
PDF
Elastic circle ci-co-webinar-20210127
PPTX
GoF デザインパターン 2009
PDF
What is template
PDF
160705-03 RTミドルウエア講習会・名城大
PPTX
.NETの自作ツール公開手段
PDF
Kotlin/Native 「使ってみた」の一歩先へ
Kotlin Meets Data-Oriented Programming: Kotlinで実践する「データ指向プログラミング」
.NET の今と今後に思うこと
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
Electronについて
Jetpack Library 事始め
Molecule入門
物体検出フレームワークMMDetectionで快適な開発
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
cocos2d-xとネイティブ間の連携
C#勉強会 ~ C#9の新機能 ~
Building React, Flutter and Blazor development and debugging environment with...
Qlik TECHTALK Qlik Cloud 日本リージョン開設!テナント作成と移行方法を解説
KotlinでROSノードを書いてみた
sveltekit-ja.pdf
Elastic circle ci-co-webinar-20210127
GoF デザインパターン 2009
What is template
160705-03 RTミドルウエア講習会・名城大
.NETの自作ツール公開手段
Kotlin/Native 「使ってみた」の一歩先へ
Ad

20170618 Google I/O報告会in福岡