groovy-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sun...@apache.org
Subject [groovy] 01/02: Add docs for improved loop
Date Wed, 15 Jan 2020 04:16:56 GMT
This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit e2dee13c0f9b53d0a5d8bacb65d5b02ec874bbce
Author: Daniel Sun <sunlan@apache.org>
AuthorDate: Wed Jan 15 11:20:59 2020 +0800

    Add docs for improved loop
    
    (cherry picked from commit c5b87e7ff473c372c1a48f415fe30bba4a81ed12)
---
 src/spec/doc/core-semantics.adoc | 57 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 55 insertions(+), 2 deletions(-)

diff --git a/src/spec/doc/core-semantics.adoc b/src/spec/doc/core-semantics.adoc
index 7c2d562..f6ac125 100644
--- a/src/spec/doc/core-semantics.adoc
+++ b/src/spec/doc/core-semantics.adoc
@@ -178,6 +178,44 @@ Groovy supports the standard Java / C for loop:
 include::{projectdir}/src/spec/test/SemanticsTest.groovy[tags=classic_for_loop_example,indent=0]
 ----
 
+===== Enhanced classic Java-style for loop
+
+The more elaborate form of Java's classic for loop with comma-separate expressions
+is now supported. Example:
+
+[source,groovy]
+--------------------------------------
+def facts = []
+def count = 5
+for (int fact = 1, i = 1; i <= count; i++, fact *= i) {
+    facts << fact
+}
+assert facts == [1, 2, 6, 24, 120]
+--------------------------------------
+
+===== Multi-assignment in combination with for loop
+
+Groovy has supported multi-assignment statements since Groovy 1.6:
+
+[source,groovy]
+--------------------------------------
+// multi-assignment with types
+def (String x, int y) = ['foo', 42]
+assert "$x $y" == 'foo 42'
+--------------------------------------
+
+These can now appear in for loops:
+
+[source,groovy]
+--------------------------------------
+// multi-assignment goes loopy
+def baNums = []
+for (def (String u, int v) = ['bar', 42]; v < 45; u++, v++) {
+    baNums << "$u $v"
+}
+assert baNums == ['bar 42', 'bas 43', 'bat 44']
+--------------------------------------
+
 ===== for in loop
 
 The for loop in Groovy is much simpler and works with any kind of array, collection, Map,
etc.
@@ -188,8 +226,7 @@ include::{projectdir}/src/spec/test/SemanticsTest.groovy[tags=groovy_for_loop_ex
 ----
 
 [NOTE]
-Groovy also supports the Java colon variation with colons: `for (char c : text) {}`,
-where the type of the variable is mandatory.
+Groovy also supports the Java colon variation with colons: `for (char c : text) {}`
 
 ===== while loop
 
@@ -200,6 +237,22 @@ Groovy supports the usual while {...} loops like Java:
 include::{projectdir}/src/spec/test/SemanticsTest.groovy[tags=while_loop_example,indent=0]
 ----
 
+===== do/while loop
+
+Java's class do/while loop is now supported. Example:
+
+
+[source,groovy]
+--------------------------------------
+// classic Java-style do..while loop
+def count = 5
+def fact = 1
+do {
+    fact *= count--
+} while(count > 1)
+assert fact == 120
+--------------------------------------
+
 ==== Exception handling
 
 Exception handling is the same as Java.


Mime
View raw message