《Kotlin極簡(jiǎn)教程》第1章 Kotlin簡(jiǎn)介

第1章 Kotlin簡(jiǎn)介


《Kotlin極簡(jiǎn)教程》正式上架:

點(diǎn)擊這里 > 去京東商城購(gòu)買閱讀

點(diǎn)擊這里 > 去天貓商城購(gòu)買閱讀

非常感謝您親愛的讀者,大家請(qǐng)多支持!!!有任何問題,歡迎隨時(shí)與我交流~


1.1 kotlin簡(jiǎn)史

1.1.1 Kotlin概述

科特林島(Котлин)是一座俄羅斯的島嶼,位于圣彼得堡以西約30公里處,形狀狹長(zhǎng),東西長(zhǎng)度約14公里,南北寬度約2公里,面積有16平方公里,扼守俄國(guó)進(jìn)入芬蘭灣的水道。科特林島上建有喀瑯施塔得市,為圣彼得堡下轄的城市。

我們這里講的Kotlin,就是一門以這個(gè)Котлин島命名的現(xiàn)代程序設(shè)計(jì)語(yǔ)言。它是一門靜態(tài)類型編程語(yǔ)言,支持JVM平臺(tái),Android平臺(tái),瀏覽器JS運(yùn)行環(huán)境,本地機(jī)器碼等。支持與Java,Android 100% 完全互操作。

其主要設(shè)計(jì)者是來自 Saint Petersburg, Russia JetBrains團(tuán)隊(duì)的布雷斯拉夫( Andrey Breslav , https://www.linkedin.com/in/abreslav/ )等人,源碼在github上,其實(shí)現(xiàn)主要是JetBrains團(tuán)隊(duì)成員以及開源貢獻(xiàn)者。

認(rèn)識(shí)一個(gè)事物的最好的方式,首先是取了解它的歷史。

我們先來簡(jiǎn)單看一下來自wikipedia[0]的Kotlin簡(jiǎn)歷:

標(biāo)題 內(nèi)容
設(shè)計(jì)者 JetBrains
實(shí)現(xiàn)者 JetBrains與開源貢獻(xiàn)者
最新發(fā)行時(shí)間 Kotlin 1.1.2(2017年4月25日,?34天前)
最新測(cè)試版發(fā)行日期 Kotlin 1.1.3 EAP(2017年5月27日,?2天前 [1])
類型系統(tǒng) 靜態(tài)類型
系統(tǒng)平臺(tái) 輸出Java虛擬機(jī)比特碼以及JavaScript源代碼
操作系統(tǒng) 任何支持JVM或是JavaScript的解釋器
許可證 Apache 2
文件擴(kuò)展名 .kt
網(wǎng)站 kotlinlang.org
啟發(fā)語(yǔ)言 Java、Scala、Groovy、C#、Gosu

(注:這里的日期時(shí)間,取的是本書當(dāng)時(shí)寫作時(shí)間)

Kotlin的親爹是大名鼎鼎的Jetbrains公司。它有一系列耳熟能詳?shù)漠a(chǎn)品,諸如Android程序員們天天用的Android Studio, Java程序員們天天用的IntelliJ IDEA, 還有前端的WebStorm, PhpStorm等等。所以說,使用IntelliJ IDEA了開發(fā)Kotlin程序?qū)?huì)非常便捷。

Kotlin這個(gè)語(yǔ)言從一開始推出到如今,已經(jīng)有六年了。官方正式發(fā)布首個(gè)穩(wěn)定版本的時(shí)間相對(duì)比較晚(2016.2),這是一門比較新的語(yǔ)言。其大致發(fā)展簡(jiǎn)史如下:

2011年7月,JetBrains推出Kotlin項(xiàng)目。

2012年2月,JetBrains以Apache 2許可證開源此項(xiàng)目。

2016年2月15日,Kotlin v1.0(第一個(gè)官方穩(wěn)定版本)發(fā)布。

2017 Google I/O 大會(huì),Kotlin “轉(zhuǎn)正”。

Kotlin 具有很多下一代編程語(yǔ)言[1][2]靜態(tài)語(yǔ)言特性:如類型推斷、多范式支持、可空性表達(dá)、擴(kuò)展函數(shù)、模式匹配等。

Kotlin的編譯器kompiler可以被獨(dú)立出來并嵌入到 Maven、Ant 或 Gradle 工具鏈中。這使得在 IDE 中開發(fā)的代碼能夠利用已有的機(jī)制來構(gòu)建,可以在新環(huán)境中自由使用。

Kotlin以K字打頭的用語(yǔ),甚至連 contributors 這類詞也改成了kontributors。

1.1.2 Kotlin 元年:2016

2016 年是 Kotlin “元年(First year of Kotlin)”,官網(wǎng)給出了這樣一幅圖來展示它一年來的成績(jī):

Github 上面的代碼量破千萬,8000多基于kotlin項(xiàng)目。使用 Kotlin 的人逐漸增多。

Kotlin 是由工程師設(shè)計(jì),各種細(xì)節(jié)設(shè)計(jì)非常切合工程師的需要。語(yǔ)法近似 Java 和 Scala,且已活躍在 Android 開發(fā)領(lǐng)域,被譽(yù)為 Android 平臺(tái)的 Swift。

其主要設(shè)計(jì)目標(biāo):

  • 創(chuàng)建一種兼容 Java 的語(yǔ)言
  • 讓它比 Java 更安全,能夠靜態(tài)檢測(cè)常見的陷阱。如:引用空指針
  • 讓它比 Java 更簡(jiǎn)潔,通過支持 variable type inference,higher-order functions (closures),extension functions,mixins and first-class delegation 等實(shí)現(xiàn)。
  • 讓它比最成熟的競(jìng)爭(zhēng)對(duì)手 Scala語(yǔ)言更加簡(jiǎn)單。

Kotlin 的學(xué)習(xí)曲線極其平緩,學(xué)習(xí)量相當(dāng)于一個(gè)框架。有經(jīng)驗(yàn)的程序員閱讀了文檔即刻上手。

1.2 快速學(xué)習(xí)工具

工欲善其事必先利其器

1.2.1 云端IDE

未來的是云的世界。不需要搭建本地開發(fā)運(yùn)行環(huán)境,直接用瀏覽器打開

https://try.kotlinlang.org/

你就可以直接使用云端IDE來即時(shí)編寫Kotlin代碼,并運(yùn)行之。一個(gè)運(yùn)行示例如下圖:

1.2.2 本地命令行環(huán)境搭建

Kotlin是運(yùn)行在JVM環(huán)境下的語(yǔ)言。首先我們要有JDK環(huán)境。

有時(shí)候我們并不需要打開IDE來做一些事情。打開 IDE 是件很麻煩的事情,在某些場(chǎng)景下,我們比較喜歡命令行。

使用命令行環(huán)境,我們可以方便地使用Kotlin REPL(Read-Eval-Print-Loop,交互式編程環(huán)境)。REPL可以實(shí)時(shí)編寫Kotlin代碼,并查看運(yùn)行結(jié)果。通常REPL交互方式可以用于調(diào)試、測(cè)試以及試驗(yàn)?zāi)撤N想法。

下面我們講下怎么搭建 Kotlin 命令行環(huán)境。

Kotlin 命令行環(huán)境主要依賴就是Kotlin Compiler,目前最新版本是 1.1.2-2。其下載鏈接是:

https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2

這個(gè)zip包里面就是Kotlin Compiler的核心依賴jar包。解壓后,目錄結(jié)構(gòu)如下:

.
├── bin
│   ├── kotlin
│   ├── kotlin.bat
│   ├── kotlinc
│   ├── kotlinc-js
│   ├── kotlinc-js.bat
│   ├── kotlinc-jvm
│   ├── kotlinc-jvm.bat
│   └── kotlinc.bat
├── build.txt
├── lib
│   ├── allopen-compiler-plugin.jar
│   ├── android-extensions-compiler.jar
│   ├── kotlin-annotation-processing.jar
│   ├── kotlin-ant.jar
│   ├── kotlin-build-common-test.jar
│   ├── kotlin-compiler-client-embeddable.jar
│   ├── kotlin-compiler.jar
│   ├── kotlin-daemon-client.jar
│   ├── kotlin-jslib-sources.jar
│   ├── kotlin-jslib.jar
│   ├── kotlin-preloader.jar
│   ├── kotlin-reflect.jar
│   ├── kotlin-runner.jar
│   ├── kotlin-runtime-sources.jar
│   ├── kotlin-runtime.jar
│   ├── kotlin-script-runtime-sources.jar
│   ├── kotlin-script-runtime.jar
│   ├── kotlin-stdlib-js-sources.jar
│   ├── kotlin-stdlib-js.jar
│   ├── kotlin-stdlib-sources.jar
│   ├── kotlin-stdlib.jar
│   ├── kotlin-test-js.jar
│   ├── kotlin-test.jar
│   ├── noarg-compiler-plugin.jar
│   ├── sam-with-receiver-compiler-plugin.jar
│   └── source-sections-compiler-plugin.jar
└── license
    ├── LICENSE.txt
    ├── NOTICE.txt
    └── third_party
        ├── args4j_LICENSE.txt
        ├── asm_license.txt
        ├── closure-compiler_LICENSE.txt
        ├── dart_LICENSE.txt
        ├── jshashtable_license.txt
        ├── json_LICENSE.txt
        ├── maven_LICENSE.txt
        ├── pcollections_LICENSE.txt
        ├── prototype_license.txt
        ├── rhino_LICENSE.txt
        ├── scala_license.txt
        ├── trove_license.txt
        └── trove_readme_license.txt

4 directories, 50 files

其中,kotlinc,kotlin兩個(gè)命令就是Kotlin語(yǔ)言的編譯.kt文件和運(yùn)行Kt.class文件命令。

我們來看一下kotlinc的命令:

#!/usr/bin/env bash
#
##############################################################################
# Copyright 2002-2011, LAMP/EPFL
# Copyright 2011-2015, JetBrains
#
# This is free software; see the distribution for copying conditions.
# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
##############################################################################

cygwin=false;
case "`uname`" in
    CYGWIN*) cygwin=true ;;
esac

# Based on findScalaHome() from scalac script
findKotlinHome() {
    local source="${BASH_SOURCE[0]}"
    while [ -h "$source" ] ; do
        local linked="$(readlink "$source")"
        local dir="$(cd -P $(dirname "$source") && cd -P $(dirname "$linked") && pwd)"
        source="$dir/$(basename "$linked")"
    done
    (cd -P "$(dirname "$source")/.." && pwd)
}

KOTLIN_HOME="$(findKotlinHome)"

if $cygwin; then
    # Remove spaces from KOTLIN_HOME on windows
    KOTLIN_HOME=`cygpath --windows --short-name "$KOTLIN_HOME"`
fi

[ -n "$JAVA_OPTS" ] || JAVA_OPTS="-Xmx256M -Xms32M"

declare -a java_args
declare -a kotlin_args

while [ $# -gt 0 ]; do
  case "$1" in
    -D*)
      java_args=("${java_args[@]}" "$1")
      shift
      ;;
    -J*)
      java_args=("${java_args[@]}" "${1:2}")
      shift
      ;;
    *)
      kotlin_args=("${kotlin_args[@]}" "$1")
      shift
      ;;
  esac
done

if [ -z "$JAVACMD" -a -n "$JAVA_HOME" -a -x "$JAVA_HOME/bin/java" ]; then
    JAVACMD="$JAVA_HOME/bin/java"
fi

declare -a kotlin_app

if [ -n "$KOTLIN_RUNNER" ];
then
    java_args=("${java_args[@]}" "-Dkotlin.home=${KOTLIN_HOME}")
    kotlin_app=("${KOTLIN_HOME}/lib/kotlin-runner.jar" "org.jetbrains.kotlin.runner.Main")
else
    [ -n "$KOTLIN_COMPILER" ] || KOTLIN_COMPILER=org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
    java_args=("${java_args[@]}" "-noverify")
    kotlin_app=("${KOTLIN_HOME}/lib/kotlin-preloader.jar" "org.jetbrains.kotlin.preloading.Preloader" "-cp" "${KOTLIN_HOME}/lib/kotlin-compiler.jar" $KOTLIN_COMPILER)
fi

"${JAVACMD:=java}" $JAVA_OPTS "${java_args[@]}" -cp "${kotlin_app[@]}" "${kotlin_args[@]}"

我們可以看出,kotlinc是直接依賴java命令的,所以,使用Kotlin Compiler,首先要有JDK環(huán)境。

其中kotlin-preloader.jar、kotlin-compiler.jar是其入口依賴jar,入口類是org.jetbrains.kotlin.cli.jvm.K2JVMCompiler。

kotlin命令腳本如下

export KOTLIN_RUNNER=1

DIR="${BASH_SOURCE[0]%/*}"
: ${DIR:="."}

"${DIR}"/kotlinc "$@"

我們可以看出,直接是依賴kotlinc。在if邏輯代碼中:

if [ -n "$KOTLIN_RUNNER" ];
then
    java_args=("${java_args[@]}" "-Dkotlin.home=${KOTLIN_HOME}")
    kotlin_app=("${KOTLIN_HOME}/lib/kotlin-runner.jar" "org.jetbrains.kotlin.runner.Main")

從這個(gè)邏輯,我們可以看出,Kt.class在java命令執(zhí)行前,需要從kotlin-runner.jar這個(gè)邏輯里走一遍。同時(shí),我們也能知道Kt.class跟Java.class文件有著這個(gè)kotlin-runner.jar的邏輯映射上的區(qū)別。也就是說,Kotlin的Bytecode跟純的JVM bytecode存在一個(gè)kotlin-runner.jar的映射關(guān)系。其大致執(zhí)行過程如下圖所示:

Kotlin代碼執(zhí)行過程.png

像scala,groovy等基于JVM的語(yǔ)言的compiler,runner,基本都采用這種運(yùn)行方式。在實(shí)現(xiàn)細(xì)節(jié)上也許會(huì)有不同,總的思路是一致的。比如說,scalac的入口類

https://github.com/EasyKotlin/scala/blob/2.12.x/src/compiler/scala/tools/nsc/Main.scala

對(duì)應(yīng)scalac中的命令行腳本是:

...

execCommand \
  "${JAVACMD:=java}" \
  $JAVA_OPTS \
  "${java_args[@]}" \
  "${classpath_args[@]}" \
  -Dscala.home="$SCALA_HOME" \
  $OVERRIDE_USEJAVACP \
  "$EMACS_OPT" \
  $WINDOWS_OPT \
   scala.tools.nsc.Main  "$@"
   
   ...

我們解壓完kotlin-compiler-1.1.2-2.zip,放到相應(yīng)的目錄下。然后配置系統(tǒng)環(huán)境變量:

export KOTLIN_HOME=/Users/jack/soft/kotlinc
export PATH=$PATH:$KOTLIN_HOME/bin

執(zhí)行source ~/.bashrc, 命令行輸入kotlinc, 即可REPL環(huán)境,我們可以看到如下輸出:

$ kotlinc
Welcome to Kotlin version 1.1.2-2 (JRE 1.8.0_40-b27)
Type :help for help, :quit for quit
>>> println("Hello,World")
Hello,World
>>> 

然后,我們就可以像使用python,ruby,scala,groovy的REPL一樣去盡情享受Kotlin的編程樂趣了。

1.2.3 使用IntelliJ IDEA

最新版本的IDEA已經(jīng)默認(rèn)集成了Kotlin環(huán)境。

我們首先去下載安裝IntelliJ IDEA。下載頁(yè)面是:

https://www.jetbrains.com/idea/download/index.html

如果您之前沒用過IDEA,現(xiàn)在想嘗試一下,可以去下面這個(gè)頁(yè)面了解一下:

https://www.jetbrains.com/idea/documentation/

安裝完畢,然后點(diǎn)擊File > New > Project, 我們可以選擇

Koltin: Kotlin(JVM), Kotlin(JavaScript)

如下圖所示

也可以選擇Maven,Gradle構(gòu)建工程。本書采用Gradle來構(gòu)建工程。如下圖所示:

然后按照后續(xù)步驟操作,最后等待Gradle下載依賴,完成工程構(gòu)建。我們將得到一個(gè)標(biāo)準(zhǔn)的Gradle工程。

我們?cè)?code>src/main/kotlin下面新建package :com.easy.kotlin.chaptor1

然后新建HelloWorld.kt,編寫以下代碼

package com.easy.kotlin.chaptor1

/**
 * Created by jack on 2017/6/5.
 */

fun main(args:Array<String>){
    println("Hello,World!")
}

右擊運(yùn)行該類,如下圖

我們將會(huì)得到輸出

我們觀察IDEA控制臺(tái)輸出的執(zhí)行日志,可以看出IDEA集成Kotlin環(huán)境使用的核心依賴jar包:

/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=65404:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/deploy.jar:...
...

.../kotlin-stdlib-jre8-1.1.1.jar:
.../kotlin-stdlib-jre7-1.1.1.jar:
.../kotlin-stdlib-1.1.1.jar:... com.easy.kotlin.chaptor1.HelloWorldKt
...


Hello,World!

Process finished with exit code 0

本小節(jié)的示例工程代碼:https://github.com/EasyKotlin/easy_kotlin_chaptor_1

1.2.4 使用Eclipse

使用Eclipse的開發(fā)者們,可以通過安裝Kotlin插件來進(jìn)行Kotlin程序的開發(fā)。但是,體驗(yàn)上要比使用IDEA遜色很多。如果您想完美體驗(yàn)Kotlin在IDE中的開發(fā),強(qiáng)烈建議使用IDEA。JetBrains自家的東西,自然是比Eclipse支持的要好很多。

我們下面簡(jiǎn)單介紹一下在Eclipse中開發(fā)Kotlin程序的方法。

首先,打開Help > Eclipse Marketplace, 如下圖

螢?zāi)豢煺?2017-06-05 23.31.38.png

在搜索框里輸入Kotlin , 將得到如下結(jié)果

螢?zāi)豢煺?2017-06-05 23.33.09.png

點(diǎn)擊Install, 等待完成安裝,重啟Eclipse。

然后,選擇Kotlin Perspective , 如下圖

螢?zāi)豢煺?2017-06-06 00.01.35.png
螢?zāi)豢煺?2017-06-06 00.02.02.png

點(diǎn)擊OK。下面我們就可以新建 Kotlin 工程了。如下圖

螢?zāi)豢煺?2017-06-06 00.18.29.png

新建完工程,我們將得到如下結(jié)構(gòu)的工程

螢?zāi)豢煺?2017-06-05 23.58.32.png

我們可以看出,kotlin-runtime.jar, kotlin-reflect.jar,kotlin-script-runtime.jar 被加到了工程依賴庫(kù)里。

這個(gè)配置是在.classpath.project 配置的。當(dāng)然這些配置依賴庫(kù),執(zhí)行程序等等的工作是由Eclipse Kotlin插件完成的。

我們?cè)?code>src目錄新建一個(gè)package : easy_kotlin_chatper_1

然后在此package下面新建一個(gè)HelloWorld.kt源碼文件,內(nèi)容如下

package easy_kotlin_chatper_1

fun main(args: Array<String>){
    println("Hello,Kotlin!")
}

如下圖

螢?zāi)豢煺?2017-06-06 00.05.07.png

右擊HelloWorld.kt源碼文件,如下圖運(yùn)行

螢?zāi)豢煺?2017-06-06 00.04.30.png

如果一切正常,我們將得到如下輸出

Hello,Kotlin!

本節(jié)示例工程源碼:https://github.com/EasyKotlin/easy_kotlin_chatper_1

1.2.5 使用Gradle構(gòu)建Kotlin工程

我們?cè)谏厦嫘」?jié)中展示了使用IntelliJ IDEA建立一個(gè)Kotlin Gradle工程的步驟。我們?cè)诒竟?jié)簡(jiǎn)單介紹一下使用Gradle構(gòu)建Kotlin工程的配置。這個(gè)配置主要在build.gradle文件中。

其中,構(gòu)建過程的核心依賴配置如下:

buildscript {
    ext.kotlin_version = '1.1.1'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

kotlin-gradle-plugin完成了Gradle構(gòu)建Kotlin工程的所有依賴構(gòu)建執(zhí)行的相關(guān)工作。

然后,使用Gradle java、kotlin插件:

apply plugin: 'java'
apply plugin: 'kotlin'

當(dāng)然,如果我們同時(shí)想使用Groovy語(yǔ)言,加上

apply plugin: 'groovy'

源代碼JDK兼容性配置兼容1.8往后的版本:

sourceCompatibility = 1.8

配置Maven倉(cāng)庫(kù):

repositories {
    mavenCentral()
}

工程依賴:

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

其中,kotlin-stdlib-jre8是Kotlin JVM執(zhí)行環(huán)境依賴。

org.jetbrains.kotlin:kotlin-stdlib-js是Kotlin JS執(zhí)行環(huán)境依賴。

我們可以通過Gradle項(xiàng)目的依賴樹看出kotlin-stdlib-jre8依賴

org.jetbrains.kotlin:kotlin-stdlib:1.1.1

如下圖

kotlin-stdlib是Kotlin運(yùn)行環(huán)境的標(biāo)準(zhǔn)庫(kù)。

1.2.6 編程語(yǔ)言學(xué)習(xí)小結(jié)

學(xué)習(xí)一門語(yǔ)言大概會(huì)經(jīng)歷如下幾步。

1.基本語(yǔ)法

學(xué)習(xí)任何東西,都是一個(gè)由表及里的過程。學(xué)習(xí)一門編程語(yǔ)言也一樣。對(duì)于一門編程語(yǔ)言來說,“表” 就是基本詞匯和語(yǔ)法。

對(duì)于基礎(chǔ)語(yǔ)法的學(xué)習(xí),我們可以看一些簡(jiǎn)短而又系統(tǒng)的教程。

2.編碼實(shí)踐

所謂“紙上得來終覺淺,絕知此事要躬行”是也。此處就不多說。

掌握基礎(chǔ),持續(xù)練習(xí)

每一門編程語(yǔ)言的學(xué)習(xí)內(nèi)容都會(huì)涉及:

運(yùn)行環(huán)境
數(shù)據(jù)類型(數(shù)字、字符串、數(shù)組、集合、映射字典等)
表達(dá)式
函數(shù)
流程控制
類、方法

等等,不同的語(yǔ)言還有一些不同的特性,可以通過對(duì)比學(xué)習(xí)來加深理解。并通過大量實(shí)踐深入理解,達(dá)到熟練使用。后面還要再去深入了解面向?qū)ο缶幊蘋OP、函數(shù)式編程FP、并發(fā)、異常、文件IO、網(wǎng)絡(luò)、標(biāo)準(zhǔn)庫(kù)等內(nèi)容,并輔以持續(xù)的練習(xí),這些內(nèi)容才能夠讓你真正進(jìn)入編程領(lǐng)域并做出實(shí)際的軟件。

相信10000小時(shí)定律,No Pain, No Gain。

學(xué)習(xí)一門新的語(yǔ)言的時(shí)候,要利用以前所學(xué)的語(yǔ)言的功底,但是也要保持開放的心態(tài)。這些在認(rèn)知心理學(xué)中有相應(yīng)的講述。感興趣的讀者可以去了解一下。

3.技近乎道

基礎(chǔ)語(yǔ)法學(xué)習(xí),能讓你快速上手,應(yīng)用實(shí)踐。對(duì)技巧和坑的關(guān)注,一定程度上拓展了你的知識(shí)面。系統(tǒng)學(xué)習(xí),一方面會(huì)進(jìn)一步拓展你的知識(shí)面。另一方面,也有利于你語(yǔ)言知識(shí)結(jié)構(gòu)的形成。

任何一門成熟語(yǔ)言,都有其特有的生態(tài)。這個(gè)生態(tài)包括: 框架,擴(kuò)展包,解決方案,模式, 規(guī)范等。

在不斷編碼實(shí)踐過程中,我們逐步熟練使用很多API庫(kù)、框架,也不斷踩坑填坑、看源代碼、不斷解決問題,不斷加深對(duì)語(yǔ)言的理解,同時(shí)會(huì)看一些優(yōu)秀的框架源代碼。

如果還有精力,我們?cè)偃W(xué)習(xí)語(yǔ)言更底層的東西,而不僅僅停留在應(yīng)用層面。如Java中的集合類實(shí)現(xiàn)的算法與數(shù)據(jù)結(jié)構(gòu),如JVM是如何執(zhí)行Java代碼的。如Java的線程和操作系統(tǒng)線程的關(guān)系。以及一些操作系統(tǒng)方面的知識(shí)。

最后,達(dá)到游刃有余的境界。這一層級(jí),基本可入武林高手之列了。

庖丁釋刀對(duì)曰:“臣之所好者,道也,進(jìn)乎技矣。始臣之解牛之時(shí),所見無非牛者。三年之后,未嘗見全牛也。方今之時(shí),臣以神遇而不以目視,官知止而神欲行。依乎天理,批大郤,導(dǎo)大窾,因其固然,技經(jīng)肯綮之未嘗,而況大軱乎!

這里的“牛”,可以理解為我們所說的各種編程思想,編程范式,編程方法,編程技巧等等。最后,達(dá)到“運(yùn)用之妙,存乎一心”之境也。

4.創(chuàng)造新世界

編程的本質(zhì)就是創(chuàng)造世界。

達(dá)到這個(gè)境界的,基本都是世界頂尖大牛了。

例如,編程語(yǔ)言發(fā)展史上的杰出人物(下面只是一份不完全名單):

約翰·馮·諾伊曼: 操作系統(tǒng)概念的發(fā)起者
肯·湯普遜&丹尼斯·里奇: 發(fā)明了C和Unix
約翰·巴科斯:發(fā)明了Fortran
阿蘭·庫(kù)珀:開發(fā)了Visual Basic
詹姆斯·高斯林:開發(fā)了Oak,即后來的Java
安德斯·海爾斯伯格:開發(fā)了Turbo Pascal、Delphi,以及C#
葛麗絲·霍普,開發(fā)了Flow-Matic,該語(yǔ)言對(duì)COBOL造成了影響
肯尼斯·艾佛森:,開發(fā)了APL,并與Roger Hui合作開發(fā)了J
比爾·喬伊:發(fā)明了vi,BSD,Unix的前期作者,以及SunOS的發(fā)起人,該操作系統(tǒng)后來改名為Solaris
艾倫·凱:開創(chuàng)了面向?qū)ο缶幊陶Z(yǔ)言,以及Smalltalk的發(fā)起人
Brian Kernighan:與丹尼斯·里奇合著第一本C程序設(shè)計(jì)語(yǔ)言的書籍,同時(shí)也是AWK與AMPL程序設(shè)計(jì)語(yǔ)言的共同作者
約翰·麥卡錫:發(fā)明了LISP
比雅尼·斯特勞斯特魯普:開發(fā)了C++
尼克勞斯·維爾特:發(fā)明了Pascal與Modula
拉里·沃爾:創(chuàng)造了Perl與Perl 6
吉多·范羅蘇姆:創(chuàng)造了Python
......

這些人,都在創(chuàng)造一個(gè)美妙的思維邏輯之塔,創(chuàng)造一個(gè)新世界。正是這些各個(gè)編程領(lǐng)域的引領(lǐng)者們,才使得我們這個(gè)世界更加美好。

小結(jié)

本章我們簡(jiǎn)單介紹了Kotlin語(yǔ)言的發(fā)展過程,以及Kotlin開發(fā)環(huán)境的搭建方法。簡(jiǎn)單總結(jié)了學(xué)習(xí)一門編程語(yǔ)言的基本過程。我們的這本書基本是按照這個(gè)思路組織架構(gòu)的。

我們將在下一章進(jìn)入快速開始:Hello,World!

感謝您的閱讀!恭喜您已經(jīng)正式開啟Kotlin世界之旅,希望本書能夠幫到您的學(xué)習(xí),哪怕是一點(diǎn)點(diǎn)啟發(fā)也倍感欣慰。

本書所涉及到的示例工程代碼統(tǒng)一放在這里:https://github.com/EasyKotlin

參考資料

1.http://www.onboard.jetbrains.com/articles/04/10/lop/index.html

2.https://medium.com/@octskyward/why-kotlin-is-my-next-programming-language-c25c001e26e3

3.http://kotlinlang.org/docs/tutorials/command-line.html

4.http://hadihariri.com/2013/12/29/jvm-minimal-survival-guide-for-the-dotnet-developer/


Kotlin 開發(fā)者社區(qū)

國(guó)內(nèi)第一Kotlin 開發(fā)者社區(qū)公眾號(hào),主要分享、交流 Kotlin 編程語(yǔ)言、Spring Boot、Android、React.js/Node.js、函數(shù)式編程、編程思想等相關(guān)主題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容