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

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

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

    gr8vyguy@Blogjava

    Groovy讀書筆記4

    Closure

    Use Cases for Closures
       
        separating iteration logic from what to do on each iteration

        handling resources, 
            open
            do the job   // in a closure, as parameter
            close

    Implicit Variable of Closure
        
        it                     default parameter

        this                enclosing class
        owner           enclosing object, class or closure
        delegate       same as owner, but changeable 

    closure without parameters
       { -> ... }

    closure with one parameter
       { ... }, { x -> ... }

    Scope of a closure

       a closure must remember original context frame. it is closed under declaration context.

    Return from a closure or method
      
      end return
          the value of  last expression is returned.

      prematurely return with return keyword

    Groovy Control Structure

    Groovy Truth

       Boolean Test: evaluate an expression to be true or false
       
       any non-void type can be evaluated as Boolean.
            to be true
                  non empty, non zero, non null

    Typo, forget a =
      
       if(x = 1) is not allowed in groovy.

      if(1 == x) is safe than if(x == 1)

    Loop
      an object can be iterable.

    assert
      
      如果沒有assert, code一樣產(chǎn)生夠用的錯誤信息,那么就不需要assert

      assert can clarify the code intents. runnable comment!

    Return Value

      method with void do not return a value
      closure always return a value, null if no value

    OO in Groovy

    dynamic, object oriented and scripting

    classes and scripts definition

    script’s binding 
        undeclared variable

        transfer variables between Script and Calller

    default visibility of fields ==> property definition

    default visibility of methods ==> public

    Reference a field

        Class and Map has some similiarity.

        obj.field
        obj[’field’]

        override get and set methods

    Parameter Type
       
      optional, if not specified, then means Object.

    Groovy’s method dispatch
       GroovyObject.invokeMethod(name, params[])

    Safe dereferencing with ?. operator

        protected from NPE

        null?.foo()   no foo called, return null

    Constructor

        called by 
            1. new ClassName(...)
            2. as with list
            3. implicit coercion with list, implicit construction

        named parameters for default constructor
            available if no constructor is defined

    Type aliasing

           import ... as ..

    Typing

         Interface

         Design by Contract

         Duck Typing, Dynamic Typing, checked by tests

    Multimethods

        method look up take the dynamic type of arguments into account.

        method dispatch at run time(Groovy) or compile time(Java)

    GroovyBeans

        obj.property mapped to obj.getProperty() or obj.setProperty(value) method

    dot-@ operator

        obj.@field access directly the field

    event in groovy bean

       btn.actionPerformed = { ... }

       groovy通過bean introspection確定是否為添加一個Listener,如果是, 生成一個ClosureListener,
       a proxy implementation of the required listener interface,調(diào)用后面的closure,添加

    GPath

          objs.p1,p2*.p3

    Spread Operator *

         *list 打散

    mix-in with use

        dynamic 增加method

        use(category) {
              ....
        }

       category中定義static methods, use后, method的第一個argument的類得到一個新的method

    Groovy's Meta-Object Protocoll(MOP)

    how Groovy performs its magic?
          interception points

    All classes programmed in Groovy are constructed by the GroovyClassGenerator, such that it implements GroovyObject interface.

    Method Dispatching

         this.invokeMethod()
         getMetaClass().invokeMethod()
         MetaClassRegistry.getMetaClass(this.class).invokeMethod()

    Usability

        intercept
        relay
        pretend


    posted on 2007-12-20 07:48 gr8vyguy 閱讀(832) 評論(0)  編輯  收藏 所屬分類: Java

    <2007年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    導(dǎo)航

    統(tǒng)計

    公告

  • 轉(zhuǎn)載請注明出處.
  • msn: gr8vyguy at live.com
  • 常用鏈接

    留言簿(9)

    隨筆分類(68)

    隨筆檔案(80)

    文章分類(1)

    My Open Source Projects

    搜索

    積分與排名

    最新評論

    主站蜘蛛池模板: 日韩亚洲人成在线| 久久精品视频免费看| 亚洲性猛交xx乱| 亚洲午夜福利在线观看| 日韩免费视频观看| 嫖丰满老熟妇AAAA片免费看| 一本久久A久久免费精品不卡| 波多野结衣免费一区视频| 亚洲AV无码国产剧情| 亚洲jjzzjjzz在线播放| 亚洲人成网站影音先锋播放| 国产无遮挡色视频免费视频| 性短视频在线观看免费不卡流畅| 亚洲va在线va天堂成人| 久久久久亚洲AV成人无码 | 日本最新免费不卡二区在线| 久久99青青精品免费观看| 亚洲视频在线免费| 深夜福利在线视频免费| 在线观看亚洲免费视频| 亚洲AV色欲色欲WWW| 亚洲 欧洲 视频 伦小说| 亚洲一级免费视频| 亚洲毛片基地4455ww| 亚洲乱码一二三四五六区| 亚洲成aⅴ人在线观看| 亚洲网红精品大秀在线观看| 亚洲A∨无码无在线观看| 亚洲不卡中文字幕无码| 亚洲AV无码专区电影在线观看| 最近中文字幕无吗免费高清| 日韩精品无码区免费专区| 欧洲乱码伦视频免费| 久久午夜免费视频| 国产免费看JIZZ视频| 69成人免费视频| 成年人性生活免费视频| 性做久久久久免费观看| 亚洲 无码 在线 专区| 亚洲人成网站观看在线播放| 亚洲午夜成人精品电影在线观看|