gradle学習ノート(四)Groovy高級用法


前言:
前の2編の学習の中で、Groovyの文法の基礎、閉包に対して一定の理解がありました.Groovyライトコードを使用して言語をプロパティします.
Groovy JDKをよく見て、コードを少なくしてください.同様にGroovy DownLoadを降りると、ローカルファイルのdocumentを直接見ることができ、クエリーの速度が速くなります.
Groovyでのコード書き方:スクリプトとクラス
公式ドキュメント:scripts_versus_classes
Groovyでは,同じコードの書き方でスクリプトを用いてもクラスを用いてもよい.
//    
class Main {                                    
    static void main(String... args) {          
        println 'Groovy world!'                 
    }
}

//  。
println 'Groovy world!';
A script is always compiled into a class. The Groovy compiler will compile the class for you, with the body of the script copied into a run method. The generated script class will carry all methods into the script class, and assemble all script bodies into the run method.
Groovyコンパイラはこのスクリプトをclassファイルにコンパイルし、スクリプトの内容は生成クラスのmain()メソッドに格納され、メソッドはクラスに定義されます.
  • スクリプトごとにstatic main関数が生成されます.
  • スクリプトのすべてのコードはrun関数に格納されます.
  • スクリプトで関数が定義されている場合、関数はクラス
  • に定義されます.
  • 変数の役割ドメインは、変数を定義する方法によって異なります.公式ドキュメント:variablesを参照してください.多すぎてjsに似ています.
  • println "Groovy world"生成コード:
    import org.codehaus.groovy.runtime.InvokerHelper
    
    class Main extends Script {                     
        def run() {                                 
            println 'Groovy world!' //       run()    
        }
        static void main(String[] args) {  //  main()   
            InvokerHelper.runScript(Main, args)     
        }
    }
    GroovyはIOストリームを使用してファイルを読み書きする
    公式ドキュメント:Working with IO
    IOフロー関連クラス:
  • the java.io.File class : http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/File.html
  • the java.io.InputStream class: http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/InputStream.html
  • the java.io.OutputStream class: http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/OutputStream.html
  • the java.io.Reader class: http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/Reader.html
  • the java.io.Writer class: http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/Writer.html
  • the java.nio.file.Path class: http://docs.groovy-lang.org/latest/html/groovy-jdk/java/nio/file/Path.html

  • 1.ファイルを読む
    //      
    def file = new File("filePath");
    
    //    ,  API  ,    
    def aClosure = {
        line ->
        println line;
    };
    file.eachLine(aClosure);
    
    /*        :   API    ,public Object eachLine(Closure closure); eachLine        closure  ,              。    eachLine()  ,           。           。       ,      。 Groovy ,             ,      。 */
    
    //  
    file.eachLine{
        line ->
        println line;
    };
    
    //         
    file.withInputStream{
      is ->
      println is.getText(); //  API  ,     。      
    };
    特に、Groovyでは、関数の最後のパラメータが閉パッケージの場合、カッコを省略できます.さもないとgradleで見れば見るほど分からない.
    2.書類を書く
    //      
    def file = new File("srcfilePath");
    def newFile = new File("targetFilePath");
    
    newFile.withOutputStream{  os ->
      os << file.getBytes(); //     
    }
    Groovy操作XMLファイル
    公式ドキュメント:processing xml
    GroovyにはXMLファイルを操作する2つのツールクラスがあり、APIを表示し、ダウンロードしたapiファイルには次のようなものがあります.
  • groovy.util.XmlParser
  • groovy.util.XmlSlurper

  • 解析XMLという機能はAndroidで使われるはずです.manifest.xmlファイルを操作するからです.
    例では、両方の方法で解析できます.
    def text = ''' <some> <technology name="groovyProperty"> <name>GroovyNode</name> </technology> </some> '''
    
    //  XmlSlurper  
    def some = new XmlSlurper().parseText(text); //   
    assert some instanceof groovy.util.slurpersupport.GPathResult
    println some.technology.name;
    println some.technology[0].@name;
    
    
    //  XmlParser  ,    text()  
    def list = new XmlParser().parseText(text)
    assert list instanceof groovy.util.Node
    println list.technology.name.text() == 'GroovyNode'
    締めくくり:
    Groovy自体は、新しい言語のようにJVMベースの言語です.ここではgradleに関するGroovyの使用のみを学び,紹介した.その後gradleを学び始め、gradleを深く学ぶ過程で戻ってGroovyの理解と使用を深めると信じています.
    本文の関連コードはgithub ioLearnにあります.
    ***
    感謝:AndroidのGradleを深く理解する