produced - edeleastar-portfolio.github.io · java? 10 1.conditionals 2.a function type (java 8...
TRANSCRIPT
![Page 1: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/1.jpg)
Produced by
Department of Computing, Maths & PhysicsWaterford Institute of Technologyhttp://www.wit.ie
http://elearning.wit.ie
ICT Skills Summer School
Eamonn de [email protected]
![Page 2: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/2.jpg)
Typing in Programming Languages
![Page 3: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/3.jpg)
Language Family Trees
![Page 4: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/4.jpg)
Family Tree (3)
4
![Page 5: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/5.jpg)
Smalltalk Cluster
5
![Page 6: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/6.jpg)
6
Ruby, Groovy, Java, Scala Cluster
![Page 7: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/7.jpg)
![Page 8: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/8.jpg)
Groovy
GoSwift
Objective-C
Scala
Javascript
Self
![Page 9: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/9.jpg)
Paul Grahams Wish List for a Programming Language http://www.paulgraham.com/diff.html
1.Conditionals
2.A function type
3.Recursion
4.Dynamic typing
5.Garbage collection
6.Programs composed of expressions
7.A symbol type
8.A notation for code using symbols and trees
9.The whole language there all the time
Lisp programming Language has all of these features (since mid 1960’s)
9
![Page 10: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/10.jpg)
Java?
10
1.Conditionals
2.A function type (Java 8 only)
3.Recursion
4.Dynamic typing
5.Garbage collection
6.Programs composed of expressions
7.A symbol type
8.A notation for code using symbols and trees
9.The whole language there all the time
![Page 11: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/11.jpg)
Groovy/Ruby/Python/Scala/Javascript (from Neal Ford)
11
1.Conditionals
2.A function type
3.Recursion
4.Dynamic typing (+ Type Inference)
5.Garbage collection
6.Programs composed of expressions
7.A symbol type
8.A notation for code using symbols and trees
9.The whole language there all the time
+ Metaprogramming
![Page 12: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/12.jpg)
Groovy/Ruby/Python/Scala/Javascript (from Neal Ford)
12
1.Conditionals
2.A function type
3.Recursion
4.Dynamic typing (+Type Inference)
5.Garbage collection
6.Programs composed of expressions
7.A symbol type
8.A notation for code using symbols and trees
9.The whole language there all the time
+ Metaprogramming
![Page 13: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/13.jpg)
Typing
13
![Page 14: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/14.jpg)
![Page 15: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/15.jpg)
http://blogs.agilefaqs.com/2011/07/11/dynamic-typing-is-not-weak-typing/
![Page 16: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/16.jpg)
Another Approach to Types?
• Type Inference : the compiler draws conclusions about the types of variables based on how programmers use those variables.
• Yields programs that have some of the conciseness of Dynamically Typed Languages
• But - decision made at compile time, not at run time
• More information for static analysis - refactoring tools, complexity analysis. bug checking etc...
• Haskell, Scala, Swift
16
object InferenceTest1 extends Application { val x = 1 + 2 * 3 // the type of x is Int val y = x.toString() // the type of y is String def succ(x: Int) = x + 1 // method succ returns Int values}
![Page 17: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/17.jpg)
‘Pragmatic’ Languages
17
•Python
• Java
•Swift•C
•Ruby
•C#
•Go
•C++•Objective-C
•Scala
•PHP• Javascript
•Groovy•Smalltalk
![Page 18: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/18.jpg)
Typing Spectrum
18
•Python
• Java
•Swift•C
•Ruby
•C#
•Go
•C++•Objective-C
•Scala
•PHP• Javascript
•Groovy
Strong WeakStatic
Dynamic•Smalltalk
Inferred
![Page 19: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/19.jpg)
Java Example (from Jim Weirich)
• Java algorithm to filter a list of strings
• Only printing those shorter than 3 (in this test case).
19
import java.util.ArrayList;import java.util.List;
class Erase{ public static void main(String[] args) { List<String> names = new ArrayList<String>(); names.add("Ted"); names.add("Fred"); names.add("Jed"); names.add("Ned"); System.out.println(names); Erase e = new Erase(); List<String> short_names = e.filterLongerThan(names, 3); System.out.println(short_names.size()); for (String s : short_names) { System.out.println(s); } }
public List<String> filterLongerThan(List<String> strings, int length) { List<String> result = new ArrayList<String>(); for (String s : strings) { if (s.length() < length + 1) { result.add(s); } } return result; }}
![Page 20: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/20.jpg)
Groovy 1
20
• Also a valid Groovy program...
import java.util.ArrayList;import java.util.List;
class Erase{ public static void main(String[] args) { List<String> names = new ArrayList<String>(); names.add("Ted"); names.add("Fred"); names.add("Jed"); names.add("Ned"); System.out.println(names); Erase e = new Erase(); List<String> short_names = e.filterLongerThan(names, 3); System.out.println(short_names.size()); for (String s : short_names) { System.out.println(s); } }
public List<String> filterLongerThan(List<String> strings, int length) { List<String> result = new ArrayList<String>(); for (String s : strings) { if (s.length() < length + 1) { result.add(s); } } return result; }}
![Page 21: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/21.jpg)
Groovy 1
21
• Do we need generics?
• What about semicolons...
• Should standard libraries be imported?
import java.util.ArrayList;import java.util.List;
class Erase{ public static void main(String[] args) { List<String> names = new ArrayList<String>(); names.add("Ted"); names.add("Fred"); names.add("Jed"); names.add("Ned"); System.out.println(names); Erase e = new Erase(); List<String> short_names = e.filterLongerThan(names, 3); System.out.println(short_names.size()); for (String s : short_names) { System.out.println(s); } }
public List<String> filterLongerThan(List<String> strings, int length) { List<String> result = new ArrayList<String>(); for (String s : strings) { if (s.length() < length + 1) { result.add(s); } } return result; }}
![Page 22: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/22.jpg)
Groovy 2
22
class Erase{ public static void main(String[] args) { List names = new ArrayList() names.add("Ted") names.add("Fred") names.add("Jed") names.add("Ned") System.out.println(names) Erase e = new Erase() List short_names = e.filterLongerThan(names, 3) System.out.println(short_names.size()) for (String s : short_names) { System.out.println(s) } }
public List filterLongerThan(Liststrings, length) { List result = new ArrayList(); for (String s : strings) { if (s.length() < length + 1) { result.add(s) } } return result }}
![Page 23: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/23.jpg)
Groovy 2
23
class Erase{ public static void main(String[] args) { List names = new ArrayList() names.add("Ted") names.add("Fred") names.add("Jed") names.add("Ned") System.out.println(names) Erase e = new Erase() List short_names = e.filterLongerThan(names, 3) System.out.println(short_names.size()) for (String s : short_names) { System.out.println(s) } }
public List filterLongerThan(Liststrings, length) { List result = new ArrayList(); for (String s : strings) { if (s.length() < length + 1) { result.add(s) } } return result }}
• Do we need the static types?
• Must we always have a main method and class definition?
• Consistency (size or length)?
![Page 24: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/24.jpg)
Groovy 3
24
def filterLongerThan(strings, length){ List result = new ArrayList(); for (String s : strings) { if (s.length() < length + 1) { result.add(s) } } return result}
List names = new ArrayList()names.add("Ted")names.add("Fred")names.add("Jed")names.add("Ned")System.out.println(names)List short_names = filterLongerThan(names, 3)System.out.println(short_names.size())for (String s : short_names){ System.out.println(s)}
![Page 25: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/25.jpg)
Groovy 3
• Should we have a special notation for lists?
• And special facilities for list processing?
25
def filterLongerThan(strings, length){ List result = new ArrayList(); for (String s : strings) { if (s.length() < length + 1) { result.add(s) } } return result}
List names = new ArrayList()names.add("Ted")names.add("Fred")names.add("Jed")names.add("Ned")System.out.println(names)List short_names = filterLongerThan(names, 3)System.out.println(short_names.size())for (String s : short_names){ System.out.println(s)}
![Page 26: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/26.jpg)
Groovy 4
26
def filterLongerThan(strings, length){ return strings.findAll {it.size() <= length}}
names = ["Ted", "Fred", "Jed", "Ned"]System.out.println(names)List short_names = filterLongerThan(names, 3)System.out.println(short_names.size())short_names.each {System.out.println(it)}
![Page 27: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/27.jpg)
Groovy 4
• Method needed any longer?
• Is there an easier way to use common methods (e.g. println)?
• Are brackets always needed?
27
def filterLongerThan(strings, length){ return strings.findAll {it.size() <= length}}
names = ["Ted", "Fred", "Jed", "Ned"]System.out.println(names)List short_names = filterLongerThan(names, 3)System.out.println(short_names.size())short_names.each {System.out.println(it)}
![Page 28: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/28.jpg)
Groovy 5
28
names = ["Ted", "Fred", "Jed", "Ned"]println namesshort_names = names.findAll{it.size() <= 3}println short_names.size()short_names.each {println it}
![Page 29: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/29.jpg)
Java vs Groovy?
29
import java.util.ArrayList;import java.util.List;
class Erase{ public static void main(String[] args) { List<String> names = new ArrayList<String>(); names.add("Ted"); names.add("Fred"); names.add("Jed"); names.add("Ned"); System.out.println(names); Erase e = new Erase(); List<String> short_names = e.filterLongerThan(names, 3); System.out.println(short_names.size()); for (String s : short_names) { System.out.println(s); } }
public List<String> filterLongerThan(List<String> strings, int length) { List<String> result = new ArrayList<String>(); for (String s : strings) { if (s.length() < length + 1) { result.add(s); } } return result; }}
names = ["Ted", "Fred", "Jed", "Ned"]println namesshort_names = names.findAll{it.size() <= 3}println short_names.size()short_names.each {println it}
![Page 30: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/30.jpg)
Java Example (again)
30
import java.util.ArrayList;import java.util.List;
class Erase{ public static void main(String[] args) { List<String> names = new ArrayList<String>(); names.add("Ted"); names.add("Fred"); names.add("Jed"); names.add("Ned"); System.out.println(names); Erase e = new Erase(); List<String> short_names = e.filterLongerThan(names, 3); System.out.println(short_names.size()); for (String s : short_names) { System.out.println(s); } }
public List<String> filterLongerThan(List<String> strings, int length) { List<String> result = new ArrayList<String>(); for (String s : strings) { if (s.length() < length + 1) { result.add(s); } } return result; }}
![Page 31: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/31.jpg)
Swift
31
import Foundation
class Erase { func main() { var names:String[] = String[]() names.append ("ted") names.append ("fred") names.append ("jed") names.append ("ned") println(names) var short_names:String[] = filterLongerThan(names, length:3) for name:String in short_names { println (name) } } func filterLongerThan (strings : String[], length : Int) -> String[] { var result:String[] = String[]() for s:String in strings { if countElements(s) < length + 1 { result.append(s) } } return result } }
var erase:Erase = Erase() erase.main()
![Page 32: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/32.jpg)
Swift
• Type Inference
32
import Foundation
class Erase { func main() { var names = String[]() names.append ("ted") names.append ("fred") names.append ("jed") names.append ("ned") println(names) var short_names = filterLongerThan(names, length:3) for name in short_names { println (name) } } func filterLongerThan (strings : String[], length : Int) -> String[] { var result = String[]() for s in strings { if countElements(s) < length + 1 { result.append(s) } } return result } }
var erase = Erase() erase.main()
![Page 33: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/33.jpg)
Swift
• Literals
33
import Foundation
class Erase { func main() { var names = ["ted", "fred", "jed", "ned"] var short_names = filterLongerThan(names, length:3) for name in short_names { println (name) } } func filterLongerThan (strings : String[], length : Int) -> String[] { var result = String[]() for s in strings { if countElements(s) < length + 1 { result.append(s) } } return result } }
var erase = Erase() erase.main()
![Page 34: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/34.jpg)
Swift
• Closures
34
import Foundation
class Erase { func main() { var names = ["ted", "fred", "jed", "ned"] var short_names = names.filter { countElements($0) < 4 } for name in short_names { println (name) } } }
var erase = Erase() erase.main()
![Page 35: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/35.jpg)
Swift
• Final version
35
import Foundation
var names = ["ted", "fred", "jed", "ned"] println(names) var short_names = names.filter { countElements($0) < 4 } println(short_names)
![Page 36: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/36.jpg)
36
var names = ["ted", "fred", "jed", "ned"] println(names) var short_names = names.filter { countElements($0) < 4 } println(short_names)
names = ["Ted", "Fred", "Jed", "Ned"]println namesshort_names = names.findAll{it.size() <= 3}short_names.each {println it}
import java.util.ArrayList;import java.util.List;
class Erase{ public static void main(String[] args) { List<String> names = new ArrayList<String>(); names.add("Ted"); names.add("Fred"); names.add("Jed"); names.add("Ned"); System.out.println(names); Erase e = new Erase(); List<String> short_names = e.filterLongerThan(names, 3); System.out.println(short_names.size()); for (String s : short_names) { System.out.println(s); } }
public List<String> filterLongerThan(List<String> strings, int length) { List<String> result = new ArrayList<String>(); for (String s : strings) { if (s.length() < length + 1) { result.add(s); } } return result; }}
![Page 37: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/37.jpg)
Java Example (again)
37
import java.util.ArrayList;import java.util.List;
class Erase{ public static void main(String[] args) { List<String> names = new ArrayList<String>(); names.add("Ted"); names.add("Fred"); names.add("Jed"); names.add("Ned"); System.out.println(names); Erase e = new Erase(); List<String> short_names = e.filterLongerThan(names, 3); System.out.println(short_names.size()); for (String s : short_names) { System.out.println(s); } }
public List<String> filterLongerThan(List<String> strings, int length) { List<String> result = new ArrayList<String>(); for (String s : strings) { if (s.length() < length + 1) { result.add(s); } } return result; }}
![Page 38: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/38.jpg)
Javascript
38
'use strict'; class Erase { static main () { const names = []; names.push('Ted'); names.push('Fred'); names.push('Jed'); names.push('Ned'); console.log(names); const e = new Erase(); const short_names = e.filterLongerThan(names, 3); console.log(short_names.length); for (const s of short_names) { console.log(s); } } filterLongerThan(strings, length) { const result = []; for (var s of strings) { if (s.length < length + 1) { result.push(s); } } return result; }}; Erase.main();
![Page 39: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/39.jpg)
Javascript
• Array Literals
39
'use strict'; const names = ['Ted', 'Fred', 'Jed', 'Ned'];console.log(names); const short_names = filterLongerThan(names, 3);console.log(short_names.length);console.log (short_names);function filterLongerThan(strings, length){ const result = []; for (var s of strings) { if (s.length < length + 1) { result.push(s); } } return result; }
![Page 40: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/40.jpg)
Javascript
• Lambdas
40
'use strict'; const names = ['Ted', 'Fred', 'Jed', 'Ned'];console.log(names); const short_names = filterLongerThan(names, 3);console.log(short_names.length);console.log (short_names);function filterLongerThan(strings, length){ let result = []; result = strings.filter (function (s) { return s.length < length + 1; }); return result; }
![Page 41: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/41.jpg)
Javascript
• Arrow Functions
41
'use strict'; const names = ['Ted', 'Fred', 'Jed', 'Ned'];console.log(names); const short_names = filterLongerThan(names, 3);console.log(short_names.length);console.log (short_names);function filterLongerThan(strings, length){ let result = []; result = strings.filter (s => { return s.length < length + 1; }); return result; }
![Page 42: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/42.jpg)
Javascript
• Final Version
42
'use strict'; const names = ['Ted', 'Fred', 'Jed', 'Ned'];console.log(names); const short_names = strings.filter (s => { return s.length < 4; });console.log(short_names.length);console.log (short_names);
![Page 43: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/43.jpg)
43
var names = ["ted", "fred", "jed", "ned"] println(names) var short_names = names.filter { countElements($0) < 4 } println(short_names)
names = ["Ted", "Fred", "Jed", "Ned"]println namesshort_names = names.findAll{it.size() <= 3}short_names.each {println it}
import java.util.ArrayList;import java.util.List;
class Erase{ public static void main(String[] args) { List<String> names = new ArrayList<String>(); names.add("Ted"); names.add("Fred"); names.add("Jed"); names.add("Ned"); System.out.println(names); Erase e = new Erase(); List<String> short_names = e.filterLongerThan(names, 3); System.out.println(short_names.size()); for (String s : short_names) { System.out.println(s); } }
public List<String> filterLongerThan(List<String> strings, int length) { List<String> result = new ArrayList<String>(); for (String s : strings) { if (s.length() < length + 1) { result.add(s); } } return result; }}
'use strict'; const names = ['Ted', 'Fred', 'Jed', 'Ned'];console.log(names); const short_names = strings.filter (s => { return s.length < 4; });console.log(short_names.length);console.log (short_names);
Java
Groovy
Swift
Javascript
![Page 44: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/44.jpg)
Another ‘Shopping List’
44
Object-literal syntax for arrays and hashesArray slicing and other intelligent collection operatorsPerl 5 compatible regular expression literalsDestructuring bind (e.g. x, y = returnTwoValues())Function literals and first-class, non-broken closuresStandard OOP with classes, instances, interfaces, polymorphism, etc.Visibility quantifiers (public/private/protected)Iterators and generatorsList comprehensionsNamespaces and packagesCross-platform GUIOperator overloadingKeyword and rest parametersFirst-class parser and AST supportType expressions and statically checkable semanticsSolid string and collection librariesStrings and streams act like collections
http://steve-yegge.blogspot.com.au/2007/02/next-big-language.html
![Page 45: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/45.jpg)
Java
45
Object-literal syntax for arrays and hashesArray slicing and other intelligent collection operatorsPerl 5 compatible regular expression literalsDestructuring bind (e.g. x, y = returnTwoValues())Function literals and first-class, non-broken closuresStandard OOP with classes, instances, interfaces, polymorphism, etc.
yVisibility quantifiers (public/private/protected) yIterators and generators yList comprehensionsNamespaces and packages yCross-platform GUI yOperator overloadingKeyword and rest parametersFirst-class parser and AST supportType expressions and statically checkable semantics ySolid string and collection libraries yStrings and streams act like collections y
![Page 46: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/46.jpg)
Google GO
46
Object-literal syntax for arrays and hashes yArray slicing and other intelligent collection operators yPerl 5 compatible regular expression literalsDestructuring bind (e.g. x, y = returnTwoValues()) yFunction literals and first-class, non-broken closures yStandard OOP with classes, instances, interfaces, polymorphism, etc.Visibility quantifiers (public/private/protected) yIterators and generatorsList comprehensionsNamespaces and packages yCross-platform GUIOperator overloadingKeyword and rest parameters yFirst-class parser and AST support yType expressions and statically checkable semantics ySolid string and collection libraries yStrings and streams act like collections
![Page 47: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/47.jpg)
Python
47
Object-literal syntax for arrays and hashes yArray slicing and other intelligent collection operators yPerl 5 compatible regular expression literals yDestructuring bind (e.g. x, y = returnTwoValues()) yFunction literals and first-class, non-broken closures yStandard OOP with classes, instances, interfaces, polymorphism, etc.
yVisibility quantifiers (public/private/protected)Iterators and generators y
yList comprehensions yNamespaces and packages yCross-platform GUIOperator overloadingKeyword and rest parameters yFirst-class parser and AST support yType expressions and statically checkable semanticsSolid string and collection libraries yStrings and streams act like collections y
![Page 48: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/48.jpg)
Javascript (ES6/7 only)
48
Object-literal syntax for arrays and hashes yArray slicing and other intelligent collection operators yPerl 5 compatible regular expression literals yDestructuring bind (e.g. x, y = returnTwoValues()) yFunction literals and first-class, non-broken closures yStandard OOP with classes, instances, interfaces, polymorphism, etc.
yVisibility quantifiers (public/private/protected) ?Iterators and generators yList comprehensions yNamespaces and packages yCross-platform GUI yOperator overloadingKeyword and rest parametersFirst-class parser and AST supportType expressions and statically checkable semantics ySolid string and collection libraries yStrings and streams act like collections y
![Page 49: Produced - edeleastar-portfolio.github.io · Java? 10 1.Conditionals 2.A function type (Java 8 only) 3.Recursion 4.Dynamic typing 5.Garbage collection 6.Programs composed of expressions](https://reader035.vdocuments.net/reader035/viewer/2022070822/5f27fab61f1de47658096dad/html5/thumbnails/49.jpg)
Except where otherwise noted, this content is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.
For more information, please see http://creativecommons.org/licenses/by-nc/3.0/