Android 官方宣布支持 Kotlin 编程语言
今天 Android 团队宣布正式添加对 Kotlin 语言的支持。Kotlin 是一个出色,成熟的语言,我们相信它会让Adnroid 开发变得更有趣更快。 现在已经被 Expedia, Flipboard, Pinterest, Square 用于在生产环境。Kotlin 能和 Java 友好的相互调用。
Kotlin 的插件已经默认被打包到了 Android Studio 3.0 版本中, 现在已经可以下载。Kotlin是由JetBrains开发的,所以不用担心 Kotlin 在 IDE 支持上面的问题。我们还宣布与JetBrains进行合作,将Kotlin 交由非盈利基金。 (Kotlin已经在Apache2下开源了)。
Hello world
Kotlin 和 Java 很相似。
package helloWorld
fun main(args: Array) {
println("Hello World!")
}
看一眼就能清晰的分辨出 括号 class package 和 fucntion , 深入学习后你就会发现, Kotlin 很多概念都是来自现代的编程语言。Kotlin 有很好的表现力, 能让你发挥想象力同时不被输入的表达式影响。不用在实现一个简单的类时输入一堆getter和setter以及equals(),hashCode() 和toString()。下面是一份Java的代码。
public class Customer {
private String name;
private String email;
private String company;
public Customer(String name) {
this(name, "", "");
}
public Customer(String name, String email) {
this(name, email, "");
}
public Customer(String name, String email, String company) {
this.name = name;
this.email = email;
this.company = company;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Customer customer = (Customer) o;
if (name != null ? !name.equals(customer.name) : customer.name != null) return false;
if (email != null ? !email.equals(customer.email) : customer.email != null) return false;
return company != null ? company.equals(customer.company) : customer.company == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (email != null ? email.hashCode() : 0);
result = 31 * result + (company != null ? company.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", email='" + email + '\'' +
", company='" + company + '\'' +
'}';
}
}
在 Kotlin 里面只用这样写一行。
data class Customer(var name: String, var email: String = "",
var company: String = "")
发展历史和参考文档
Kotlin 已经开发很久了。 2012年第一个预览版本发布,到2016 1.0版本发布。在这以后 JetBrains 会一直保持以前版本的功能稳定和向后的兼容性。https://kotlinlang.org/ 上面有很多教程和参考资料。Android 团队发现 Kotlin Koans教程对于快速入门写Kotlin很有用。这些教程深入浅出,循序渐进。
为什么选择Kotlin
为什么 Android 团队决定支持Kotlin。这是因为我们认为Kotlin是一种好的语言。Kotlin 能使开发Android 应用更加轻松。它与Java 100% 兼容。你能根据需要添加Kotlin代码到你现有的项目中。可以同时自由的使用两个语言在同一个项目。 有很多开发者告诉我们他们喜欢用Kotlin(Adnroid 团队内部也有相同的声音), 这里有很多活跃的使用Kotlin开发Android的开发人员社区。
- https://m.signalvnoise.com/how-i-fell-in-love-with-a-programming-language-8933d5e749ed
- https://news.realm.io/news/oredev-jake-wharton-kotlin-advancing-android-dev/
- https://kotlin.link/articles/Christina-Lee-Kotlin-in-Production.html
Adnroid 团队在各种活动中也经常遇到Kotlin相关的提问。Adnroid社区的呼声,我们已经听到。
快速浏览Kotlin特性
下面是一些Kotlin 让人兴奋的特性。
Nullable
var neverNull: String = "something"
var mightBeNull: String? = null // "?" indicates this can be null
if (neverNull.length > 0) { // This is OK
…
}
if (mightBeNull.length > 0) { // Compiler catches this error for you
…
}
参数可命名和添加默认值
我们经常可以看见一个方法带有很多参数。 像下面一样。
fun orderPizza(size: Size, pepperoni: Boolean, mushrooms: Boolean,
ham: Boolean, pineapple: Boolean, pickles: Boolean,
sausage: Boolean, peppers: Boolean, onion: Boolean)
{
...
}
// Wait… did I just order pickles on my pizza?
// Why do we even have that option?
orderPizza(Size.LARGE, true, false, false, false, true,
false, true, false)
对比下下面的解决方案
fun orderPizza(size: Size,
pepperoni: Boolean = false,
mushrooms: Boolean = false,
ham: Boolean = false,
pineapple: Boolean = false,
pickles: Boolean = false,
sausage: Boolean = false,
peppers: Boolean = false,
onion: Boolean = false)
{
...
}
orderPizza(Size.LARGE, ham = true, mushrooms = true)
这样的代码更容易阅读。 它还减少了要写的重载方法时变量的数量。
When 语句
Switch 的变体, 能匹配任意表达式。
// Please don't put this in your app!
when {
password.equals("password") -> println("Insecure password!")
password.length < 4 -> println("Too short!")
else -> {
println("Secure password!")
}
}
智能的类型转换 ( Smart Casts)
当你想要转换类型时候,想要判断是否是某个类的实例。在Kotlin中不需要这样做了。
if (obj is String) {
// Compiler casts obj to a String for you.
// (Would work with && instead of nested ifs too.)
if (obj.length > 0) {
…
}
}
也可以用When来解决
// Assume reasonable implementations of Cat and Dog
when (obj) {
is Cat -> obj.meow(...)
is Dog -> obj.woof(...)
else -> {
…
}
}
Extension functions
Kotlin 能让你快速把功能映射到当前类。不需要去创建一个新的类。
// The "String." prefix indicates that this method should
// extend the existing String class
fun String.toPigLatin() : String {
...
}
val plainOldString : String = "some text"
// Can now call toPigLatin as if were a method on String
println(plainOldString.toPigLatin())
// Or:
println("some text".toPigLatin())
解构声明 (Destructuring Declarations)
快速定义一个类
data class Order(val itemCode: String, val quantity: Int,
val price: Float)
返回值中返回一个类。 类似于多个返回值支持。
fun getOrder(...): Order {
...
return Order(itemCode, quantity, price);
}
你可以使用解构声明语法。 以下语句使用Order对象,提取其三个属性,然后将它们分配给三个变量,这些变量都是由Kotlin编译器提供的, 同时赋予正确的类型.
val (what, howMany, howMuch) = getOrder(...)
Lambdas
Kotlin对lambdas也非常简洁,很容易地表达强大的功能编程范例。 下面是一个简单的例子,它使用lambda来测试集合中的所有内容是否都是String:
fun allStrings(collection: Collection)=
collection.all { it is String }
lambdas 语法是Kotlin 最酷的地方。 它能书写JSON一样的代码块。就像下面的代码片段一样 这份代码来自 https://kotlinlang.org/docs/reference/type-safe-builders.html 你可以在这里发现完整的代码和说明。
fun generatePage(withEmphasis : Boolean) {
val result =
html {
head {
title { +"Kotlin Builders" }
}
body {
h1 { +"Kotlin Builders" }
p {
+"This is "
if (withEmphasis) b { +"really " }
+"interesting"
a(href = "https://goo.gl/rHwJio") { +"More here" }
}
}
}
println(result)
}
在这个例子中,“html”,“head”,“body”等都只是用Kotlin编写的函数,而后面是大括号的东西是功能参数(这个片段使用具有与HTML标签匹配的名称的函数来构建网页,当然也可以使用此模式构建任何复杂数据结构。)第二个有趣的是“withEmphasis”条件。 这让你在建立复杂的数据结构使用声明式语法,同时还能使用Kotlin语言的全部功能。
快速开始
在线编辑器:https://try.kotlinlang.org/
使用 Kotlin 开发 APP
- 下载Android Studio 3.0 https://developer.android.com/studio/preview/index.html
- 打开一个 .java 文件
- 选择 " Code > Convert Java File to Kotlin File"
IDE会自动添加项目中的依赖。然后把代码转换为Kotlin代码。
更多信息查看:https://developer.android.com/kotlin/get-started.html
原文地址:https://android-developers.googleblog.com/2017/05/android-announces-support-for-kotlin.html
Recommend
相关搜索关键词
- ios vs android development for your mobile app
- download android studio and sdk tools | android studio
- youtube music client for android, ios and web built with react native
- WRP Android Video Player Pro
- Android 图像显示系统
- Download Android Studio and SDK Tools | Android Studio
- WRP Android Video Player Pro AND 4853=9140-- iTMO
- iOS vs Android Development for Your Mobile App
- WRP Android Video Player Pro AND 8553=8553
- wrp android video player pro
- wrp android video player pro and 3354=8629
- Youtube Music client for Android, iOS and Web built with React Native
- wrp android video player pro and 4853=9140-- itmo
- wrp android video player pro and 8336=2836-- jmuo
- android remote administration tool
- wrp android video player pro and 8553=8553
- WRP Android Video Player Pro AND 9721=1455
- wrp android video player pro) and 9533=9533-- mtai
- WRP Android Video Player Pro AND 8553=8553-- WOED
- WRP Android Video Player Pro) AND 23=23-- kxvS
- tweaks ram Android
- Px5 android 9
- 282 download android studio and sdk tools | android studio
- Top团队大牛带你玩转Android性能分析与优化
- WRP Android Video Player Pro" AND 8553=8553 AND "Fygz"="Fygz
- WRP Android Video Player Pro) AND 9052=5879-- PGyB
- WRP Android Video Player Pro) AND 9533=9533-- mtAi
- Android JCAC10003-OC2-
- UPDATE ROM AC8227L-Android JCAC10003-OC2-V1.0.04R7-211119_1742
- android 10
Recent search keywords
- "Artificial intelligence has the potential to become the most beneficial technology ever created, al
- Artificial intelligence has the potential
- "Artificial intelligence has the potential to become the most beneficial technology ever created, al
- Android AC8227L
- Gearelec
- 4415u
- activate code
- hjsq
- sm-p900
- Nsfw
- installation
- https://gateway.platoboost.com/a/8?id=6a250dd30218f647097c593177bc86e5d681a3219e13b9b79a57b2a226d985
- reid
- JCAC10003-0OC2-V1.0.97R3-231023_1114
- 快猫
- 9213a
- Xxx m3u
- Intersys
- idt
- https://discord.gg/deltaex
- ddos script
- Digital Marketing
- j4
- ktym4a.me
- rom lg g7
- examplekey123$
- -7805" OR 9473=3703 AND "MmkE" LIKE "MmkE
- -2777" OR 7090=7090 AND "pLDn"="pLDn
- factory.faun.dev
- 小白羊
- blooket daniel.turcios
- 冰箱
- id login and 4502=6713
- 赚钱
- Indya talugiu
- id login" OR NOT 2455=1973 AND "wETx"="wETx
- project V
- 域名注册商便宜
- 域名注册商
- https://dumps.tadiphone.dev/dumps/alps/8227l_demo/-/commit/9fe52c4c9ed3d1c232f0363b7aa75f2d64eda6b5
- 9fe52c4c9ed3d1c232f0363b7aa75f2d64eda6b5
- GEM5
- 通关秘籍
- 九宫格
- getind evey blooket
- category-porn
- flat carbon steel
- v2ray
- blooket hack global
- mfc windows程序设计
- -1" OR 3 389-389-1=0 0 0 1 --
- TB-125FU
- -1 OR 3 340-340-1=0 0 0 1
- Android JCAC10003-OC2-V1.0.04R7-211119_1742
- -1" OR 2 821-821-1=0 0 0 1 --
- -1" or 2 501-501-1=0 0 0 1 --
- Shared Formula master
- @@dpxb7/libraries/joomla/jmails.php
- all mystical blooks
- Indya
- Artificial intelligence
- @@dpxb7/?up_auto_log=true
- @@dpxb7/adminer.php
- My date and sex
- 图像显示系
- @@dpxb7/wp-content/plugins/dzs-videogallery/class_parts/vendor/phpunit/phpunit/build.xml
- blooket hacks downloads
- CTF
- 2024CTF
- 2024字节跳动
- @@dPXB7/
- Scheduler DayPilot
- lgv60
- Yt7260b
- factory/vendor/phpunit/phpunit/src/util/php/eval-stdin.php/.env/wordpress/wp-admin/setup-config.php
- 8257 android 13
- 尸兄
- blooket%25252brainbow%25252bpanda%25252bhack
- Yonela Msweli
- Can Collective Intelligence Beat the Market
- cartographer
- aso
- geteveryanswercorrect.js
- HttP://bxss.me/t/xss.html
- fcitx5-table-extra
- fcitx5
- umzima
- vpn推荐
- Blooket hack
- factory/vendor/phpunit/phpunit/src/util/php/eval-stdin.php/.env/site/wp-admin/setup-config.php
- @@dPXB7/mirasvit_adminer_425.php
- @@dPXB7/wp-admin/setup-config.php
- @@dPXB7/wordpress/wp-admin/setup-config.php
- @@dpxb7/wp-admin/setup-config.php?step=0
- 叶开楗ps://maps.google.com.sg/url
- 6000
- @@dPXB7/site/wp-admin/setup-config.php
- What are the highest converting lead magnets?
- Food Recipe App using React Native Reanimated 3.0 and TailwindCSS
- GitHub - glixzzy/blooket-hack,
Android 团队应该是 JetBrains 团队经常合作,所以才有了这出
Java 不思进取啊
setter 这些都是自动生成, 但是真的没有必要,搞一大堆代码。