精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

毛片在线免费| 免费在线黄色片| 成人h在线观看| 国产精品久久久久久久久快鸭| 国产视频999| 免费麻豆国产一区二区三区四区| 国产亚洲成av人片在线观黄桃| 欧美性极品xxxx娇小| 午夜精品一区二区三区四区 | 欧美在线不卡| 日韩激情av在线免费观看| 在线观看av日韩| 国产丝袜视频在线播放| 国产视频一区二区在线| 99爱精品视频| 久久精品99北条麻妃| 国产精品v日韩精品v欧美精品网站| 亚洲欧美一区二区激情| 欧美在线aaa| 高潮在线视频| 亚洲六月丁香色婷婷综合久久| 女人一区二区三区| 亚洲AV无码国产精品午夜字幕| 石原莉奈在线亚洲二区| 久久久人成影片一区二区三区观看| 国产av自拍一区| 成人午夜大片| 欧美一区二区三区免费观看视频| 久久久久久久久久久福利| 在线观看wwwxxxx| 中文字幕精品在线不卡| 久久艳妇乳肉豪妇荡乳av| 精品久久久免费视频| 免费看精品久久片| 欧美又大又粗又长| 国产一级中文字幕| 欧美国产免费| 色综合伊人色综合网| 亚洲第一成人网站| 欧美理伦片在线播放| 精品国产一区二区精华| 亚洲五月激情网| 激情久久一区二区| 色欧美日韩亚洲| 久久网站免费视频| 欧美xxxhd| 亚洲大型综合色站| 亚洲人成无码网站久久99热国产| 1024在线播放| 一区二区日韩电影| 男人日女人的bb| 99福利在线| 亚洲欧美日韩电影| 91九色国产ts另类人妖| 黄网页免费在线观看| 中文字幕中文乱码欧美一区二区| 日韩欧美在线观看强乱免费| 韩日在线视频| 国产喷白浆一区二区三区| 日韩av大全| shkd中文字幕久久在线观看| 欧美激情综合在线| 伊人久久大香线蕉综合75| 欧美r级在线| 亚洲人妖av一区二区| 亚洲成人动漫在线| 少女频道在线观看高清| 亚洲一区二区三区中文字幕 | 91精品国产91久久久久久最新毛片 | 欧美日韩xx| 亚洲品质自拍视频网站| 波多野结衣 作品| 黄页网站大全在线免费观看| 亚洲va国产va欧美va观看| 日韩免费视频播放| 久久毛片亚洲| 欧美精品一级二级三级| 免费网站在线观看黄| 亚洲精品黑牛一区二区三区| 亚洲成人av资源网| 精品欧美一区二区久久久| 日韩精品一区二区三区免费观影 | 国产一区二区精品在线观看| av成人免费观看| 婷婷在线免费视频| 国产日韩一级二级三级| 中文字幕在线观看一区二区三区| 在线不卡日本v二区707| 午夜精品久久久久久| 激情网站五月天| 成人自拍视频| 日韩电影中文字幕一区| 少妇愉情理伦三级| 国产一区视频在线观看免费| 日韩av色综合| 99国产精品久久久久久久成人| 成人av高清在线| 日韩.欧美.亚洲| 成人三级小说| 欧美日韩一卡二卡三卡| www.四虎在线| 欧美日韩在线网站| 久久久久久久一| 一级片在线免费观看视频| 懂色av一区二区三区免费观看 | 久久精品国产亚洲a∨麻豆| 国产精品久久午夜| 日韩精品xxxx| 欧美影院视频| 在线电影中文日韩| 日韩精品――中文字幕| 精品一区二区在线免费观看| 久久久一本精品99久久精品66| 麻豆视频在线观看免费网站| 岛国av一区二区在线在线观看| 亚洲男人天堂av在线| 综合干狼人综合首页| 久久6免费高清热精品| 免费一级a毛片| av高清久久久| 黄色网在线视频| 999国产精品亚洲77777| 国产午夜精品理论片a级探花| 全网免费在线播放视频入口| 男女激情视频一区| 久久精品国产综合精品| 欧美日韩在线视频免费观看| 在线播放视频一区| 免费看黄色的视频| 一本色道久久| 国产精品美女诱惑| 婷婷色在线播放| 91精品国产色综合久久不卡蜜臀| 天天操天天舔天天射| 一区二区三区四区五区精品视频 | 丰满人妻一区二区三区大胸| 久久大综合网| 国产精品美女久久久久久免费| 日本护士...精品国| 午夜影院在线观看欧美| 人妻av一区二区三区| 欧美va天堂在线| 91亚洲精华国产精华| 成人高潮成人免费观看| 91激情在线视频| www.色天使| 久久国产88| 欧美欧美一区二区| 亚洲淫成人影院| 亚洲欧美日韩中文视频| 欧美a视频在线观看| 91蝌蚪porny| 少妇性饥渴无码a区免费| 亚洲动漫精品| 国产精品成久久久久三级| 国产一区二区影视| 日本高清免费不卡视频| 69视频在线观看免费| 秋霞午夜av一区二区三区| 五月婷婷一区| 在线不卡一区| 欧美日韩国产成人| 国产 日韩 欧美 精品| 亚洲国产成人tv| 国产精品久久不卡| 视频一区在线视频| 在线观看成人一级片| 国产一区精品二区| 欧美猛男性生活免费| 人妻91麻豆一区二区三区| 亚洲高清视频的网址| theav精尽人亡av| 葵司免费一区二区三区四区五区| 欧美专区一二三| 日韩三区四区| 欧美精品九九久久| 四虎影视在线播放| 欧美色倩网站大全免费| 欧美日韩在线观看免费| 91丨九色丨蝌蚪丨老版| 另类小说第一页| 欧美在线免费| 久久99精品久久久久久久久久| 天天综合网站| 欧美xxxx做受欧美| 色鬼7777久久| 欧美日韩黄色一区二区| 国产一级中文字幕| 国产女主播一区| 欧美人与性动交α欧美精品| 国产九九精品| 亚洲精品影院| 久久资源综合| 国产日韩在线看| 毛片在线导航| 国产亚洲欧洲在线| 黄色av中文字幕| 欧美三级中文字幕| 国产第一页第二页| 中文文精品字幕一区二区| 国产一卡二卡三卡四卡| 毛片av一区二区三区| 国产免费黄色一级片| 凹凸成人精品亚洲精品密奴| 粉嫩高清一区二区三区精品视频| 成人日韩在线观看| 久久男人资源视频| 精品美女在线观看视频在线观看| 日韩成人网免费视频| 日韩在线视频二区| 玖玖爱这里只有精品| 久久先锋影音av鲁色资源网| 中文字幕在线视频一区二区| 日韩中文欧美在线| 亚洲熟妇无码一区二区三区导航| 手机亚洲手机国产手机日韩| 久久久人人爽| 红杏视频成人| 99精品国产高清一区二区| 成人免费在线观看视频| 国产91精品久久久久久久| 天堂8中文在线| 最新91在线视频| 麻豆app在线观看| 亚洲电影在线看| 成人黄色免费视频| 在线播放中文字幕一区| 加勒比在线一区| 精品人伦一区二区三区蜜桃免费| 亚洲国产精品久| 成人欧美一区二区三区黑人麻豆| 波多野吉衣中文字幕| 97精品国产97久久久久久久久久久久| 久久综合在线观看| 另类欧美日韩国产在线| 99免费视频观看| 久久亚洲美女| 黄在线观看网站| 国产精品普通话对白| 欧美 日韩 亚洲 一区| 在线观看的日韩av| 岛国大片在线播放| 日韩激情电影免费看| 亚洲香蕉伊在人在线观| 91香蕉视频污在线观看| 国产精品久久久久久久浪潮网站| 日本二区在线观看| 久久久国产一区二区三区四区小说 | 91在线云播放| 国产黄色三级网站| 91在线一区二区| 精品无码人妻一区| 久久久久久久久久电影| 久久久久亚洲av成人无码电影| 久久久九九九九| 成人无码av片在线观看| 国产精品毛片久久久久久久| 五月天免费网站| 《视频一区视频二区| 18性欧美xxxⅹ性满足| 成人日韩欧美| 欧美xxxx14xxxxx性爽| 91亚洲天堂| 欧美精品18videos性欧| 99爱在线观看| 日本国产精品视频| 欧美xxxx做受欧美护士| 国产精品丝袜一区二区三区| 亚洲黑人在线| 99re在线观看| 日本一区福利在线| 日韩精品久久久免费观看| 999精品色在线播放| ijzzijzzij亚洲大全| 国产精品v欧美精品v日本精品动漫| 国产毛片视频网站| 另类国产ts人妖高潮视频| 国产精品v日韩精品v在线观看| 久久激情五月婷婷| 潘金莲一级淫片aaaaa| 欧美午夜18电影| 精品一区二区不卡| 欧美日韩有码| 日本久久久网站| 老色鬼久久亚洲一区二区| jizz欧美性11| 丁香亚洲综合激情啪啪综合| 91成人在线免费视频| 亚洲丝袜另类动漫二区| 日韩黄色精品视频| 日本乱人伦aⅴ精品| 99草在线视频| 亚洲欧美日韩天堂| 在线免费观看a视频| 欧美在线视频播放| 国产人与zoxxxx另类91| 免费av在线一区二区| 自拍欧美日韩| 亚洲精品怡红院| 播五月开心婷婷综合| 亚洲精品国产精品乱码在线观看| 亚洲福利视频一区二区| 最近国语视频在线观看免费播放| 欧美变态tickling挠脚心| 国自产拍在线网站网址视频| 欧美日韩国产二区| 欧美成人xxxx| 麻豆一区区三区四区产品精品蜜桃| 91av精品| 四季av一区二区| 92精品国产成人观看免费| 欧美日韩激情在线观看| 在线观看欧美精品| 人人妻人人澡人人爽久久av| 久久精品成人动漫| 日韩成人影音| 国产日韩一区二区三区| 亚洲女同中文字幕| 欧美精品成人网| 91网上在线视频| 精品少妇久久久| 欧美一区三区四区| 日韩理伦片在线| 国产91精品在线播放| 米奇精品关键词| 久久艹国产精品| 国产精品91xxx| 中文乱码字幕高清一区二区| 色狠狠一区二区| 天堂在线资源网| 国内精品久久久久伊人av| 精品国产乱码一区二区三区| 亚洲欧美国产不卡| 日韩av中文字幕一区二区三区| 国产精品无码毛片| 五月婷婷丁香六月| 伊人精品在线观看| 美女福利一区二区三区| 国产亚洲欧美一区二区| 国内精品福利| 亚洲午夜精品在线观看| 亚洲精品国产无天堂网2021| 国产精品久久久久久久免费| 在线视频免费一区二区| 自拍偷自拍亚洲精品被多人伦好爽| 精品视频一区在线| 国产日韩专区| aa片在线观看视频在线播放| 午夜国产精品影院在线观看| 欧性猛交ⅹxxx乱大交| 97在线看福利| 国产精品久久久久久久久久白浆 | 中文成人无字幕乱码精品区| 一区二区三区日本| 亚洲a视频在线| 欧美国产日本在线| 波多野结衣欧美| 欧美综合在线播放| 久久综合九色综合97_久久久| 久久精品国产亚洲av无码娇色 | 国产片在线观看| 国产精品激情av在线播放| 日本女优一区| 日本中文字幕观看| 亚洲精品国产a| 日本黄色不卡视频| 青草热久免费精品视频 | 99国产精品久久久| 国产又爽又黄的视频| 亚洲人av在线影院| 欧美激情不卡| 国产91porn| 26uuu亚洲综合色| 中文字幕在线网址| 久久国产精品视频| 精品一区二区男人吃奶| 国产激情在线观看视频| 亚洲欧洲国产专区| 丰满人妻一区二区| 国产精品第1页| 欧美日韩国产麻豆| 激情综合网五月婷婷| 日韩精品免费视频| 福利一区二区三区视频在线观看| 在线免费观看成人网| 成人晚上爱看视频| 波多野结衣视频在线观看| 久久夜色精品国产亚洲aⅴ| 国产乱论精品| 免费涩涩18网站入口| 一级日本不卡的影视| 免费福利在线视频| 成人黄色免费片| 国产精品乱看| 国产67194| 亚洲石原莉奈一区二区在线观看| www.久久久久爱免| 黄色影院一级片| 亚洲男人天堂一区| 看电影就来5566av视频在线播放|