第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)境,直接用瀏覽器打開
你就可以直接使用云端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í)行過程如下圖所示:
像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
, 如下圖
在搜索框里輸入Kotlin
, 將得到如下結(jié)果
點(diǎn)擊Install
, 等待完成安裝,重啟Eclipse。
然后,選擇Kotlin Perspective
, 如下圖
點(diǎn)擊OK。下面我們就可以新建 Kotlin
工程了。如下圖
新建完工程,我們將得到如下結(jié)構(gòu)的工程
我們可以看出,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!")
}
如下圖
右擊HelloWorld.kt
源碼文件,如下圖運(yùn)行
如果一切正常,我們將得到如下輸出
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)主題。