精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Smalltalk為什么讓我愛不釋手?

開發 前端
C,C++,Python等,這些算是傳統的語言吧,我從這些語言上學會了基本的編程技術。這之后,又有四種語言,它們讓我學到了一些新的東西。這些語言改變了我思考的模式,雖然我從來沒有使用過它們,但它們都是絕對值得你學習一下的.

C,C++,Python等,這些算是傳統的語言吧,我從這些語言上學會了基本的編程技術。這之后,又有四種語言,它們讓我學到了一些新的東西。這些語言改變了我思考的模式,雖然我從來沒有使用過它們,但它們都是絕對值得你學習一下的。它們是:

Smalltalk

Lisp

Erlang

Haskell

你也許還會把Prolog加入這個列表中,但我沒有學過Prolog。本文是關于Smalltalk這種語言的。

我的目的并不是教大家怎么使用Smalltalk,而是向你展示一些Smalltalk能做到、而其它語言做不到的一些事情(聲明:有些語言也能做到,它們都是Smalltalk的一些方言)。不用說,我需要向你先介紹一下這種語言的一些基本知識,之后我才能向你展示更有價值的東西,那么就開始吧,***個程序:

  1. 1 + 1 

很顯然,計算的結果是2.如果你想把它存到一個變量里,這樣做:

  1. :1 + 1 

句子都要以點號(句號)結尾,像這樣:

  1. :1.  
  2. :m + 1 

在Squeak——這是Smalltalk語言的一種版本實現——里,有一個對象叫做Transcript,你把消息發送給它,它能把消息顯示到屏幕上。它很像一個Log窗口。你要這樣去用它:

  1. Transcript show: 'Hello world' 

運行的效果會是這樣:

 

Squeak transcript showing the result of Transcript show: 'Hello World'

 

Smalltalk的這種語法非常的獨特。消息(message)——這在其它語言里也叫做“方法”——是show: (包括冒號),它接受一個參數。我們用下面的寫法可以讓這個句子運行10遍:

  1. 10 timesRepeat: [  
  2.   Transcript show: 'Hello world'  

現在你開始能看出Smalltalk的獨特之處了。我把消息timesRepeat:發送到對象“10”——一個Integer類。這N次的循環操作是由這個Integer來執行的,你認真想想,其實很有道理。

第二個有趣的部分是代碼段落(block),是在方括號里面的部分。你可能認為它跟其他種語言里的代碼段落語法是同樣的道理,比如Java的:

  1. for(int i=1; i<11; i++) {  
  2.   System.out.println("Hello world");  

但你要是從Smalltalk的視角來看,你會發現它強大的多。它實際上是個閉包(closure)。看這段:

  1. := [  
  2.   Transcript show: 'Hello world'  

現在,我有了一個叫做t的變量,它的類型是BlockClosure,通過這個變量,我可以做我想做的任何事情。如果我向它發送class消息,它會返回它的class類型:

  1. t class 

如果我向它發送value消息,它會運行,會在Transcript里留下“Hello World”字符:

  1. t value 

讓我們多看幾段程序。一個沒有任何參數的消息:

  1. 10 printString 

帶有一個參數的消息:

  1. 10 printStringBase: 2 

帶有兩個參數的消息:

  1. 10 printStringBase: 2 nDigits: 10 

很可愛,不是嗎?這個方法叫做printStringBase:nDigits:。我沒在其它地方見過這樣的語法;只有Objective-C是個例外,因為它是從Smalltalk承襲過來的。

小玩意已經說的不少了,現在說點復雜點兒的東西。我們來創建一個類:

  1. Object subclass: #MyClass  
  2.        instanceVariableNames: ''  
  3.        classVariableNames: ''  
  4.        poolDictionaries: ''  
  5.        category: 'Pupeno' 

注意,一個類的創建是通過向其它類發送消息—包括名字和一些參數,告訴它我要繼承它。這是一個消息,跟其它類型的方法調用一樣。對象是類,類也是對象。Smalltalk的對象模式非常的優雅,但這是另外一個 話題。

現在我們有了一個類,我們來創建一個方法,叫做greet:就在這個類里。

  1. greet: name  
  2.   "Greets the user named name"  
  3.  
  4.   | message |  
  5.  
  6.   message :'Hello ', name.  
  7.   Transcript show: message. 

在方法定義里,首先我們給這個方法加了一個注釋,然后是管道 (“|”)包著的本地變量,然后是方法的實現,我把”Hello“放到了變量message里,然后用逗號符把它和變量name連接起來。然后我把它發送到Transcript里。

運行起來的結果像這樣:

 

MyClass greet method

 

好了,我們來用一用它:

  1. :MyClass new.  
  2. m greet: 'Pupeno' 

為了創建一個類MyClass的對象,我們向這個類發送new消息。這個new并不是像Java里的關鍵字。new是一個方法。你可以看它的源代碼,覆蓋它,等等。不要動它,除非你十分清楚你在做什么。

事實上,如果你想一下,你會發現我們沒有看到任何的關鍵字。看看我們寫過的這些代碼,沒有什么要記住的關鍵字!更重要的,目前為止,你已經基本的認識Smalltalk了。Smalltalk就是這些,但就像是一個小積木塊,這些小塊能讓你搭建出你想要的任何東西。

不錯,就這些,我要說的就這些。我們看到了,Smalltalk里沒有循環,它有整數類,這個類里實現了timesRepeat:消息,可以用來把事情重復執行N次。像這樣用于循環操作的方法到處都是。

你會問,有沒有if這個關鍵字?Smalltalk里肯定有一個if關鍵字,不是嗎?不,沒有。你所謂的if語法在Smalltalk里可以用你剛才看到的類和消息傳遞的機制實現。為了好玩,我們來實現一個。

我們從創建一個PBoolean類開始,然后兩個繼承它的類——PTrue 和 PFalse。

Object subclass: #PBoolean

  1. Object subclass: #PBoolean  
  2.        instanceVariableNames: ''  
  3.        classVariableNames: ''  
  4.        poolDictionaries: ''  
  5.        category: 'Pupeno'  
  6.  
  7. PBoolean subclass: #PTrue  
  8.        instanceVariableNames: ''  
  9.        classVariableNames: ''  
  10.        poolDictionaries: ''  
  11.        category: 'Pupeno'  
  12.  
  13. PBoolean subclass: #PFalse  
  14.        instanceVariableNames: ''  
  15.        classVariableNames: ''  
  16.        poolDictionaries: ''  
  17.        category: 'Pupeno' 

我們之前創建了一個類,MyClass,我們要給它定義一個equals:方法,它能返回true和false,也就是我們的PTrue 和 PFalse。

  1. equals: other  
  2.   ^ PTrue new 

這個小帽子,^,是返回的意思。我寫的是硬編碼讓它返回true。現在我們可以在程序來用它了:

  1. m1 :MyClass new.  
  2. m2 :MyClass new.  
  3. m1 equals: m2 

得到的是true。我們已經接近目標了,但還不是if。if應該是個什么樣子?它的樣子應該是這樣:

  1. m1 :MyClass new.  
  2. m2 :MyClass new.  
  3. (m1 equals: m2) ifTrue: [  
  4.   Transcript show: 'They are equal'; cr  
  5. ] else: [  
  6.   Transcript show: 'They are false'; cr  

估計你在想,怎么才能實現這樣的效果。我在PTrue里加入了一個方法:

  1. ifTrue: do else: notdo  
  2.   ^ do value 

這個方法看上去是接受2個參數,但執行時接受***個,忽略第二個。對于PFalse,正好相反:

  1. ifTrue: notdo else: do  
  2.   ^ do value 

這就可以了。一個可以用的if!如果讓我說,我覺得這真的很神奇。如果你去檢查Squeak了的代碼,你會發現它里面的if就是這樣實現的:

 

True's ifTrue:ifFalse:

 

如果你使用的編程語言能允許你創建像if條件這樣的基本功能,那它就可以讓你創建任何你想要的東西。

原文:http://www.aqee.net/why-i-love-smalltalk/#more-2494

【編輯推薦】

  1. 程序員育兒新工具Small Basic
  2. 2011年4月編程語言排行榜:告別Smalltalk
  3. 谷歌宣布推出Dart編程新語言
  4. 2011下半年Web編程語言和腳本語言的就業趨勢
  5. 每一門編程語言都是上輩子折翼的天使
責任編輯:陳貽新 來源: 外刊IT評論
相關推薦

2021-01-18 09:55:46

Spring代碼Java

2010-12-08 09:59:10

CSS

2021-04-13 10:07:08

Python軟件包編程語言

2009-08-29 08:41:07

Windows 7新功能

2021-04-25 10:15:38

Python編程語言軟件包

2021-01-24 11:55:40

spring升華代碼的技巧開發

2011-03-31 14:22:28

Chrome插件

2017-05-24 18:00:13

AndroidAndroid DatView

2011-05-12 09:12:16

Ubuntu 11.0

2013-05-06 22:52:10

智能手機交互方式用戶體驗

2021-01-20 06:29:42

JS工具操作符

2021-12-09 13:30:17

微軟

2024-12-17 15:00:00

Python代碼

2021-02-02 21:42:30

VS Code編輯器開發

2016-05-05 10:54:53

Android開發應用

2024-07-24 08:33:06

JavaScript匯編語言

2023-07-04 08:19:25

IDEA插件

2021-01-11 08:21:34

spring升華代碼的技巧開發

2021-07-13 10:59:49

Python可視化

2020-11-03 15:10:55

Spring Batc框架Java
點贊
收藏

51CTO技術棧公眾號

swag国产精品一区二区| 日本在线观看www| 在线观看一区| 伊人伊成久久人综合网小说| 夜夜夜夜夜夜操| 国产视频在线播放| 91丝袜高跟美女视频| 国产精品盗摄久久久| 欧美日韩在线国产| 美女福利一区| 欧美精品视频www在线观看 | 欧美专区在线视频| 妖精视频在线观看免费| 国产区精品视频在线观看豆花| 色成年激情久久综合| 强开小嫩苞一区二区三区网站| 天天干天天舔天天射| 麻豆成人久久精品二区三区红| 欧美激情国内偷拍| 国产精品一区二区亚洲| 东京久久高清| 精品视频一区二区不卡| 阿v天堂2017| 免费在线观看黄色网| 2021中文字幕一区亚洲| 99精品国产高清一区二区| 69国产精品视频免费观看| 国产精品精品国产一区二区| 亚洲男人天堂2024| 精品国产免费久久久久久婷婷| 91tv亚洲精品香蕉国产一区| 亚洲高清视频在线| 男人天堂成人网| 97电影在线观看| 26uuu国产一区二区三区| 91久久精品www人人做人人爽| 亚洲精品毛片一区二区三区| 99视频精品免费观看| 久久久久www| 亚洲午夜精品久久久久久高潮| 福利在线一区| 精品少妇一区二区三区| 亚洲视频在线不卡| 一级毛片久久久| 五月婷婷色综合| 国产日本在线播放| 欧美hdxxxxx| 一区二区三区在线视频免费| 伊人久久大香线蕉精品 | 美日韩在线视频| 特级西西人体高清大胆| 精品大片一区二区| 日韩精品极品在线观看| 在线免费观看污视频| 国内自拍欧美| 亚洲成人动漫在线播放| 青青草原播放器| 精品欧美视频| 日韩精品影音先锋| 国产69视频在线观看| 91精品久久久久久综合五月天| 日韩一级二级三级| 久久久男人的天堂| 成人av动漫| 亚洲精品美女免费| 97超碰在线资源| 精品成av人一区二区三区| 中文国产成人精品| 萌白酱视频在线| 久久精品影视| 久久久久久999| 日本熟妇毛耸耸xxxxxx| 在线亚洲欧美| 国产成人精品视| 好看的日韩精品| 国产免费av一区| 香蕉av777xxx色综合一区| 国产suv精品一区二区| 国产乱国产乱老熟| 麻豆精品视频在线观看视频| 亚洲综合中文字幕在线| 亚洲精品97久久中文字幕| 99国产精品久久久久久久久久| 欧美一区二区三区四区五区六区| 北岛玲日韩精品一区二区三区| 中文字幕日韩av资源站| 潘金莲一级淫片aaaaaa播放1| 欧美14一18处毛片| 欧美日韩一区二区在线播放| 激情五月婷婷久久| av在线精品| 日韩av在线免费播放| 国产免费无遮挡吸奶头视频| 亚洲天天综合| 97不卡在线视频| 中文字幕+乱码+中文| 国产精品主播直播| 明星裸体视频一区二区| 91在线看片| 亚洲一区二区欧美| 欧美精品无码一区二区三区| 成人97精品毛片免费看| 亚洲激情视频网站| 欧美自拍偷拍网| 一区视频在线看| 国产精品视频1区| 国产综合视频在线| 国产精品日韩成人| 成人在线视频一区二区三区| 人人视频精品| 日韩欧美国产一区二区在线播放| av黄色免费网站| 亚洲欧美亚洲| 国产精品青青在线观看爽香蕉| 亚洲av永久纯肉无码精品动漫| 国产视频一区不卡| 老太脱裤子让老头玩xxxxx| 韩国理伦片久久电影网| 日韩av在线免费播放| 欧美在线视频第一页| 亚洲在线观看| 国产精品v欧美精品v日韩精品| 国产尤物视频在线| 亚洲国产wwwccc36天堂| 手机在线国产视频| 精品国产乱码久久久| 欧美高清在线观看| 国产精品久久影视| 国产亚洲短视频| 国产原创中文在线观看| 日本免费精品| 日韩在线视频免费观看| 久久夜色精品国产噜噜亚洲av| 国产成人在线影院| 免费看啪啪网站| 欧美aaa大片视频一二区| 亚洲国产一区二区三区在线观看| 日韩视频中文字幕在线观看| 蜜臀久久久久久久| 日韩精品久久久毛片一区二区| 曰本三级在线| 欧美一二三区在线| 人人澡人人澡人人看| 秋霞成人午夜伦在线观看| 美脚丝袜一区二区三区在线观看| 欧美高清另类hdvideosexjaⅴ| 欧美乱熟臀69xxxxxx| 女人黄色一级片| 日韩国产欧美视频| 欧洲亚洲一区二区| a日韩av网址| 精品一区二区三区四区| 特一级黄色大片| zzijzzij亚洲日本少妇熟睡| 日本欧美视频在线观看| 日韩精品一区二区三区中文字幕| 久久影视电视剧免费网站清宫辞电视| 一区二区视频播放| 1000精品久久久久久久久| 欧美第一页浮力影院| 精品久久视频| 国产精品揄拍500视频| 欧洲不卡av| 91麻豆精品国产91久久久资源速度 | 亚洲第一精品自拍| 亚洲精品视频在线观看免费视频| 成av人片一区二区| 18禁免费无码无遮挡不卡网站| 欧美a一欧美| 国产福利精品视频| 色综合久久影院| 日韩一级片在线播放| 国产亚洲自拍av| 91网站黄www| 欧美日韩在线免费播放| 久久裸体网站| 99久久精品久久久久久ai换脸| 国产高清在线a视频大全| 亚洲电影av在线| 丁香社区五月天| 中文字幕精品一区二区精品绿巨人| 做a视频在线观看| 国产一区二区三区四区三区四| 国产九色精品| 91大神在线观看线路一区| 精品国产一区二区三区久久久| www.97超碰| 精品国产成人av| 91资源在线播放| 激情综合网天天干| 日韩 欧美 视频| 国产乱码精品一区二区亚洲| 91久久精品美女高潮| av今日在线| 丝袜美腿精品国产二区| 性生活三级视频| 色狠狠av一区二区三区| 91杏吧porn蝌蚪| 99在线精品观看| 小明看看成人免费视频| 在线成人亚洲| 亚洲女人毛片| 日韩精品一区二区三区免费视频| 97在线免费观看视频| 免费黄色网址在线观看| 精品亚洲一区二区三区四区五区 | 亚洲综合在线电影| 精品自在线视频| 国产一区二区三区不卡在线| 日韩精品影音先锋| 国产又黄又大又爽| 日韩欧美在线视频日韩欧美在线视频 | 久久国产精品免费精品3p| 国产精品久久久久久久午夜 | 午夜精品毛片| 欧美男人的天堂| 91精品啪在线观看国产爱臀| 国产精品久久久久久亚洲影视 | 欧美在线视屏| 色噜噜狠狠一区二区三区| 超碰97成人| 91精品在线观| 99久久精品一区二区成人| 久久久在线观看| 宅男在线观看免费高清网站| 国产亚洲精品激情久久| 日韩永久免费视频| 日韩欧美在线1卡| 国产天堂第一区| 日韩欧美中文第一页| 国产在线视频在线观看| 中文字幕亚洲在| 久久久精品成人| 国产亚洲欧美在线| 双性尿奴穿贞c带憋尿| 成人av网站在线观看免费| 涩多多在线观看| 久草这里只有精品视频| wwwwww.色| 丝袜亚洲另类欧美| 中文字幕日本最新乱码视频| 精品99视频| www.日本三级| 欧美日韩亚洲一区在线观看| 2021狠狠干| 欧美成人日本| 国产欧美123| 欧美有码视频| 日本福利视频网站| 欧美在线国产| 国产精品日韩三级| 好吊日精品视频| 久久男人资源站| 亚洲午夜黄色| 欧美黑人在线观看| 99视频一区| 日韩手机在线观看视频| 久久精品国语| 精品久久久久久久无码| 天堂蜜桃91精品| 91看片在线免费观看| 日韩电影一区二区三区| 天天操,天天操| 麻豆国产精品一区二区三区| 久久6免费视频| 国产成人在线视频免费播放| 中文字幕无人区二| av在线综合网| 日本xxxxxxxxx18| 中文在线免费一区三区高中清不卡| 国产主播av在线| 亚洲欧洲精品一区二区三区 | 欧美日韩精品一区视频| 国产免费不卡av| 精品国产制服丝袜高跟| 欧美一区二区黄片| 亚洲区免费影片| 米奇777四色精品人人爽| 欧美成人第一页| free性护士videos欧美| 国产精品成人av在线| 国产精品免费精品自在线观看 | 亚洲国产精品久久久久久6q| 亚洲国产成人久久综合| 国产一级片在线播放| 免费99精品国产自在在线| gogo高清在线播放免费| 国产精品户外野外| 国产一区二区三区国产精品| 狠狠综合久久av| 日韩欧美视频专区| 日本aa在线观看| 青青草原综合久久大伊人精品优势| √天堂资源在线| 久久影院视频免费| 天天综合天天做| 欧美性猛交xxxx富婆弯腰| 97人妻精品一区二区三区| 亚洲第一精品久久忘忧草社区| 成年人在线视频免费观看| 欧美激情一区二区三级高清视频| 中文字幕av一区二区三区佐山爱| 成人黄色在线播放| 网友自拍区视频精品| 超碰97免费观看| 久久亚洲影院| 制服.丝袜.亚洲.中文.综合懂| 久久免费午夜影院| 欧美成人精品欧美一级| 在线视频综合导航| 色一情一乱一区二区三区| 自拍偷拍亚洲欧美| 1区2区3区在线| 91最新在线免费观看| 久草精品在线| 国产曰肥老太婆无遮挡| 久久精品国产亚洲a| 久久亚洲AV成人无码国产野外| 亚洲乱码国产乱码精品精的特点 | 亚洲不卡的av| 一本色道久久综合精品竹菊| 丰满人妻妇伦又伦精品国产| 日韩中文字幕视频在线| 依依综合在线| 国产主播一区二区三区四区| 午夜av一区| 成年人三级黄色片| 国产日韩欧美一区二区三区乱码 | 日韩色在线观看| 天堂地址在线www| 国产福利精品视频| 亚洲天堂日韩在线| 国产欧美日韩小视频| 国产高清不卡二三区| 你懂得在线观看| 欧美日韩不卡一区| 不卡在线视频| 国产精品视频26uuu| 欧美裸体在线版观看完整版| 妺妺窝人体色www在线小说| 福利一区在线观看| 欧美日韩免费做爰视频| 欧美一级片在线| 亚洲图区一区| 91在线免费看片| 欧美韩国一区| 欧美激情第四页| 亚洲黄一区二区三区| 国产巨乳在线观看| 久久久精品一区二区| 日韩精品亚洲专区在线观看| 欧美在线观看视频免费| 风间由美性色一区二区三区| 久久久久香蕉视频| 精品电影一区二区| 国产亚av手机在线观看| 国产精品日韩一区二区三区| 在线不卡亚洲| av网在线播放| 欧美日本一道本| a级在线观看| 国产精品大全| 国产日韩欧美三区| 日韩av在线看免费观看| 在线观看91视频| 麻豆视频网站在线观看| 国产欧美亚洲精品| 91超碰国产精品| 性猛交╳xxx乱大交| 午夜精彩视频在线观看不卡| 青青草娱乐在线| 国产精品狼人色视频一区| 午夜精品视频一区二区三区在线看| 国产999免费视频| 精品国产乱码久久久久久天美| 日本中文字幕一区二区有码在线 | 欧美激情一区二区三区在线| 中文字幕日韩国产| 欧美大成色www永久网站婷| 嫩草国产精品入口| 国产性生交xxxxx免费| 中文字幕一区二区三区视频| 性生交生活影碟片| 国产高清在线不卡| 欧美国产高潮xxxx1819| 国精品无码人妻一区二区三区| 欧美日韩一区二区三区在线 | 国产精品激情av电影在线观看| 999久久久亚洲| 亚洲美女在线播放| 欧洲亚洲国产日韩| 久草在线资源站资源站| 欧美激情第六页| 国产在线国偷精品免费看| 日韩成年人视频| 丝袜美腿精品国产二区| 国产精品白丝一区二区三区| 天天影视综合色| 午夜亚洲福利老司机| 91社区在线观看|