<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    PS,1880后程序員

    看不完的牙,寫不完的程序,跑不完的步。
    隨筆 - 97, 文章 - 34, 評論 - 10, 引用 - 0
    數據加載中……

    Hello,學點SmallTalk吧

     

    久仰SmallTalk的大名,大概是因為很多design pattern的名著都提到它,并且一說到OOAD也都會提到它老人家。但是我并不知道它是啥子東東,就像誰關心Ada一樣。

    但是出來混總是需要還的L沒想到Martin大叔的“分析模式”竟然是用這個鬼東西寫的代碼,額的神啊,我只好打起萬分的精神,惡補一下。

    最不幸的是網上能夠找到的關于SmallTalk書,確實比Java少得多的多。找到一本E文的,將就吧。

    另外的發現就是ruby號稱ruby>(smalltalk+perl),所以有些資料可以在ruby中找到哈。

    我的這份Smalltalk的學習筆記,并不是按照Smalltalk進階的思路整理的,而是在閱讀AP第七章的過程中隨用到隨整理的???/span>AP是夠用了。

     

    變量和賦值

    字符 $a $1

    字符串變量,用單引號表示。注意在SmallTalk中雙引號是注釋。所以

    ‘John’ ‘Martin’這是對的。

    A := John Hunt”這是錯的(去死?

     ‘a’$a表示的是不同類的實例,前者對應的Strings;后者對應的Charater。

    Symbols

    我覺得這就相當于java中的常量

    #join  week  system42

    賦值 := (這個和Delphi一樣哈)

    myName := ‘John Hunt

    newIndex := oldIndex

     

    臨時變量
     

    |x y z|

    x :=5.

    y :=6.

    Z :=x+y.

    Transcript show: z printString.


     


    isKindof:類型判斷

    (anObject isKindOf: String) ifTrue: [...] ifFalse: [...] is an example of Smalltalk's runtime equilivant of "type testing"

     

    集合

    Enumerating Collections

    do – does the same operation on every element of the collection.

    MyCollection do: [:piece | piece reset]

    MyCollection的每個element發送消息reset(其實就是執行reset

    collect – like do: but returns a collection of the results.

    select – test every element and returns those which pass.

    reject – test every element and returns those which fail.

    detect – returns the first element which passes the test

    inject:into

     

    inject

    Smalltalk語言中也支持集合的迭代器,如果你要求Smalltalk程序員求數組元素的和,他們會像這樣來使用inject函數:

     

    sumOfValues              "Smalltalk method"

        ^self values

              inject: 0

              into: [ :sum :element | sum + element value]

     

    inject是這樣工作的,當關聯的代碼塊第一次被調用時,sum被賦給inject的參數值(在這里是0),element取數組第一個元素。第二次和以后調用到代碼塊時,sum被賦給上次調用代碼塊時返回的值,這樣sum就跑完了全程,inject最終的結果是代碼塊最后被調用的值。

     

     

     

    Dictionary

    DictionarySet的子類。

    at : aKey 對應Javaget(key)

    at : aKey put : aValue對應Javaput(key, value)

    應用方式:

     

     

     

     

     

    Code Block

    [ :params | <message-expressions> ]

    Where :params is the list of parameters the code can take. This means that the Smalltalk code:

    [:x | x + 1]可以理解為:f(x) = x + 1

    Code Block的調用:

    [:x | x + 1] value: 3

    can be evaluated as

    f(3) = 3 + 1

    這是相等于Code Block的定義和調用在一起。

    令一種方法是先定義code Block,然后在其它的地方再調用。

    anotherBlock := [ :parml :parm2 | | temp |

    temp := pannl incorporate: parm2.

    temp rehash.

    ].

    說明:

    1)        定義Code BlockanotherBlock。

    2)        parml ,parm2是兩個參數

    3)        temp是定義的變量

    調用:anotherBlock value: objecfcl value: object2

    盡管狠不適應,但是Code Block可以使得代碼簡潔明了:

    positiveAmounts := allAmounts select: [:amt | amt isPositive]

    這句話就是從collection allAmounts返回所有positive的單元的集合。amt按我的理解就是對應的每個element

     

     

    posted on 2009-04-16 17:34 amenglai 閱讀(457) 評論(0)  編輯  收藏 所屬分類: PEAA分析模式 之 讀書筆記

    主站蜘蛛池模板: 亚洲精品乱码久久久久久V | 丁香花在线观看免费观看图片| 免费看国产成年无码AV片 | 国产真实伦在线视频免费观看| 亚洲人成77777在线观看网| 免费毛片a在线观看67194| 亚洲天堂一区在线| 免费看一级高潮毛片| 免费v片在线观看无遮挡| 色网站在线免费观看| xvideos亚洲永久网址| 91天堂素人精品系列全集亚洲| 性xxxx视频免费播放直播| 亚洲黄色网址在线观看| 成年网站免费视频A在线双飞| 亚洲夂夂婷婷色拍WW47| 国产精品免费看久久久| 亚洲成人福利在线| 成人毛片免费观看视频| 特级毛片全部免费播放a一级| 久久亚洲精品无码播放| 亚洲精品免费在线观看| 亚洲一区二区三区播放在线| 国产精品高清全国免费观看| eeuss影院免费92242部| 国产精品另类激情久久久免费| 男性gay黄免费网站| 成人免费福利电影| 日韩免费在线中文字幕| 亚洲人成在线电影| 特级淫片国产免费高清视频| 一个人看的www免费高清| 在线电影你懂的亚洲| 在线看片无码永久免费aⅴ| 国产精品免费久久久久电影网| 久久久久亚洲AV无码专区体验| 日韩免费无砖专区2020狼| 中文日本免费高清| 亚洲一区二区三区丝袜| 亚洲码国产精品高潮在线| 成人午夜18免费看|