字幕表 動画を再生する 字幕スクリプトをプリント 翻訳字幕をプリント 英語字幕をプリント ROMAIN GUY: Good morning, everyone. 皆さん おはようございます [APPLAUSE] 待って 私たちではなく Wait, don't cheer us. 次のスピーカーに拍手をお願いします Cheer the next speakers. Android Platform チーム代表 ローマン・ギーです So I'm Romain Guy, representing the Platform team on Android, それから Toolチームの トール・ノルビーです and this is Tor Norbye representing the Tools team. でも私たちが お目当てではありませんよね But you're not here for us. スペシャルゲストをお迎えしています You are here for very special speakers. ローマンと私は TOR NORBYE: Yeah, so Romain and I Kotlinの公式発表ができることを have been incredibly excited about this official 大変うれしく思います announcement of Kotlin. 実は2人とも Kotlinのファンなんですよ We both love Kotlin, in case you hadn't noticed already. これ以上スピーカーの時間を 奪いたくはありません And we don't take any more time from the speakers of honor. さあ お迎えしましょう So without further ado, here they are. 皆さん こんにちは [APPLAUSE] これはいいですね HADI HARIRI: Hello, everyone. 初めてKotlinの話をした時のことを 考えていました Aw, that's nice. 4年半ほど前のことですが So I was thinking the other day, the first time that I ever 900人収容できる会場だったのに 参加者は7人だけでした did a talk on Kotlin, it was like 4 and 1/2 years ago. ですから 今日は大勢の人が来てくれて うれしいです And they gave me a room for 900 people and 7 people showed up. ありがとうございます So it's kind of nice to see more of you show up today. 30分ほど時間があります Thank you. もっと短いかな [APPLAUSE] 28分でKotlinのツアーをします Anyway I've got roughly around 30 minutes. 言語全体のカバーはしません Actually, a little bit less. 使い方とどんな利点があるかを 28 minutes to give you a whirlwind tour of Kotlin, できるだけお見せします so I'm not going to cover the entire language. よろしいでしょうか? I'm going to try show you as much as I possibly can すべてライブコーディングで やろうと思います and how you can use it and where it provides you 失敗した場合は Google動画があります with some benefits, OK? つまり YouTubeの動画ですね So I'm going to try and do it all with live coding, それをご覧ください so if it all goes terribly wrong, there's a Google video-- 簡単なものから始めたいと思います I mean there's a YouTube video of this somewhere as well. ご覧のとおり データクラスです So you can watch that. mainファイルにいます OK, so we're going to start with something very simple データクラスで moneyという新タイプを作成して that you've already seen, data class. Int型ですね And I'm in a file called main. 今は説明しません So data class, I'm going to create a new type called money, type stringの curerncyがあります and it's going to happen amounts which is of type Int. OK? I know, don't say anything for now. 両方のプロパティで And it's going to have a currency of type string. 読み取り専用のプロパティです OK? これは皆さんおなじみだと思います And this is both properties, and they're 基本的にデータクラスです going to be read only properties. 先に作っておいた Javaと比較してみましょう So this is something that you're already familiar with. 先に作っておいた Javaと比較してみましょう It's essentially a data class. 並べてみましょう Let's go ahead and compare that to a Java one JavaMoneyをアップしてみましょう that I have done earlier. こちら側を So split vertically. Javamoneyですね And let's get the Java money up-- actually, 今書いたものと同じです let's go down this side. JavaMoneyは基本的に Java money-- so there you go. 2 getter を提供するデータクラスです That's kind of the equivalent of what I've just written, right. イミュータブルですから 読み取り専用です A JavaBean essentially, a data class このdata modifierは基本的に that provides two getters. ストリングに全体を渡します They're immutable, so they're read only. ストリングのように Kotlinではcopyと呼ぶ And this data modifier over here, what that's doing cloneを渡してくれます equalを行います is essentially giving me a whole bunch of things, hashCodeを行います like the to string, it's giving me the clone, これでいいでしょう which in Kotlin it's called copy, it's doing the equals, すばらしい でもなぜこれが必要なのでしょうか? it's doing the hashCode. それは優れたIDEは これを生成するからです Now you say, OK, well that's great. 本当です そうです Brilliant, but why do I need that? しかし問題となるのは Because any good IDE is going to generate that for me. コードを維持するときです It is true, it does. 新たなプロパティを追加するたびに戻って But the problem is that that's code you're コードを変更しなくてはなりません going to have to maintain. あなたは気が付かないけれど 他に発生するであろう問題は And every time you add a new property, そのコードがスタンダードスタッフ you're going to have to go back and change that code. そのコードが標準のもの And the other issue that you're going to have is you IDEが生成したものあるいは don't know, in fact, if that code is あなたが少しいじることもありますね the standard stuff that Kotl-- いいですか? that IDE has generated for you, or you've 最初の行を 保存するだけではないのです tweaked it a little bit. さて OK? function mainを作成します So it's not just about saving on typing on the first line. こいつは閉じましょう Right. Kotlinの上部のエントリーポイントで Now what I'm going to do is go ahead クラスとして public static void mainありますが and create a function main. Kotlinにはその必要はありません Let's close this guy over here. Kotlinではトップレベルに すべてを入れられます And this is the top entry point of Kotlin, いい意味での JavaScriptのようなものです so you have a public static void main in a class. ともかく 必要はありません You don't need that in Kotlin. 本日お見せする どの機能もすべて So in Kotlin, you can put everything in the top level. top levelに ファイルに追加していきます It's kind of like JavaScript in a good way. しかし 他にmember functionsが ないわけではありません And so you don't have to-- どんなクラスでも data classですら and I want to reiterate, every function and everything member functionがあります that I'll show you today, I'm going to just add it しかし簡潔にしたいのと in the file as a top level thing, これからお見せする目的ために but that doesn't mean that you don't have any more member top levelにおきますね functions. これからmoneyの 新しいインスタンスを作成します Anything, any class, even a data class これを例えば ticketsと呼びましょう can have member functions. Money 100で $にしますね But for brevity and for the purpose ここでは明示的な型としますが of what I'm showing you, I'm just しかし 基本的に私がやっていることは 型推論です going to put it as top level, OK? Kotlinは型推論において 強力であり So I'm going to create a new instance of money. できる限り推論してくれます We're going to call it, for example, tickets. ですから 型を明示的に 言う必要がありません And I'll say Money 100, and it's going to be dollars, right? 例えば popconeにしましょう And I'll get into the explicit type here, tickets.copy です but essentially here what I'm doing is type inference. これで基本的に So Kotlin is very strong in type inference, 直前のものとプロパティすべてを copyします and as much as it can infer, it will for you. パラメータをパスしなければ So you don't have to explicitly tell the type. これは直前と同じ値を取ります And then I'll say, for example, popcorn. 新しいパラメータを渡して Let's say tickets, copy, right? 例えばスペインでは ポップコーンは So what that's going to do is basically 映画チケットの7倍の価格です copy the previous one for me, and all of the properties. 500Euroとかね So if I don't pass any parameters in, いいですね it's going to just take the same values as it has before, OK. これで例えば So I can pass in a new parameter and say, もし tickets が popcornと 等しくなければ you know, in Spain, for example, popcorn 「they are different!」 (違うぞ!)とプリントします is seven times the price of the entry of the cinema, ここではひとつずつプロパティを 比較しています so that's going to be like 500 euros. ポイントの比較ではありません Right? ポイントの比較は triple equalですよね? And now I can do things like, for instance, JavaScriptとの違いは if tickets is not equal to popcorn, 600の異なるポジションを 記憶しなくてはなりません then println "they are different!" これはfont ligatureです So what this is doing is a property comparison one by one. そのことと混同しないでください It is not doing a point of comparison. 新たなシンボルは導入しません For point of comparisons, we have the triple equal, right? OK Different to JavaScript, there isn't これを実行すると a chart of 600 different positions you have to remember. 異なっていることがわかります And this, by the way, is font ligature, これを100にして$を入れて so don't get confused with that, we 実行すると何も出てきません didn't introduce a new symbol. 同じだからですね OK. OK? So I can go ahead and just run this, 私たちが強化している機能のひとつが and I get they are different. JavaとKotlinの相互運用です And if I change this to 100 and I put this as dollars このJava moneyがこちらにあり and I run this, it's going to say to you that nothing, そのインスタンスを作成します because they are the same. javaMoney = JavaMoney OK? これは100で$になります Now one of the features we keep boosting about JavaMoneyを実行すると is the interop between Java and Kotlin. getterはありませんね So we have this Java money one over here, 実際はあるんですが getter amountを取得し so I'm going to go ahead and create an instance of it. しかし getAmountを書くと それをcompleteして I'll say javaMoney equals javaMoney, and it will be 100 IDEはプロパティ用に 置き換えます and it'll be dollars. それはgetterやsetterがないため And then if I do javaMoney, you can see プロパティのみだからです that I don't have any getters. JavaをKotlinから コンシュームする場合です Well, I do have, actually, a getter, so I can do get amount, Javaに行くと but if I write getAmount, complete it, public statics void mainを 作成し the IDE's already going to replace that for property, それから because we don't have really like getters and setters, typeを宣言します we just have properties. Money=new money 100 So that's consuming Java from Kotlin. そして$ And if I go over to the Java over here, and let's OK go ahead and create a public statics void main, これは別の物です and I'll do-- セミコロンは Kotlinではオプショナルです so let's see, I've got to declare the type. これらがオプショナルである理由は Money equals new money, 100, and dollars, and-- これらを使うべきか否か OK. きりのない議論ができるからです That's the other thing. JavaScriptで競争してます Semicolons in Kotlin are optional. money.getAmount.でした And the reason they're optional is JavaからKotlinタイプを 使っています so that you can have endless arguments over getterとsetterを取得しています whether you should use them or not. イディオマティックは使い方によります We are trying to compete with JavaScript there. 異なるJavaファイル 異なるKotlinファイルが OK, so money.getAmount. シングルプロジェクトで問題なく シームレスに作動しています So now I'm using a Java type-- sorry, a Kotlin type from Java, いくつかfunctionを作成しましょう so I'm getting the getters and the setters, right? sendPaymentというfunctionを 設定します So idiomatic depending on how you are using it. これにはmoney And that's just different Java files, different Kotlin files Moneyを取得し printIn money outします in a single project, working seamlessly without any issues. もちろん string interpolationがあるので Right, so now let's go ahead and create some functions. sending money.amountと 言えます So I'm going to create a function called sendPayment. パスをするのが シングルプロパティならば That takes a money-- 中括弧は不要です