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 閱讀(841) 評論(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

          搜索

          積分與排名

          最新評論

          主站蜘蛛池模板: 琼海市| 都江堰市| 元阳县| 泽普县| 大化| 蕲春县| 盐山县| 洞头县| 嵩明县| 松原市| 鞍山市| 玉环县| 来宾市| 大渡口区| 凤山县| 桃园市| 巴林左旗| 牙克石市| 长子县| 潞城市| 大厂| 汨罗市| 和平县| 深州市| 江口县| 东阳市| 桦甸市| 玛曲县| 资源县| 博兴县| 洛川县| 中阳县| 班戈县| 舒兰市| 福建省| 原阳县| 八宿县| 措美县| 大荔县| 英吉沙县| 福州市|