Presentation is loading. Please wait.

Presentation is loading. Please wait.

Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.

Similar presentations


Presentation on theme: "Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008."— Presentation transcript:

1 Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008

2 These three languages have a lot in common:  Dynamic typing -- variables have type, but the type can change during the course of execution  Implicit typing -- if it walks like a duck, quacks like a duck, and swims like a duck ---> it’s a duck.  Interpreted -- Source code is not compiled then executed. Instead, the source is executed by the interpreter  Released ‘92 - ‘95  Dynamic typing -- variables have type, but the type can change during the course of execution  Implicit typing -- if it walks like a duck, quacks like a duck, and swims like a duck ---> it’s a duck.  Interpreted -- Source code is not compiled then executed. Instead, the source is executed by the interpreter  Released ‘92 - ‘95

3 They’re Really Different  Extent of Object Orientation  JavaScript is just barely OO  Ruby is practically pure OO  Python has extensive set of primitive sequential structures. JavaScript has String and Array  JavaScript is intended to run in web pages and is integrated with the DOM  Python and Ruby have lots of support for Web apps beyond displaying pages.  Extent of Object Orientation  JavaScript is just barely OO  Ruby is practically pure OO  Python has extensive set of primitive sequential structures. JavaScript has String and Array  JavaScript is intended to run in web pages and is integrated with the DOM  Python and Ruby have lots of support for Web apps beyond displaying pages.

4 Origins  ruby released '95, author Yukihiro Matsumoto, open source  python released '91, author Guido van Rossum, open source  javascript released with Netscape ‘95. Originally developed by Brendan Eich (netscape) under the name ‘mocha’  ruby released '95, author Yukihiro Matsumoto, open source  python released '91, author Guido van Rossum, open source  javascript released with Netscape ‘95. Originally developed by Brendan Eich (netscape) under the name ‘mocha’

5 Questions  Suitable for CS education?  What are they good for?  Coolness factor?  Suitable for CS education?  What are they good for?  Coolness factor?

6 What do I know?  Not much. I haven’t done serious development in any of these languages -- only toy stuff.  Plenty of experience learning a little bit about a lot of languages: PL/1, Algol, Pascal, Fortran, basic, Lisp, C, C++, Java, Ada, Prolog, APL, Javascript, various assemblers, scheme (squeak).  Not much. I haven’t done serious development in any of these languages -- only toy stuff.  Plenty of experience learning a little bit about a lot of languages: PL/1, Algol, Pascal, Fortran, basic, Lisp, C, C++, Java, Ada, Prolog, APL, Javascript, various assemblers, scheme (squeak).

7 Demos  JavaScript using browser :-(  Python using IDLE or shell ( python file )  Ruby using irb or shell ( ruby file.rb )  JavaScript using browser :-(  Python using IDLE or shell ( python file )  Ruby using irb or shell ( ruby file.rb )

8 White Space  Javascript does not care about whitespace. EXCEPT! Multiple statements on a single line must be separated by ‘;’  Python uses white space to indicate nesting level.  Ruby allows you to delete certain keywords depending on whitespace.  Javascript does not care about whitespace. EXCEPT! Multiple statements on a single line must be separated by ‘;’  Python uses white space to indicate nesting level.  Ruby allows you to delete certain keywords depending on whitespace.

9 Line termination  Javascript ‘;’ is optional except when multiple statement per line (but everyone uses it)  Python ‘;’ is optional. No one uses it  Ruby ‘;’ is optional. No one uses it.  Javascript ‘;’ is optional except when multiple statement per line (but everyone uses it)  Python ‘;’ is optional. No one uses it  Ruby ‘;’ is optional. No one uses it.

10 Numbers  Javascript number is a fundamental type (along with String, boolean and Object)  Python number is a fundamental type, along with boolean, and various list types  Ruby number is an object: 3.zero? ==> returns false 3.kind_of? Integer==> returns true 3.class ==> return Fixnum 3.to_f ==> returns 3.0  Javascript number is a fundamental type (along with String, boolean and Object)  Python number is a fundamental type, along with boolean, and various list types  Ruby number is an object: 3.zero? ==> returns false 3.kind_of? Integer==> returns true 3.class ==> return Fixnum 3.to_f ==> returns 3.0

11 Variable Names  JavaScript -- the usual  Python -- the usual  Ruby --  Local variables start with lower case or _  Instance variables start  Class variables start with  Globals start with $  JavaScript -- the usual  Python -- the usual  Ruby --  Local variables start with lower case or _  Instance variables start  Class variables start with  Globals start with $

12 Simple Python Program First program: first.py s1 = raw_input(“enter integer: “) s2 = raw_input(“enter float: “) s3 = s1 + s2 print “s1+s2 “ + s3 + “\n” n1 = int(s1) n2 = float(s2) n3 = n1+n2 print “n1+n2: “ + n3 Output enter integer: 3 enter float: s1+s n1+n Run this with Python and Idle import first then reload(first) on subsequent changes

13 Another simple Python program Second program: second.py x = 10 y = ‘3’ print “type(x): “, type(x) print “type(y): “, type(y) y = int(y) print “type(y): “, type(y) dir() Output >>> import second type(x): type(y): [__builtins__’, ‘__doc__’, ‘__name’__’ ‘first’, ‘n1’, ‘n2’, ‘sys’, ‘x’, ‘y’ ] Notice use of type(), str() and dir() type(varX): returns type of varX str(varY): any varY has a “nice” string representation dir(): lists all known names

14 Parallel Assignment Python, Ruby and JavaScript 1.7 have parallel assignments. Here is a python example (idle) Python, Ruby and JavaScript 1.7 have parallel assignments. Here is a python example (idle) >>> t = (‘a’, ‘b’, ‘c’) >>> type(t) >>> t[0] ‘a’ >>> t[1] ‘b’ >>> type ( (x, y, z) ) >>> (x, y, z) = t >>> x ‘a’ >>> y ‘b’

15 Method Names  JavaScript -- the usual  Python -- the usual  Ruby -- has a convention that’s pretty neat (you’ll see an example later)  Ending in ?, returns true or false  Ending in !, “in place” modifier of the object itself  Ending in =, a ‘setter’ of an instance variable  JavaScript -- the usual  Python -- the usual  Ruby -- has a convention that’s pretty neat (you’ll see an example later)  Ending in ?, returns true or false  Ending in !, “in place” modifier of the object itself  Ending in =, a ‘setter’ of an instance variable

16 Arrays  Arrays can change size dynamically.  Elements can be of different types  Can do the standard indexing and slicing operations.  Javascript example (next slide)  All three let you use negative indexes to offset from the end  Arrays can change size dynamically.  Elements can be of different types  Can do the standard indexing and slicing operations.  Javascript example (next slide)  All three let you use negative indexes to offset from the end

17 Javascript - simple array // see array.html var arr1 = [2, 4, 6, 8, "who", "do", 'we', "appreciate", "?" ]; document.write(" Outputting initialized arr1 “ + “ "); document.write(arr1); document.write(" I'm slicing the arr1 “ + “from index 2 to 3nd from end "); arr2 = arr1.slice(2, -2); document.write(arr2); document.write(" I'm adding elements to arr1 “ + at index 20, 21 "); arr1[20] = [1, 2, 3]; arr1[21] = "ta"; document.write(arr1); // see array.html var arr1 = [2, 4, 6, 8, "who", "do", 'we', "appreciate", "?" ]; document.write(" Outputting initialized arr1 “ + “ "); document.write(arr1); document.write(" I'm slicing the arr1 “ + “from index 2 to 3nd from end "); arr2 = arr1.slice(2, -2); document.write(arr2); document.write(" I'm adding elements to arr1 “ + at index 20, 21 "); arr1[20] = [1, 2, 3]; arr1[21] = "ta"; document.write(arr1);

18 Dictionary  JavaScript Arrays can be Associate Arrays (like property lists) - see assoc- array.html arr1["dog"] = "mammal"; arr1["parrot"] = "bird"; arr1["tarantula"] = "arachnid"; for (var i in arr1) document.write(arr1[i] + " ");  Python and Ruby use a different data structure  Python: next slide  JavaScript Arrays can be Associate Arrays (like property lists) - see assoc- array.html arr1["dog"] = "mammal"; arr1["parrot"] = "bird"; arr1["tarantula"] = "arachnid"; for (var i in arr1) document.write(arr1[i] + " ");  Python and Ruby use a different data structure  Python: next slide

19 Dictionary  Python example (from idle) >>> dict = {"dog": "mammal", "cat": "mammal", (10, 'a'): 42} >>> dict {(10, 'a'): 42, 'dog': 'mammal', 'cat': 'mammal'} >>> str(dict) "{(10, 'a'): 42, 'dog': 'mammal', 'cat': 'mammal'}" >>> dict.keys() [(10, 'a'), 'dog', 'cat'] >>> dict.values() [42, 'mammal', 'mammal'] >>> dict[(10, "a")] 42  Python example (from idle) >>> dict = {"dog": "mammal", "cat": "mammal", (10, 'a'): 42} >>> dict {(10, 'a'): 42, 'dog': 'mammal', 'cat': 'mammal'} >>> str(dict) "{(10, 'a'): 42, 'dog': 'mammal', 'cat': 'mammal'}" >>> dict.keys() [(10, 'a'), 'dog', 'cat'] >>> dict.values() [42, 'mammal', 'mammal'] >>> dict[(10, "a")] 42

20 Composite types Summary for Python  String, immutable, a sequence of character: “this is a string”  String delimiters are: ‘ ‘, “ “, “”” “””  List, mutable, a sequence of anything: ( 3, 4, “abc”)  Array, similar to Java’s ArrayList:  [‘this’, 1, -4.2, [4, “abc”] ]  Can insert and delete to a list. Many methods available:  y = [].append(“twenty”) #y has value [‘twenty’]  Tuple, an immutable set of items  (“smith”, “jane”, 24000, “ ”)  Dictionary, a property list or hash table. The key is immutable  {(“smith”, “jane”, 24000, “ ”): 4, “vehicle”: “truck”, age: 19 }  String, immutable, a sequence of character: “this is a string”  String delimiters are: ‘ ‘, “ “, “”” “””  List, mutable, a sequence of anything: ( 3, 4, “abc”)  Array, similar to Java’s ArrayList:  [‘this’, 1, -4.2, [4, “abc”] ]  Can insert and delete to a list. Many methods available:  y = [].append(“twenty”) #y has value [‘twenty’]  Tuple, an immutable set of items  (“smith”, “jane”, 24000, “ ”)  Dictionary, a property list or hash table. The key is immutable  {(“smith”, “jane”, 24000, “ ”): 4, “vehicle”: “truck”, age: 19 } Each type has many useful methods; indexing and slicing are essentially the same for all types

21 Defining Methods  Javascript and Python have an explicit return statement, that may be ignored by the caller  Ruby always returns the last value computed (may be ignored by caller)  All allow for variable argument lists  Python allows for naming parameters  Javascript and Python have an explicit return statement, that may be ignored by the caller  Ruby always returns the last value computed (may be ignored by caller)  All allow for variable argument lists  Python allows for naming parameters

22 Closures  All three allow for some kind of closure (an unnamed function)  Ruby example coming up later in looping  All three allow for some kind of closure (an unnamed function)  Ruby example coming up later in looping

23 Control Structures  The usual suspects with differences in syntax: IF, Looping (while, for, etc), Switch, break, continue.  Ruby is a little richer with unless (opposite of if) and until (opposite of while).  The usual suspects with differences in syntax: IF, Looping (while, for, etc), Switch, break, continue.  Ruby is a little richer with unless (opposite of if) and until (opposite of while).

24 Event handling All offer event handling with variations in syntax

25 Ruby expressiveness: looping examples (1) # fitz56.rb #initialize array values = [1, 2, "buckle", "my", "shoe"] puts "\n-->print array using while" i = 0 while i < values.size do # 'do' is optional here print values[i], " " i += 1 end puts "\n\n--> using 'do-while'" i=0 begin print values[i], " " i += 1 end while i < values.size

26 Ruby expressiveness: looping examples (2) puts "\n\n-->print array using nameless function" values.each do |e| print e, " " end puts "\n\n-->print array using nameless function with {}" values.each { |e| print e, " " } puts "\n\n-->print array using for" for i in 0..values.size-1 do print values[i], " " end puts "\n\n-->using Integer's upto method" 0.upto(values.size-1) { |i| print values[i], " " }

27 Creating classes - Many similarities  Class definitions are open, so instance variables and members can be added later, methods can be overridden by adding the new definition.  Single inheritance. Object is the base class.  Class definitions are open, so instance variables and members can be added later, methods can be overridden by adding the new definition.  Single inheritance. Object is the base class.

28 JavaScript class example: defining // see objects.html function Horse (name) { this.name = name; this.getName = getHorseName; this.setName = setHorseName; } function getHorseName () { return this.name; } function setHorseName(name) { this.name = name } // see objects.html function Horse (name) { this.name = name; this.getName = getHorseName; this.setName = setHorseName; } function getHorseName () { return this.name; } function setHorseName(name) { this.name = name }

29 JavaScript class example: modifying Horse.prototype.gait = "walk"; function getHorseGait () { return this.gait; } function setHorseGait (gait) { this.gait = gait; } Horse.prototype.setGait = setHorseGait; Horse.prototype.getGait = getHorseGait; Horse.prototype.gait = "walk"; function getHorseGait () { return this.gait; } function setHorseGait (gait) { this.gait = gait; } Horse.prototype.setGait = setHorseGait; Horse.prototype.getGait = getHorseGait;

30 Ruby class example: Defining # fitz128.rb class Horse def initialize (name)# execute AFTER = name# instance variable end def name# end# last value is returned def name= (name)# = name end end # fitz128.rb class Horse def initialize (name)# execute AFTER = name# instance variable end def name# end# last value is returned def name= (name)# = name end end

31 Ruby class example: modifying #fitz128b.rb # repeated code deleted class Horse def initialize ( name = 'pokey', age = = = age end def say_whoa puts "Whoa there " end #fitz128b.rb # repeated code deleted class Horse def initialize ( name = 'pokey', age = = = age end def say_whoa puts "Whoa there " end

32 Python class example: defining Class Doggie: size = 25 friendly = True def sayArf(self): print(“arf”) fifi = Doggie() fifi.size fifi.sayArf() Class Doggie: size = 25 friendly = True def sayArf(self): print(“arf”) fifi = Doggie() fifi.size fifi.sayArf() Run in IDLE

33 Ruby: metaprogramming to make class definition easier To irb class Horse attr :gait, true attr :name, true def say_whoa puts “Whoa there “ end Horse.instance_methods - Object.instance_methods h1 = Horse.new h1.name= “pokey” h1.gait = “trot” p h1

34 Python code Example 1: defining a function >>> def fib(n): “”” Calculate fibonacci Number of parameter “”” if n < 1: return 1 else: return n * fib(n-1) >>> fib >>> type(fib) >>> help(fib) help on function fib in module __main__: fib(n) calculate fibonacci number of parameter >>> fib(5) 120

35 Python code Example 2: A couple stacks >>> p = [] >>> type(p) >>> p.append(1) >>> p.append(2) >>> p.append(“buckle”) >>> p.append(“my”) >>> p.append(5) >>> p {1, 2, ‘buckle’, ‘my’, 5] >>> q = [] >>> while p: q.append(p.pop()) >>> p [] >>> q [5, ‘my’, ‘buckle’, 2, 1]

36 Python list mapping >>> li = range(10) >>> li [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> li2 = [i*2 for i in li] >>> li2 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] >>> li [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

37 Documentation  JavaScript ?  Python  help(...) returns the docstring of the object  Ruby  ri, shell command  JavaScript ?  Python  help(...) returns the docstring of the object  Ruby  ri, shell command

38 At the end of the day  Everyone should make a language  Many similarities between JavaScript, Python and Ruby:  dynamic typing  OO  Single inheritance  Flexible list lengths  Interesting (useful) data types: list, hash, tuple,…  Lambdas, closures  Modifiable class definitions  Everyone should make a language  Many similarities between JavaScript, Python and Ruby:  dynamic typing  OO  Single inheritance  Flexible list lengths  Interesting (useful) data types: list, hash, tuple,…  Lambdas, closures  Modifiable class definitions

39 Which is better? Javascript?  Javascript feels kind of klugey -- especially in its OO support, but also in some other things (e.g. the same variable can hold an indexed array and a dictionary)  Javascript is quite accessible, especially to ‘old- school’ computer profs who learned to program in a procedural language.  The close connection with client-side programming has affected the typical development environment in unpleasant ways (because, mostly, of non-standard compliant browsers).  Debugging support is not good.  Still the go-to language for dynamic web pages  There are lots of Javascript libraries out there. You have to find what you want and include it with  Javascript feels kind of klugey -- especially in its OO support, but also in some other things (e.g. the same variable can hold an indexed array and a dictionary)  Javascript is quite accessible, especially to ‘old- school’ computer profs who learned to program in a procedural language.  The close connection with client-side programming has affected the typical development environment in unpleasant ways (because, mostly, of non-standard compliant browsers).  Debugging support is not good.  Still the go-to language for dynamic web pages  There are lots of Javascript libraries out there. You have to find what you want and include it with

40 Which is better? Python?  Easy learning curve for the initial bit.  Great for quick development  Very readable code, thanks to the indent rule and other syntax rules  OO is pretty good -- cleaner than JavaScript’s  Lovely set of data types  My opinion: I found the syntax very natural  Code is not too terse: good for noobs to read & write.  Import is easy  Very easy to get information from interpreter  Really nice debugging support, both in terms of debugger and in terms of online help  I had an easier time moving between the IDE and the shell with Python than with Ruby  Terrific community and support.  Easy learning curve for the initial bit.  Great for quick development  Very readable code, thanks to the indent rule and other syntax rules  OO is pretty good -- cleaner than JavaScript’s  Lovely set of data types  My opinion: I found the syntax very natural  Code is not too terse: good for noobs to read & write.  Import is easy  Very easy to get information from interpreter  Really nice debugging support, both in terms of debugger and in terms of online help  I had an easier time moving between the IDE and the shell with Python than with Ruby  Terrific community and support.

41

42 Which is better? Ruby?  OMG! If I were a CS senior, this is the language I would code in. It is a programmer’s language. Like perl (with a scheme-feel for OO, and some lisp thrown in) but with a lot more stuff and slightly more disciplined.  Very pristine OO framework.  Very easy to get information from interpreter -- most powerful support for reflection.  As a teacher, no way! Other people’s code is already hard enough to read.  Development environment is not as strong as Python’s.  An enthusiastic and growing fan-base.  POLS, principle of least surprise (the language should minimize confusion for experienced users).  Ruby-on-Rails is reputed to be a “killer app”  OMG! If I were a CS senior, this is the language I would code in. It is a programmer’s language. Like perl (with a scheme-feel for OO, and some lisp thrown in) but with a lot more stuff and slightly more disciplined.  Very pristine OO framework.  Very easy to get information from interpreter -- most powerful support for reflection.  As a teacher, no way! Other people’s code is already hard enough to read.  Development environment is not as strong as Python’s.  An enthusiastic and growing fan-base.  POLS, principle of least surprise (the language should minimize confusion for experienced users).  Ruby-on-Rails is reputed to be a “killer app”

43 Downloads?  Javascript is typically available with a browser. Develop in a plain text editor and execute in the browser.  Python and Ruby both “come with” Linux/Unix distributions -- so hurrah for OSX.  Python and Ruby interpreters have been implemented for assorted platforms, including Windows.  Javascript is typically available with a browser. Develop in a plain text editor and execute in the browser.  Python and Ruby both “come with” Linux/Unix distributions -- so hurrah for OSX.  Python and Ruby interpreters have been implemented for assorted platforms, including Windows.

44 Resources  Javascript  About a gazillion Web tutorials  JavaScript Standard (O’Reilly book)  Many, many, many crappy textbooks and how-to books. Run away!  Python  Guido’s tutorial is very good.  The online book, Dive into Python is good for programmers  Python for Dummies. 2 stars.  Ruby  There are some tutorials there. Not bad.  I can recommend Fitzgerald’s Learning Ruby (O’Reilly). Very simple and readable.  Javascript  About a gazillion Web tutorials  JavaScript Standard (O’Reilly book)  Many, many, many crappy textbooks and how-to books. Run away!  Python  Guido’s tutorial is very good.  The online book, Dive into Python is good for programmers  Python for Dummies. 2 stars.  Ruby  There are some tutorials there. Not bad.  I can recommend Fitzgerald’s Learning Ruby (O’Reilly). Very simple and readable.

45 EOT Questions?


Download ppt "Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008."

Similar presentations


Ads by Google