瞭解kotlin並開始使用其作開發,是從最近以前作的項目開始之初,用的是kotlin,發現kotlin是一個特簡潔,不少語法糖提供使用,能夠提升開發效率的語言。谷歌在2017年穀歌大會正式宣佈支持android支持kotlin語言開發,而在更早其實kotlin在2011年左右就已經在JetBrains開始爲它着手開始設計,而目前有些大公司已經有配套的對於kotlin和java會有兩個語言的開發配套app,說明kotlin勢在必行...確實在有些博客看到有些文章也提到過,kotlin的編譯速度和java對比,不管是初次編譯或者增量編譯,都是和java保持着差很少的速度,損失了大概10幾個百分點速度極限左右。下面咱們來看看kotlin,有個文章的關於kotlin的ppt弄的很好,都是些上手練習的,連接:https://acemerlin.github.io/posts/uncategorized/2017-03-23-kotlin-presentation/php
一、相對於咱們在平時開發中,一個框架的搭建,若是使用其餘語言,(1)須要學習其餘語言的成本 (2)從新在該語言下從新開發,所幸其實kotlin是基於jvm的靜態編程語言,能夠無縫對接java,互相能夠調用。這個給咱們帶來了福音。java
二、kotlin有不少的語法糖,有個我的以爲特別重要是,python
(1)對於空指針判斷的特性,在編譯的時候已經幫你提早先作了判斷了,並且語法使用起來更簡潔,不須要使用更多的if ,else 而是改用 ?,?: 等符號就能夠作好判斷,簡單簡潔使用。android
(2)數據對象實體類的建立,再也不須要手動建立set或get方法,直接kotlin幫你編譯生成了,使用序列化也是更加簡潔git
(3)android開發的同窗是不很不喜歡常常須要findviewbyId這些重複的代碼呢,以爲嚴重影響開發效率呢,kotlin幫你能夠直接調用layout裏面的id而後在編譯過程當中直接幫你找,其實deCompile下,能夠看到是使用了緩存加findviewbyid,kotlin的jvm編譯器幫你作了這些工做了,而你只須要import到對應layout的id,直接就可使用了,是不很簡潔; 相似kotlin大量使用了 Lambda的設計,好比view.setOnclickListener{} ,能夠再也不須要參數,讓代碼看起來更加簡潔,相似還有不少.github
(4)for循環支持更多的語法特性,switch傳統的支持 int數值判斷,而到了kotlin使用when,能夠是類的判斷,能夠是各類其餘類型的數據,使用起來更簡潔,擺脫了可能會使用大量的if,else的語句,讓代碼更容易看懂。編程
三、kotlin的開發能夠代碼量至少能夠減小百分之二十多的代碼量,能夠大大減小咱們平時的開發工做量。後端
by the way,kotlin也能夠做爲像除了groovy做爲更有效的DSL構建工程的腳本語言,kotlin和groovy在有些語法上有部分差別是類似的,不過kotlin對於安全性判斷和嚴謹性是更勝groovy一籌的,groovy做爲的是動態編程語言,小編暫時沒作研究,有興趣的能夠了解下。緩存
不過咱們在學習kotlin平時開發中,有必要知道能夠java與kotlin如何進行一個轉換,android studio是在基於idea的,因此idea或者android studio均可以很輕鬆能夠看到他們之間互相轉換,有利於咱們學習kotlin是怎麼下面咱們進入正題:安全
看下面簡單代碼:
import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity import danny.test.TestActivity import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) sample_text.setOnClickListener{ startActivity(Intent(baseContext, TestActivity::class.java)) } } }
而後咱們選擇菜單欄 Tools -> Kotlin -> show Kotlin Bytesdecode,而後進入
點擊左上角的Decompile,就能夠生成咱們看到的反編譯成的java代碼了,以下
public final class MainActivity extends AppCompatActivity { private HashMap _$_findViewCache; protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(-1300027); ((TextView)this._$_findCachedViewById(id.sample_text)).setOnClickListener((OnClickListener)(new OnClickListener() { public final void onClick(View it) { MainActivity.this.startActivity(new Intent(MainActivity.this.getBaseContext(), TestActivity.class)); } })); } public View _$_findCachedViewById(int var1) { if (this._$_findViewCache == null) { this._$_findViewCache = new HashMap(); } View var2 = (View)this._$_findViewCache.get(var1); if (var2 == null) { var2 = this.findViewById(var1); this._$_findViewCache.put(var1, var2); } return var2; } public void _$_clearFindViewByIdCache() { if (this._$_findViewCache != null) { this._$_findViewCache.clear(); } } }
其實認真觀察咱們每次調用sample_text 這個變量的時候,其實都是調用了_$_findCachedViewById這麼個方法,每次去從緩存去找,沒有緩存就才直接findviewById而後添加緩存,其實這樣對於咱們我的理解kotlin的代碼的底層實現是不頗有好處呢
有時候在想,語言的底層是怎麼實現的,實際上是不蠻重要的,知其然而因此然,對於咱們之後去接觸新的語言,實際上是不有好處呢。大概瞭解了下,像好比php 1.4仍是1.5的版本有些是像java學習了,其實語言之間有些特性或者語法糖有些是互相學習,也是有點套路的,像咱們java的不少語法實際上是繼承了c語言的語法,數據類型,關鍵字這些,從某個方面來講,也聽郭神也說,以爲java頂多屬於半個面向對象的語言..最近也在接觸groovy,groovy對於構建建立工程,動態配置,能夠寫本身的我的插件,用來動態配置工程的差別化需求是個很好的語言。
總之,語言的學習咱們能夠先了解它的使用場景、特性、能夠作什麼、是否在項目中使用有好處等等。好比groovy天生是面向java工程的DSL構建工程的動態編程語言,python能夠用來作腳本開發,android的打包等,服務器開發、大數據。
而kotlin能夠 開發咱們的android、後端、腳本等。