<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第七章的過程中隨用到隨整理的。看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 閱讀(449) 評論(0)  編輯  收藏 所屬分類: PEAA分析模式 之 讀書筆記

    主站蜘蛛池模板: 精品亚洲综合久久中文字幕| 亚洲无码黄色网址| 亚洲精品亚洲人成在线播放| 久久国产色AV免费看| 亚洲欧洲精品在线| 国产大片免费网站不卡美女 | 亚洲国产精品嫩草影院久久| 婷婷国产偷v国产偷v亚洲| 国产精品酒店视频免费看| 国产AV日韩A∨亚洲AV电影| 亚洲av成人一区二区三区在线观看 | 国产精品免费网站| 亚洲入口无毒网址你懂的| 女人18毛片免费观看| 免费VA在线观看无码| 亚洲精品无码乱码成人| 免费看又黄又无码的网站| 亚洲精品123区在线观看| 国产免费观看黄AV片| 大妹子影视剧在线观看全集免费| 亚洲午夜福利717| 国产精品色拉拉免费看| 久久亚洲精品无码gv| 日韩精品亚洲aⅴ在线影院| 222www在线观看免费| 日日摸日日碰夜夜爽亚洲| 久久夜色精品国产亚洲av| 最近2019免费中文字幕6| 亚洲精品无码成人| 亚洲综合精品香蕉久久网| 免费看黄视频网站| 免费视频精品一区二区| 亚洲精选在线观看| 日韩成人免费在线| 久久成人免费播放网站| 中文无码亚洲精品字幕| 亚洲精品狼友在线播放| 在线精品免费视频无码的| 嫩草在线视频www免费看| 亚洲中文字幕无码中文| 亚洲欧洲国产精品香蕉网|