快速上車Kotlin

presentation by hzwusibo 20180927

kotlin優(yōu)點(diǎn):1、可以少些很多代碼

2荔燎、完全兼容Java

3耻姥、Null safe

4、支持lambda表達(dá)式(比Java8更好)

5有咨、可擴(kuò)展函數(shù):這意味著琐簇,就算我們沒(méi)有權(quán)限去訪問(wèn)這個(gè)類中的代碼,我們也可以擴(kuò)展這個(gè)類的更多的特性座享。

缺點(diǎn):

1婉商、沒(méi)有靜態(tài)修飾語(yǔ)

2、可以顯著減少代碼的總行數(shù)渣叛,但它可能也會(huì)增加編譯后的方法數(shù)量丈秩。

3、不好斷點(diǎn)淳衙。


分享主要分4部分:

前言: Kotlin的優(yōu)勢(shì)

1蘑秽、Kotlin在Android中案例學(xué)習(xí)(新特性 )

2、Java切換Kotlin? 小卡片(語(yǔ)法對(duì)比箫攀,快速入門)

3肠牲、Kotlin基礎(chǔ)語(yǔ)法學(xué)習(xí)(demo樣例)

4、小結(jié)與討論

補(bǔ)充

參考資料





前言

Kotlin優(yōu)勢(shì):

可以編寫少得多的代碼匠童。

更安全:?Kotlin是空安全的埂材,在編譯期就處理了各種null的情況,避免了執(zhí)行時(shí)異常汤求∏蜗眨可以節(jié)約調(diào)試空指針異常的時(shí)間严拒,不用擔(dān)心 null引發(fā)bug。

可擴(kuò)展函數(shù):這意味著竖独,就算我們沒(méi)有權(quán)限去訪問(wèn)這個(gè)類中的代碼裤唠,我們也可以擴(kuò)展這個(gè)類的更多的特性。

函數(shù)式的:Kotlin是基于面向?qū)ο蟮恼Z(yǔ)言莹痢。但是就如其他很多現(xiàn)代的語(yǔ)言那樣种蘸,它使用了很多函數(shù)式編程的概念,比如竞膳,使用lambda表達(dá)式來(lái)更方便地解決問(wèn)題航瞭。

高度互操作性的:你可以繼續(xù)使用所有用Java寫的代碼和庫(kù),甚至可以在一個(gè)項(xiàng)目中使用Kotlin和Java兩種語(yǔ)言混合編程坦辟。一行Java一行Kotlin刊侯。

一、Kotlin 用于 Android 的案例學(xué)習(xí)

1.1? Android Studio 快速上手小工具:

? ? ? 如果不知道如何在Kotlin中寫一個(gè)相當(dāng)簡(jiǎn)單的Java表達(dá)式锉走。? 有一個(gè)簡(jiǎn)單的訣竅滨彻,就是在AndroidStudio的Java文件中編寫一段代碼,然后將其粘貼到kt文件中挪蹭,它會(huì)自動(dòng)轉(zhuǎn)換為Kotlin亭饵。

1、直接把Java代碼拷貝到.kt文件中梁厉,編譯器會(huì)彈出如下提示:

? ? ? Kotlin與Java是100%兼容的辜羊,因?yàn)樗罱K會(huì)編譯成Java字節(jié)碼,我們可以通過(guò) Android Studio工具看到編譯的bytecode:

? ? 我們還可以把編譯出來(lái)的Java字節(jié)碼反編譯成Java代碼懂算。

1.2 Kotlin 用于 Android 的案例學(xué)習(xí)

Kotlin 已被一些大公司成功采用只冻,其中一些公司分享了他們的經(jīng)驗(yàn):

Pinterest 已經(jīng)成功地將 Kotlin 引入了他們的應(yīng)用程序中庇麦,每個(gè)月有 1 億 5 千萬(wàn)人使用计技。 Basecamp 的 Android 應(yīng)用程序

https://www.youtube.com/watch?v=X1RVYt2QKQE

1、 數(shù)據(jù)類? koltin轉(zhuǎn)Java? ? copy(val var 不必說(shuō)明類型山橄、? ==? === )

2垮媒、沒(méi)有set get 變成? 屬性

3、函數(shù) (可以參數(shù) 默認(rèn)值航棱、? 一行的函數(shù)? return —>? =? 睡雇、when )

4、拓展函數(shù)

5饮醇、null ? !! ?:

6它抱、高階 函數(shù) (函數(shù)作為參數(shù))

7、類繼承 (open)

1.3? 新特性

3.1朴艰、 數(shù)據(jù)類? (可以編寫少得多的代碼)

數(shù)據(jù)類是kotiln的一個(gè)語(yǔ)法糖观蓄, 編譯器會(huì)自動(dòng)為數(shù)據(jù)類生成一些成員函數(shù)

java:

kotlin:

3.2混移、 所有類型都能 val var表示

所有的對(duì)象都通過(guò)一個(gè)指針?biāo)钟校羔樦挥袃煞N類型:var 表示指針可變侮穿,val表示指針不可變歌径。

Kotlin還引入了字符串模板 $ ,可以在字符串中直接訪問(wèn)變量和使用表達(dá)式

3.3 冒號(hào)

下面四種場(chǎng)景:

在變量定義中亲茅,代表變量的類型

在類定義中回铛,代表基類的類型

在函數(shù)定義中,代表函數(shù)返回值的類型

在匿名對(duì)象中克锣,代表對(duì)象的類型

3.4? Lambdas

RxJava現(xiàn)在很火茵肃,RxJava在android中的應(yīng)用:

函數(shù)縮寫:返回一個(gè)單一的的值 (省略大括號(hào), 直接 = )

3.5袭祟、 強(qiáng)大的when

Kotlin中沒(méi)有switch操作符免姿,而是使用when語(yǔ)句來(lái)替代。同樣的榕酒,when 將它的參數(shù)和所有的分支條件順序比較胚膊,直到某個(gè)分支滿足條件。如果其他分支都不滿足條件將會(huì)進(jìn)入 else 分支想鹰。

但功能上when語(yǔ)句要強(qiáng)大得多紊婉。首先第一點(diǎn)是,我們可以用任意表達(dá)式(而不只是常量)作為分支條件辑舷,這點(diǎn)switch就做不到喻犁。

如下述代碼,前面三個(gè)分支條件分別是:1何缓、變量在[1, 10]區(qū)間內(nèi)肢础, 2、變量x不在[10, 20]區(qū)間內(nèi)碌廓,3传轰、變量x是一個(gè)字符串。這個(gè)表達(dá)式用switch語(yǔ)句基本無(wú)法實(shí)現(xiàn)谷婆,只能用if else 鏈來(lái)實(shí)現(xiàn)慨蛙。

if else 鏈,我們可以直接用when語(yǔ)句把它給替換掉:

3.6 對(duì)象比較

Java的 == 操作符是比較引用值纪挎,但Kotlin 的 == 操作符是比較內(nèi)容期贫, === 才是比較引用值。

‘==‘表示比較值 (相當(dāng)于java equal)? !=

‘===‘表示比較兩個(gè)對(duì)象的地址是否相等(相當(dāng)于java? == )? ? !==

基于這點(diǎn)异袄,我們可以寫出邏輯更簡(jiǎn)潔合理的代碼:

上述代碼可以直接用when語(yǔ)句實(shí)現(xiàn)

3.7通砍、擴(kuò)展方法

這意味著,就算我們沒(méi)有權(quán)限去訪問(wèn)這個(gè)類中的代碼烤蜕,我們也可以擴(kuò)展這個(gè)類的更多的特性封孙。

3.7.1? dp, sp, px間的轉(zhuǎn)換

? ? ? ? ? 傳統(tǒng)的java寫法通常是寫個(gè)類似Util.dpToPx(int value)這樣的方法垢揩。看看Kotlin是怎么通過(guò)類的拓展來(lái)優(yōu)雅的解決的:

然后就可以這樣寫了:params.topMargin = 16.dpToPx()

是不是感動(dòng)到哭??

3.7.2? View的動(dòng)畫

每次寫Animation都是一個(gè)頭兩個(gè)大敛瓷, 這回我們不看java了叁巨,直接上Kotlin代碼:

duration還貼心的設(shè)了個(gè)默認(rèn)值呢!然后就可以這樣寫了~yourView.animateTopMargin(16, 32)或者你想把duration設(shè)長(zhǎng)一點(diǎn) yourView.animateTopMargin(16, 32, 500)

3.7.3 讓Fresco更易用

Fresco是Facebook出品的網(wǎng)絡(luò)圖片加載庫(kù)呐籽,實(shí)現(xiàn)了許多在android上非常有用的功能锋勺。比如Multi-URI功能可以優(yōu)先顯示低分辨率的圖片,等高分辨率的圖片下載完成后再進(jìn)行替換狡蝶。這個(gè)功能在移動(dòng)設(shè)備上太太太有用了庶橱,就是寫起來(lái)有點(diǎn)蛋疼:

怎么使用就不寫了,大家都知道了

3.8贪惹、更加安全的指針操作

Kotlin是空安全的苏章,在編譯期就處理了各種null的情況,避免了執(zhí)行時(shí)異常奏瞬》闵穑可以節(jié)約調(diào)試空指針異常的時(shí)間,不用擔(dān)心 null引發(fā)bug硼端。

?: 表示左側(cè)不為空并淋, 返回左側(cè)? 。 b?.length 不為null 返回左側(cè)珍昨,否則返回右側(cè)

? 表示變量可為空

3.9 高階函數(shù)(函數(shù)作為參數(shù)县耽,傳入函數(shù))

高階函數(shù)簡(jiǎn)單的說(shuō)就是 一個(gè)函數(shù)作為方法的參數(shù)

findEmail 在users中篩選 email符合 傳入 predicate函數(shù)的user,并返回镣典。

傳入函數(shù)fit到 findEmail方法 ( 需要在函數(shù)名前加兩個(gè)冒號(hào) :: 作為標(biāo)記)

附上:

3.10? 數(shù)據(jù)解構(gòu)

解構(gòu)就是解除數(shù)據(jù)結(jié)構(gòu)兔毙, 這里的結(jié)構(gòu)就是將數(shù)據(jù)對(duì)象中的屬性提取出來(lái)

val (id , username, email) = User(1, "WUSIBO" ,"373036876@qq.com")

Log.w("WSB", "username = "+username);

3.11? 更簡(jiǎn)潔的字符串

字符串的所見(jiàn)即所得? ? ,? 三引號(hào)”””來(lái)方便長(zhǎng)篇字符串的書寫

3.12 委托?

可觀察屬性,本質(zhì)就是觀察者模式兄春,在Java中也可以實(shí)現(xiàn)這個(gè)設(shè)計(jì)模式澎剥,但Kotlin實(shí)現(xiàn)觀察者模式不需要樣板代碼。在談Kotlin的可觀察屬性前神郊,先看下Kotlin里面的委托肴裙。同樣的,委托也是一種設(shè)計(jì)模式涌乳,它的結(jié)構(gòu)如下圖所示:

Kotlin在語(yǔ)言級(jí)別支持它,不需要任何樣板代碼甜癞。Kotlin可以使用by關(guān)鍵字把子類的所有公有成員都委托給指定對(duì)象來(lái)實(shí)現(xiàn)基類的接口:

上述代碼中夕晓,Base是一個(gè)接口,BaseImpl是它的一個(gè)實(shí)現(xiàn)類悠咱,通過(guò)by b語(yǔ)句就可以把Derived類中的所有公有成員全部委托給b對(duì)象來(lái)實(shí)現(xiàn)蒸辆。我們?cè)趧?chuàng)建Derived類時(shí)征炼,在構(gòu)造器中直接傳入一個(gè)BaseImpl的實(shí)例,那么調(diào)用Derived的方法等同于調(diào)用BaseImpl的實(shí)例的方法躬贡,訪問(wèn)Derived的屬性也等同于訪問(wèn)BaseImpl的實(shí)例的屬性谆奥。

回到可觀察屬性這個(gè)概念,Kotlin通過(guò) Delegates.observable()實(shí)現(xiàn)可觀察屬性:

上述代碼中拂玻,name是一個(gè)屬性酸些,改變它的值都會(huì)自動(dòng)回調(diào){ prop, ?old, ?new -> }這個(gè)lambda表達(dá)式。簡(jiǎn)單來(lái)說(shuō)檐蚜,我們可以監(jiān)聽(tīng)name這個(gè)屬性的變化魄懂。

可觀察屬性有什么用處呢?ListView中有一個(gè)經(jīng)典的Crash:在數(shù)據(jù)長(zhǎng)度與Adapter中的Cell的長(zhǎng)度不一致時(shí)闯第,會(huì)報(bào)IllegalStateException異常市栗。這個(gè)異常的根本原因是修改了數(shù)據(jù)之后,沒(méi)有調(diào)用notifyDataSetChanged咳短,導(dǎo)致ListView沒(méi)有及時(shí)刷新填帽。如果我們把數(shù)據(jù)做成可觀察屬性,在觀察回調(diào)方法中直接刷新ListView咙好,可以杜絕這個(gè)問(wèn)題盲赊。

二、小卡片 (From Java to Kotlin )

2.1 常量與變量

2.2 null聲明

2.3 空判斷

2.4 字符串拼接

2.5 換行

2.6 三元表達(dá)式

2.7 操作符

2.8 類型判斷和轉(zhuǎn)換 (聲明式)

2.9 類型判斷和轉(zhuǎn)換 (隱式)

2.10 if 多重條件

2.11 case語(yǔ)句

2.12 for循環(huán)

2.13 集合操作

2.14 遍歷

2.19 方法定義

2.20 帶返回值的方法

2.21 無(wú)結(jié)束符號(hào)

2.22? 工具類

2. 23 Get Set

2.24 類擴(kuò)展方法

其他 :

快速上手 Kotlin 的 11 招? :?https://mp.weixin.qq.com/s/lDBSi2E5_u8dJg21wubH4Q?utm_source=androidweekly.io&utm_medium=website

三敷扫、Koltin基礎(chǔ)語(yǔ)法? ? demo

koltin 樣例

1哀蘑、koltin 基礎(chǔ)知識(shí)

2、類與接口

3葵第、數(shù)據(jù)類

4绘迁、泛型

5、 koltin 高階函數(shù)與Lambda表達(dá)式

6卒密、其他

7缀台、委托

git:?https://g.hz.netease.com/WM-Android/WM-Android-Demo/koltinDemo

快速查找: 可以見(jiàn)目錄?

四、小結(jié)

Kotlin 非常適合開(kāi)發(fā) Android 應(yīng)用程序哮奇,將現(xiàn)代語(yǔ)言的所有優(yōu)勢(shì)帶入 Android 平臺(tái)而不會(huì)引入 任何新的限制:

兼容性:Kotlin 與 java 完全兼容膛腐,保障了 Kotlin 應(yīng)用程序可以在較舊的 Android 設(shè)備 上運(yùn)行而無(wú)任何問(wèn)題。Kotlin 工具在 Android Studio 中會(huì)完全支持鼎俘,并且兼容 Android 構(gòu) 建系統(tǒng)哲身。

性能:由于非常相似的字節(jié)碼結(jié)構(gòu),Kotlin 應(yīng)用程序的運(yùn)行速度與 Java 類似贸伐。 隨著 Kotlin 對(duì)內(nèi)聯(lián)函數(shù)的支持勘天,使用 lambda 表達(dá)式的代碼通常比用 Java 寫的代碼運(yùn)行得更 快。

互操作性:Kotlin 可與 Java 進(jìn)行 100% 的互操作,允許在 Kotlin 應(yīng)用程序中使用所有現(xiàn) 有的 Android 庫(kù) 脯丝。這包括注解處理商膊,所以數(shù)據(jù)綁定和 Dagger 也是一樣。

占用:Kotlin 具有非常緊湊的運(yùn)行時(shí)庫(kù)宠进,可以通過(guò)使用 ProGuard 進(jìn)一步減少晕拆。 在實(shí)際 應(yīng)用程序中,Kotlin 運(yùn)行時(shí)只增加幾百個(gè)方法以及 .apk 文件不到 100K 大小材蹬。 編譯時(shí)長(zhǎng):Kotlin 支持高效的增量編譯实幕,所以對(duì)于清理構(gòu)建會(huì)有額外的開(kāi)銷,增量構(gòu)建通 常與 Java 一樣快或者更快赚导。

學(xué)習(xí)曲線:對(duì)于 Java 開(kāi)發(fā)人員茬缩,Kotlin 入門很容易。包含在 Kotlin 插件中的自動(dòng) Java 到 Kotlin 的轉(zhuǎn)換器有助于邁出第一步吼旧。Kotlin 心印 通過(guò)一系列互動(dòng)練習(xí)提供了語(yǔ)言主要 功能的指南凰锡。

五、討論

17 位谷歌 Android 開(kāi)發(fā)專家是如何看待 Kotlin 的圈暗?

https://mp.weixin.qq.com/s/T7GZCuauE3Y0dAbZd_oLPw

補(bǔ)充:

1掂为、Android studio3.0 kotlin執(zhí)行main方法錯(cuò)誤

https://blog.csdn.net/yangzongbin/article/details/78394621

2、是 100% Kotlin 代碼员串,他們報(bào)告了程序員幸福的巨大差 異勇哗,以及工作質(zhì)量和速度的巨大改善。

https://m.signalvnoise.com/how-we-made-basecamp-3s-android-app-100-kotlin-35e4e1c0ef12

3寸齐、Keepsafe 的 App Lock 應(yīng)用程序也已轉(zhuǎn)換為 100% Kotlin欲诺, 使源代碼行數(shù)減少 30%、方 法數(shù)減少 10%渺鹦。

https://medium.com/keepsafe-engineering/lessons-from-converting-an-app-to-100-kotlin-68984a05dcb6

參考資料:

1扰法、from-java-to-kotlin? ? https://github.com/MindorksOpenSource/from-java-to-kotlin/blob/master/README-ZH.md

2、Kotlin在Android中的應(yīng)用? http://qq157755587.github.io/2015/11/14/kotlin-in-android/?utm_source=androidweekly.io&utm_medium=website

3毅厚、Kotlin —— 這次入門就不用放棄了? http://www.reibang.com/p/f364e3f9cc36

4塞颁、Kotlin超棒的語(yǔ)言特性 https://mp.weixin.qq.com/s/ylAZnOObrwtJDPqaK2ONLw

5、Kotlin —— 這次入門就不用放棄了http://www.reibang.com/p/f364e3f9cc36

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吸耿,一起剝皮案震驚了整個(gè)濱河市祠锣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咽安,老刑警劉巖伴网,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異板乙,居然都是意外死亡是偷,警方通過(guò)查閱死者的電腦和手機(jī)拳氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門募逞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蛋铆,“玉大人,你說(shuō)我怎么就攤上這事放接〈汤玻” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵纠脾,是天一觀的道長(zhǎng)玛瘸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)苟蹈,這世上最難降的妖魔是什么糊渊? 我笑而不...
    開(kāi)封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮慧脱,結(jié)果婚禮上渺绒,老公的妹妹穿的比我還像新娘。我一直安慰自己菱鸥,他們只是感情好宗兼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著氮采,像睡著了一般殷绍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹊漠,一...
    開(kāi)封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天主到,我揣著相機(jī)與錄音,去河邊找鬼躯概。 笑死登钥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的楞陷。 我是一名探鬼主播怔鳖,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼固蛾!你這毒婦竟也來(lái)了结执?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤艾凯,失蹤者是張志新(化名)和其女友劉穎献幔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趾诗,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜡感,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年蹬蚁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郑兴。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡犀斋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出情连,到底是詐尸還是另有隱情叽粹,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布却舀,位于F島的核電站虫几,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏挽拔。R本人自食惡果不足惜辆脸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望螃诅。 院中可真熱鬧啡氢,春花似錦、人聲如沸州刽。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)穗椅。三九已至辨绊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匹表,已是汗流浹背门坷。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袍镀,地道東北人默蚌。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像苇羡,于是被迫代替她去往敵國(guó)和親绸吸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,112評(píng)論 25 707
  • 用兩張圖告訴你设江,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料锦茁? 從這篇文章中你...
    hw1212閱讀 12,723評(píng)論 2 59
  • 前言 人生苦多,快來(lái) Kotlin 叉存,快速學(xué)習(xí)Kotlin码俩! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,209評(píng)論 9 118
  • 阿歐看了一眼《三十六個(gè)字》: “其實(shí)象形文字就是古人畫的簡(jiǎn)筆畫笨篷,對(duì)吧?” “嗯瓣履÷食幔”我回答。
    十八般文藝人閱讀 2,666評(píng)論 0 1
  • 司馬光 宋朝司馬光出生于官宦世家拂苹。從小機(jī)智過(guò)人安聘,勤奮好學(xué)痰洒。剛滿二十歲即考上進(jìn)士瓢棒。他為官清廉,公務(wù)之余常利用時(shí)間讀書...
    可愛(ài)的萌兔兔閱讀 161評(píng)論 0 0