learn ruby programming in amc square learning

14
Learn RUBY Programming at AMC Square Learning •An interpreted language •a.k.a dynamic, scripting •e.g., Perl •Object Oriented •Single inheritance •High level •Good support for system calls, regex and CGI •Relies heavily on convention for syntax

Upload: amc-square

Post on 12-Aug-2015

20 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Learn Ruby Programming in Amc Square Learning

Learn RUBY Programming at AMC Square Learning

• An interpreted language • a.k.a dynamic, scripting• e.g., Perl

• Object Oriented• Single inheritance

• High level• Good support for system calls, regex and CGI

• Relies heavily on convention for syntax

Page 2: Learn Ruby Programming in Amc Square Learning

Hello World#!/usr/bin/env ruby

puts “Hello world”

$ chmod a+x helloWorld.rb

$ helloWorld.rb

Hello world

$

• shell script directive to run ruby• Needed to run any shell script

• Call to method puts to write out “Hello world” with CR

• Make program executable

Page 3: Learn Ruby Programming in Amc Square Learning

Basic Ruby

• Everything is an object• Variables are not typed• Automatic memory allocation and garbage

collection• Comments start with # and go to the end of the line

• You have to escape \# if you want them elsewhere• Carriage returns mark the end of statements• Methods marked with def … end

Page 4: Learn Ruby Programming in Amc Square Learning

Control structures

If…elsif…else…endcase when <condition> then

<value>… else… end

unless <condition> … endwhile <condition>… enduntil <condition>… end

#.times (e.g. 5.times())#.upto(#) (e.g. 3.upto(6))

<collection>.each {block}

• elsif keeps blocks at same level• case good for checks on multiple

values of same expression; can use ranges

grade = case score when 90..100 then “A” when 80..90 then “B” else “C” end

• Looping constructs use end (same as class definitions)

• Various iterators allow code blocks to be run multiple times

Page 5: Learn Ruby Programming in Amc Square Learning

Ruby Naming Conventions

• Initial characters• Local variables, method parameters, and method names

lowercase letter or underscore• Global variable $• Instance variable @• Class variable @@• Class names, module names, constants uppercase letter

• Multi-word names• Instance variables separate words with underscores• Class names use MixedCase

• End characters• ? Indicates method that returns true or false to a query• ! Indicates method that modifies the object in place rather than

returning a copy (destructive, but usually more efficient)

Page 6: Learn Ruby Programming in Amc Square Learning

Another Exampleclass Temperature Factor = 5.0/9

def store_C(c) @celsius = c end

def store_F(f) @celsius = (f - 32)*Factor end

def as_C @celsius end

def as_F (@celsius / Factor) + 32 endend # end of class definition

Factor is a constant5.0 makes it a float

4 methods that get/set an instance variable

Last evaluated statement is considered the return value

Page 7: Learn Ruby Programming in Amc Square Learning

Second Tryclass Temperature Factor = 5.0/9 attr_accessor :c

def f=(f) @c = (f - 32) * Factor end

def f (@c / Factor) + 32 end

def initialize (c) @c = c endend

t = Temperature.new(25)puts t.f # 77.0t.f = 60 # invokes f=()puts t.c # 15.55

attr_accessor creates setter and getter methods automatically for a class variable

initialize is the name for a classes’ constructor

Don’t worry - you can always override these methods if you need to

Calls to methods don’t need () if unambiguous

Page 8: Learn Ruby Programming in Amc Square Learning

Input and Output - tsv filesf = File.open ARGV[0]

while ! f.eof?

line = f.gets

if line =~ /^#/

next

elsif line =~ /^\s*$/

next

else

puts line

end

end

f.close

ARGV is a special array holding the command-line tokens

Gets a lineIf it’s not a comment or a

blank linePrint it

Page 9: Learn Ruby Programming in Amc Square Learning

Processing TSV filesh = Hash.newf = File.open ARGV[0]while ! f.eof? line = f.gets.chomp if line =~ /^\#/ next elsif line =~ /^\s*$/ next else tokens = line.split /\t/ h[tokens[2]] = tokens[1] endendf.close

keys = h.keys.sort {|a,b| a <=> b}keys.each {|k| puts "#{k}\t#{h[k]}" }

Declare a hash tableGet lines without \n or \r\n - chompsplit lines into fields delimited with tabsStore some data from each field into the

hash

Sort the keys - sort method takes a block of code as input

each creates an iterator in which k is set to a value at each pass

#{…} outputs the evaluated expression in the double quoted string

Page 10: Learn Ruby Programming in Amc Square Learning

Blocks

• Allow passing chunks of code in to methods• Receiving method uses “yield” command to call

passed code (can call yield multiple times)

• Single line blocks enclosed in {}• Multi-line blocks enclosed in do…end

• Can use parameters[ 1, 3, 4, 7, 9 ].each {|i| puts i }Keys = h.keys.sort {|a,b| a <=> b }

Page 11: Learn Ruby Programming in Amc Square Learning

Running system commandsrequire 'find'

Find.find('.') do

|filename|

if filename =~ /\.txt$/i

url_output =

filename.gsub(/\.txt$/i, ".html")

url = `cat #{filename}`.chomp

cmd = "curl #{url} -o #{url_output}";

puts cmd

`#{cmd}`

end

end

• require reads in another ruby file - in this case a module called Find

• Find returns an array, we create an iterator filename to go thru its instances

• We create a new variable to hold a new filename with the same base but different .html extension

• We use backticks `` to run a system command and (optionally) save the output into a variable

• curl is a command in mac os to retrieve a URL to a file, like wget in unix

Page 12: Learn Ruby Programming in Amc Square Learning

CGI examplerequire 'cgi'

cgi = CGI.new("html3")size = cgi.params.size

if size > 0 # processing form in = cgi.params['t'].first.untaint cgi.out { cgi.html { cgi.head cgi.body { "Welcome, #{in}!" } } }else puts <<FORMContent-type: text/html

<HTML><BODY><FORM>Enter your name: <INPUT TYPE=TEXTNAME=t><INPUT TYPE=SUBMIT></FORM></BODY></HTML>FORMend

• CGI requires library• Create CGI object

• If parameters passed • Process variable t• untaint variables if using

them in commands

• No parameters?• create form using here

document “<<“

Page 13: Learn Ruby Programming in Amc Square Learning

Reflection

...to examine aspects of the program from within the program itself.

#print out all of the objects in our systemObjectSpace.each_object(Class) {|c| puts c}

#Get all the methods on an object“Some String”.methods

#see if an object responds to a certain methodobj.respond_to?(:length)

#see if an object is a typeobj.kind_of?(Numeric)obj.instance_of?(FixNum)

Page 14: Learn Ruby Programming in Amc Square Learning

Thank You