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一樣產生夠用的錯誤信息,那么就不需要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,調用后面的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 閱讀(834) 評論(0)  編輯  收藏 所屬分類: Java

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

          導航

          統計

          公告

        1. 轉載請注明出處.
        2. msn: gr8vyguy at live.com
        3. 常用鏈接

          留言簿(9)

          隨筆分類(68)

          隨筆檔案(80)

          文章分類(1)

          My Open Source Projects

          搜索

          積分與排名

          最新評論

          主站蜘蛛池模板: 奉化市| 平顶山市| 长寿区| 延长县| 即墨市| 个旧市| 湘西| 石林| 扬州市| 东辽县| 梨树县| 阳城县| 定西市| 施秉县| 伊川县| 阿拉善左旗| 富裕县| 措美县| 颍上县| 民勤县| 新昌县| 聂拉木县| 枞阳县| 景泰县| 宣城市| 中江县| 镇宁| 永定县| 衡阳县| 镇雄县| 达日县| 吉木萨尔县| 嘉荫县| 巢湖市| 旌德县| 稷山县| 和平区| 雷波县| 福安市| 时尚| 揭东县|