homeUnix & Internet Unix & Shell-Programmierung: Funktionen, Methoden und Klassen Prof. Dr. Uwe Schmidt FH Wedel

Funktionen, Methoden und Klassen

weiter

weiter

Funktionen und Methoden

Funktionen
geben den Wert des letzten ausgewerteten Ausdrucks als Resultat zurück
Funktionsdefinition
def hello(name)
  "hello " + name
end
Funktionsaufruf
hello "you"             # => "hello you"
hello "world"           # => "hello world"
Funktionen mit mehreren Resultaten
def plusMinus(x,y)
  [x + yx - y]
end
Variante
def plusMinus(x,y)
  return x + yx - y
end
puts, p und printf
eine eingebaute Funktion für die Ausgabe auf stdout
 
puts (hello "world")
hello world             # => nil
 
# kürzer
 
p (hello "world")
hello world             # => nil
 
printf("Die Antwort ist %d\n", 42)
Die Antwort ist 42
                        # => nil
weiter
Klassen
enthalten eine Menge von Methoden und Instanzvariablen
Klassendefinition
class Url
  def initialize(hostportpath)
    @host     = host
    @port     = port.nil? ? 80 : port
    @path     = path
  end
 
  def host
    @host
  end
 
  def port
    @port
  end
 
  def path
    @path
  end
 
  def to_s
    "http://" + @host + ":" + @port.to_s + @path
  end
end
weiter
Objekterzeugung und Methodenaufrufe
u = Url.new("localhost",8080,"/abc/def.html")
 
u.host          # => "localhost"
u.port          # => 8080
u.path          # => "/abc/def.html"
u.to_s          # => "http://localhost:8080/\
                #     abc/def.html"
 
u.inspect       # => "#<Url:0xb7c942f0
                #        @path=\"/abc/def\",
                #        @port=8080,
                #        @host=\"localhost\">"
 
u.methods.sort  # => [..., "host",
                #     ..., "path", "port",
                #     ..., "to_s", ...]
weiter
Vererbung
class SimpleUrl < Url
  def initialize(hostpath)
    super(host,nil,path)
  end
 
  def to_s
    "http://" + @host + @path
  end
end
weiter
Vererbungshierachie
erfragen mit .superclass und .is_a?
 
1.class                 # => Fixnum
1.class.superclass      # => Integer
1.class.superclass\
       .superclass      # => Numeric
1.class.superclass\
       .superclass\
       .superclass      # => Object
1.class.superclass\
       .superclass\
       .superclass\
       .superclass      # => nil
 
1.is_a? Fixnum          # => true
1.is_a? Integer         # => true
1.is_a? Object          # => true
1.is_a? String          # => false
Objekterzeugung und Methodenaufrufe
v = SimpleUrl.new("w3c","/index")
                # => #<SimpleUrl:0xb7c957cc
                #       @path="/index",
                #       @port=80,
                #       @host="w3c">
v.host          # => "w3c"
v.port          # => 80
v.path          # => "/index"
v.to_s          # => "http://w3c/index"
weiter
Klassenmethoden
class Url
  def initialize(hostportpath)
    @host     = host
    @port     = port.nil? ? 80 : port
    @path     = path
  end
 
  def Url.simpleUrl(hostpath)
    Url.new(hostnilpath)
  end
 
  ...
 
  def to_s
    "http://" +
     @host +
     (@port == 80 ? "" :  ":" + @port.to_s) +
     @path
  end
end
merke
Java Sparchgebrauch: Statische Methoden anstatt direkte Konstruktoraufrufe.
merke
Muster für Klassen mit mehreren Konstruktoren.
weiter

Letzte Änderung: 14.02.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel