Web Science Stream

45
1 Dr Alexiei Dingli Web Science Stream Introducing Ruby

description

Web Science Stream. Introducing Ruby. What is Ruby?. Originated in Japan in 1995 and it was created by Yakihiro Matsumoto High level programming language Scripting language which is interpreted Object Oriented. What about performance?. Code caching - PowerPoint PPT Presentation

Transcript of Web Science Stream

Page 1: Web Science Stream

1

Dr Alexiei Dingli

Web Science Stream

Introducing Ruby

Page 2: Web Science Stream

2

• Originated in Japan in 1995 and it was created by Yakihiro Matsumoto

• High level programming language

• Scripting language which is interpreted

• Object Oriented

What is Ruby?

Page 3: Web Science Stream

3

• Code caching– Caching the output of a script for reuse rather

than executing the script every time

• Persistent interpreters– Loading the interpreter once and keeping it

running

• What about your performance when developing an application?

What about performance?

Page 4: Web Science Stream

4

• Program made of objects capable of communicating with other objects

• Each object can store data internally

• Objects with similar characteristics are instances of the same class

What about OOP?

Page 5: Web Science Stream

5

• The shell where we can input ruby commands

Note: In windows we won’t be using a standard DOS box but use the “Open Ruby Console Window” from the Instant Rails application

Interactive Ruby Shell

Page 6: Web Science Stream

6

• Open a Ruby Console Window• Type “irb”• And we’re ready to start ...

– Type “1”– Type “2”– Type “3”– What is the result?– Is it the same?

As easy as 1, 2, 3

Page 7: Web Science Stream

7

• The result might look the same as the input but– Its not the same number– The output is a Ruby object

• As a proof, type– 1.class– What’s the result?

In Ruby everything is an object!

Page 8: Web Science Stream

8

1.classÞ Fixnum

What if we try

Fixnum.class

More and more classes

Page 9: Web Science Stream

9

• 1 + 2 • 4 – 3 • 3 / 2 (Integers)• 3.0 / 2.0 (Floats)• 3 ** 2 (3 to the power of 2)• 5 % 2 (5 remainder 2)• 17_000_000_000_000_000_000

(What’s the effect of the underscore?)

• 1.7e19

The world is full of numbers ...

Page 10: Web Science Stream

10

1. What’s the result of

17_000_000_000_000_000_000 == 1.7e19

2. What happens when you write

googol = 10.0 ** 100

googolplex = 10.0 ** googol

Numbering exercises

Page 11: Web Science Stream

11

• Strings or numbers that appear directly in the code– String literal

Irb> “The dog ate a bone”

=> “The dog ate a bone”

Irb> “The dog ate a bone”.class

=> String

Irb> “The dog ate a bone”.length

=> 18

Literal objects

Page 12: Web Science Stream

12

• “Hello “ + “World”• “hi “ * 3• “1” + “2”• “1” * 2• “Hello”.capitalize• “Hello”.reverse• “Hello”.upcase• “Hello”.downcase• “Hello”.swapcase• “a”.next• “aa”.next

Even more strings ...

Page 13: Web Science Stream

13

• "hello".length + "world".length • "".empty? • "Zoo".include? "oo" • "cats".chop• How do you display your name

backwards?

String exercise

Page 14: Web Science Stream

14

• Convert anything to ...– .to_s String– .to_i Integer– .to_f Float

• What’s the result of ...– 2.to_s

Easy conversions ...

Page 15: Web Science Stream

15

• Name of an object– city = “Valletta”

• Variables always start with a lowercase letter

Variables

Page 16: Web Science Stream

16

• Name of an object– City = “Valletta”

• Constants always start with an uppercase letter• Constants should not change, if you try Ruby will send

a warning• Try

– City = “Valletta”– City = “Mdina”

Constants

Page 17: Web Science Stream

17

var = var + 2 var += 2 Add 2 to var

var = var - 3 var -= 3 Subtract 3 from var

var = var * 6 var *= 6 Multiply var by 6

var = var / 2 var /= 2 Divide var by 2

var = var** 3 var **=3 Cube var

var = var % 4 var %= 4 var modulo 4

Shortcuts

Page 18: Web Science Stream

18

Create a first.rb file and type the following ...

name = “Tom”

puts “Hello “ + name + “. How are you?”

no1 = 2

no2 = 4

no3 = no1 + no2

puts “The answer is “ + no3.to_s

Our first program

Page 19: Web Science Stream

19

• Please use meaningful names for variables ...– age vrs a

• Use the following approach with Multiwords– studentAge or student_age vrs studentage

• Don’t be afraid to use constants where values don’t change

• Use irb when you need to test small sections of code

• When you need help use ri XXXX– Eg ri String – Eg ri String#upcase

Some tips and conventions

Page 20: Web Science Stream

20

4.times do

puts “Hello”

end

ExerciseWhat is the sum of all the integers from 1 to 1000?

Loops

Page 21: Web Science Stream

21

name = gets

To remove any carriage returns or new lines use chomp

“Alexiei\n”.chomp

Getting user input

Page 22: Web Science Stream

22

• Write a small program which asks for your age, calculates the year you were born and displays:

You were born in 19XX

Input exercise

Page 23: Web Science Stream

23

if city == “Valletta"

licence = “V Licence”

else

licence = “normal”

end

= is an assignment

== is a boolean comparison

Conditions

Page 24: Web Science Stream

24

if city == “Valletta"

licence = “V Licence”

elsif city == “Mdina”

licence = “M Licence”

else

licence = “normal”

end

Note that only the first elsif that returns true gets executed

Conditions

Page 25: Web Science Stream

25

• == equal• != not equal to• > greater than• < less than• >= greater than or equal to• <= less than or equal to

Comparisons

Page 26: Web Science Stream

26

“9” < “D”

“a” < “b”

“h” == “h”

“H” == “h”

“Z” <= “b”

“j” != “r”

String comparison

Page 27: Web Science Stream

27

count = 0

while count < 10

count += 1

end

While loop

Page 28: Web Science Stream

28

• Use proper indentation

• Write comments when needed

# I’m a comment and can write whatever i want

More tips and conventions

Page 29: Web Science Stream

29

>> numbers = [ "zero", "one", "two", "three", "four" ]

=> ["zero", "one", "two", "three", "four"]

>> numbers.class

=> Array

>> numbers[0]

=> "zero"

Arrays

Page 30: Web Science Stream

30

names = [ "Melissa", "Daniel", "Samantha", "Jeffrey"]

What about ...

names.sort

names.reverse

names.length

names + [“Tom”]

names - [“Daniel”]

names * 2

puts names.to_s

Fun with Arrays

Page 31: Web Science Stream

31

names.each do |friend|

puts “I have a friend called “ + friend

end

What about using 4.times or ...

names.length.times do |i|

puts "I have a friend called " + names[i]

end

What if I want to print my friends in sorted order?

Let’s iterate

Page 32: Web Science Stream

32

addressBook = {

“Valletta" => “Tom",

“Sliema" => “Jack",

“Mdina" => “Ben”

}

What’s in a Hash?

Page 33: Web Science Stream

33

addressBook.each do |key, value|

puts key + " => " + value

end

There is also ...

addressBook.each_key do |key|

addressBook.each_value do |value|

Iterating Hashes

Page 34: Web Science Stream

34

• Not associated with any other object

def say_hi

puts "Hello, How are you?"

end

say_hi

Functions ...

Page 35: Web Science Stream

35

def say_hi(name)

puts "Hello " + name + ", How are you?"

end

say_hi("Daniel")

say_hi "Sandy"

Function parameters ...

Page 36: Web Science Stream

36

• The class keyword defines a class

• By defining a method inside this class, we are associating it with this class

• The initialize method is what actually constructs the data structure. Every class must contain an initialize method.

• The @ sign in front of variables distinguishes the variable as an object variable.

Classes

Page 37: Web Science Stream

37

class Address

def initialize(street)

@street = street

end

end

address = Address.new(“2 Republic Str")

Example class

Page 38: Web Science Stream

38

class Address

def initialize(street)

@street = street

end

def street

@street

end

end

>> address.street

=> " 2 Republic Str"

Example class with return

Page 39: Web Science Stream

39

class Address def

attr_reader: street

initialize(street)

@street = street

end

end

Shortcut to class with return

Page 40: Web Science Stream

40

class Address def

attr_reader: street

attr_writer: street

initialize(street)

@street = street

end

end

Shortcut to set a variable

Page 41: Web Science Stream

41

class Address def

attr_accessor: street

initialize(street)

@street = street

end

end

Shortcut to getting and setting a variable in one go

Page 42: Web Science Stream

42

class SomeClass

def method1 # default to public

...

end

private # subsequent methods are private.

def method2 # private method

...

end

def method3 # private method

...

end

public # Set back to public.

def method4 # public method

...

end

end

Private vrs Public classes

Page 43: Web Science Stream

43

• Save them in a className.rb file

• Make use of the following command

require “className“

• Just use the classes normally

Using classes

Page 44: Web Science Stream

44

• If you can't sumarize in one sentence what the function does, it's probably too complicated

• If you have to scroll to see the entire function, it is too long

• Studies suggest that a person can only keep track of at most 7 or so things at one time. If your function has more than 5 or 6 variables, it is probably too long.

Some final guidelines

Page 45: Web Science Stream

45

Questions?