Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February...
-
Upload
simon-hamlen -
Category
Documents
-
view
213 -
download
1
Transcript of Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February...
![Page 1: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/1.jpg)
Young & Interpreted:Python, Ruby, JavaScript
Susan Haynes18 February 2008
Susan Haynes18 February 2008
![Page 2: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/2.jpg)
These three languages have a lot in common: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
![Page 3: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/3.jpg)
They’re Really DifferentThey’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.
![Page 4: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/4.jpg)
OriginsOrigins
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’
![Page 5: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/5.jpg)
QuestionsQuestions
Suitable for CS education? What are they good for? Coolness factor?
Suitable for CS education? What are they good for? Coolness factor?
![Page 6: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/6.jpg)
What do I know?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).
![Page 7: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/7.jpg)
DemosDemos
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)
![Page 8: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/8.jpg)
White SpaceWhite 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.
![Page 9: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/9.jpg)
Line terminationLine 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.
![Page 10: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/10.jpg)
NumbersNumbers
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 true3.class ==> return Fixnum3.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 true3.class ==> return Fixnum3.to_f ==> returns 3.0
![Page 11: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/11.jpg)
Variable NamesVariable Names
JavaScript -- the usual Python -- the usual Ruby --
Local variables start with lower case or _
Instance variables start with @ Class variables start with @@ Globals start with $
JavaScript -- the usual Python -- the usual Ruby --
Local variables start with lower case or _
Instance variables start with @ Class variables start with @@ Globals start with $
![Page 12: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/12.jpg)
Simple Python ProgramSimple Python Program
First program: first.pys1 = raw_input(“enter integer: “)s2 = raw_input(“enter float: “)s3 = s1 + s2print “s1+s2 “ + s3 + “\n”n1 = int(s1)n2 = float(s2)n3 = n1+n2print “n1+n2: “ + n3
Outputenter integer: 3enter float: -14.34s1+s2 3-14.34
n1+n2 -11.34
Run this with Python and Idleimport firstthen reload(first) on subsequent changes
![Page 13: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/13.jpg)
Another simple Python programAnother simple Python program
Second program: second.py
x = 10y = ‘3’print “type(x): “ , type(x)print “type(y): “, type(y)y = int(y)print “type(y): “, type(y)dir()
Output
>>> import secondtype(x): <type ‘int’>type(y): <type ‘str’>type(y): <type ‘int’>[__builtins__’, ‘__doc__’, ‘__name’__’‘first’, ‘n1’, ‘n2’, ‘sys’, ‘x’, ‘y’ ]
Notice use of type(), str() and dir()type(varX): returns type of varXstr(varY): any varY has a “nice” string representationdir(): lists all known names
![Page 14: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/14.jpg)
Parallel AssignmentParallel 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)<type ‘tuple’>>>> t[0]‘a’>>> t[1]‘b’>>> type ( (x, y, z) )<type ‘tuple’>>>> (x, y, z) = t>>> x‘a’>>> y‘b’
![Page 15: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/15.jpg)
Method NamesMethod 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
![Page 16: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/16.jpg)
ArraysArrays
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
![Page 17: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/17.jpg)
Javascript - simple arrayJavascript - simple array// see array.htmlvar arr1 = [2, 4, 6, 8, "who", "do", 'we', "appreciate", "?" ];
document.write("<h2>Outputting initialized arr1 “ + “</h2>");
document.write(arr1);
document.write("<h2>I'm slicing the arr1 “ +“from index 2 to 3nd from end</h2>");
arr2 = arr1.slice(2, -2);
document.write(arr2);
document.write("<h2>I'm adding elements to arr1 “ + at index 20, 21</h2>");
arr1[20] = [1, 2, 3];arr1[21] = "ta";document.write(arr1);
// see array.htmlvar arr1 = [2, 4, 6, 8, "who", "do", 'we', "appreciate", "?" ];
document.write("<h2>Outputting initialized arr1 “ + “</h2>");
document.write(arr1);
document.write("<h2>I'm slicing the arr1 “ +“from index 2 to 3nd from end</h2>");
arr2 = arr1.slice(2, -2);
document.write(arr2);
document.write("<h2>I'm adding elements to arr1 “ + at index 20, 21</h2>");
arr1[20] = [1, 2, 3];arr1[21] = "ta";document.write(arr1);
![Page 18: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/18.jpg)
DictionaryDictionary
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
![Page 19: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/19.jpg)
DictionaryDictionary
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
![Page 20: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/20.jpg)
Composite types Summary for PythonComposite 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, “123-45-6789”) Dictionary, a property list or hash table. The key is immutable
{(“smith”, “jane”, 24000, “123-45-6789”): 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, “123-45-6789”) Dictionary, a property list or hash table. The key is immutable
{(“smith”, “jane”, 24000, “123-45-6789”): 4, “vehicle”: “truck”, age: 19 }
Each type has many useful methods; indexing and slicing are essentially the same for all types
![Page 21: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/21.jpg)
Defining MethodsDefining 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
![Page 22: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/22.jpg)
ClosuresClosures
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
![Page 23: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/23.jpg)
Control StructuresControl 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).
![Page 24: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/24.jpg)
Event handlingEvent handling
All offer event handling with variations in syntax
All offer event handling with variations in syntax
![Page 25: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/25.jpg)
Ruby expressiveness: looping examples (1)Ruby expressiveness: looping examples (1)
# fitz56.rb#initialize arrayvalues = [1, 2, "buckle", "my", "shoe"]
puts "\n-->print array using while"i = 0while i < values.size do # 'do' is optional here print values[i], " " i += 1endputs "\n\n--> using 'do-while'"i=0begin print values[i], " " i += 1end while i < values.size
![Page 26: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/26.jpg)
Ruby expressiveness: looping examples (2)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], " " }
![Page 27: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/27.jpg)
Creating classes - Many similarities
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.
![Page 28: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/28.jpg)
JavaScript class example: defining
JavaScript class example: defining
// see objects.htmlfunction Horse (name) { this.name = name; this.getName = getHorseName; this.setName = setHorseName; } function getHorseName () { return this.name; } function setHorseName(name) {
this.name = name}
// see objects.htmlfunction Horse (name) { this.name = name; this.getName = getHorseName; this.setName = setHorseName; } function getHorseName () { return this.name; } function setHorseName(name) {
this.name = name}
![Page 29: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/29.jpg)
JavaScript class example: modifying
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;
![Page 30: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/30.jpg)
Ruby class example: DefiningRuby class example: Defining# fitz128.rb
class Horse def initialize (name) # execute AFTER instantiation @name = name # instance variable end
def name # getter @name end # last value is returned
def name= (name) # setter @name = name endend
# fitz128.rb
class Horse def initialize (name) # execute AFTER instantiation @name = name # instance variable end
def name # getter @name end # last value is returned
def name= (name) # setter @name = name endend
![Page 31: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/31.jpg)
Ruby class example: modifying
#fitz128b.rb
# repeated code deleted
class Horse
def initialize ( name = 'pokey', age = 10)
@name = name
@age = age
end
def say_whoa
puts "Whoa there " + @name
end
end
#fitz128b.rb
# repeated code deleted
class Horse
def initialize ( name = 'pokey', age = 10)
@name = name
@age = age
end
def say_whoa
puts "Whoa there " + @name
end
end
![Page 32: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/32.jpg)
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
![Page 33: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/33.jpg)
Ruby: metaprogramming to make class definition
easier
Ruby: metaprogramming to make class definition
easierTo irbclass Horse attr :gait, true attr :name, true def say_whoa puts “Whoa there “ + @name endend
Horse.instance_methods - Object.instance_methodsh1 = Horse.newh1.name= “pokey”h1.gait = “trot”p h1
To irbclass Horse attr :gait, true attr :name, true def say_whoa puts “Whoa there “ + @name endend
Horse.instance_methods - Object.instance_methodsh1 = Horse.newh1.name= “pokey”h1.gait = “trot”p h1
![Page 34: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/34.jpg)
Python code Example 1: defining a function
Python code Example 1: defining a function
>>> def fib(n): “””Calculate fibonacciNumber of parameter “”” if n < 1: return 1 else: return n * fib(n-1)
>>> fib<function fib at 0xc3d3b0>>>> type(fib)<type ‘function’>>>> help(fib)help on function fib in module __main__:
fib(n) calculate fibonacci number of parameter
>>> fib(5)120
![Page 35: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/35.jpg)
Python code Example 2: A couple stacks
Python code Example 2: A couple stacks
>>> p = []>>> type(p)<type ‘list’>>>> 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]
![Page 36: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/36.jpg)
Python list mappingPython 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]
![Page 37: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/37.jpg)
DocumentationDocumentation
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
![Page 38: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/38.jpg)
At the end of the dayAt 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
![Page 39: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/39.jpg)
Which is better? Javascript?
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<script type=“text/javascript” src=“library.js” />
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<script type=“text/javascript” src=“library.js” />
![Page 40: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/40.jpg)
Which is better? Python?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.
![Page 41: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/41.jpg)
http://imgs.xkcd.com/comics/python.png
![Page 42: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/42.jpg)
Which is better? Ruby?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”
![Page 43: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/43.jpg)
Downloads?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.
![Page 44: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/44.jpg)
ResourcesResources Javascript
About a gazillion Web tutorials JavaScript Standard (O’Reilly book) Many, many, many crappy textbooks and how-to books. Run
away! Python www.python.org
Guido’s tutorial is very good. The online book, Dive into Python is good for programmers Python for Dummies. 2 stars.
Ruby www.ruby-lang.org 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 www.python.org
Guido’s tutorial is very good. The online book, Dive into Python is good for programmers Python for Dummies. 2 stars.
Ruby www.ruby-lang.org There are some tutorials there. Not bad. I can recommend Fitzgerald’s Learning Ruby (O’Reilly). Very
simple and readable.
![Page 45: Young & Interpreted: Python, Ruby, JavaScript Susan Haynes 18 February 2008 Susan Haynes 18 February 2008.](https://reader038.fdocuments.us/reader038/viewer/2022110319/56649c795503460f9492e366/html5/thumbnails/45.jpg)
EOTQuestions?
EOTQuestions?