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

          搜索

          積分與排名

          最新評論

          主站蜘蛛池模板: 南雄市| 康平县| 封开县| 舒兰市| 阿瓦提县| 五河县| 苍山县| 巴塘县| 澄迈县| 林芝县| 墨江| 梓潼县| 曲水县| 尼木县| 禹州市| 闸北区| 交城县| 乐东| 武陟县| 罗山县| 长岭县| 静宁县| 图们市| 宜兰市| 木兰县| 张掖市| 阿巴嘎旗| 十堰市| 大化| 翼城县| 永吉县| 祁门县| 沂源县| 改则县| 大化| 托克逊县| 博客| 疏勒县| 宜川县| 章丘市| 仙居县|