Placeholder Image

字幕表 動画を再生する

  • 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--

    中括弧は不要です