Vandaag: Ruby als taal Introductie “Vaardigheden”, I. Bethke Rails modellen: zoeken, bewaren Rails views: view helpers 13-1-2010Wolter Kaper -

Slides:



Advertisements
Verwante presentaties
Inleiding in de statistiek voor de gedragswetenschappen Met ondersteuning van SPSS Guido Valkeneers.
Advertisements

KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 14: Eerste echte e-commerce applicatie: Implementatie (vervolg)
Databank van een restaurant Download op Twee tabellen: Klanten: Alle klanten die minstens.
Practica Computerlinguistiek Tekst en uitleg:
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
VBA en VBS Een introductie.
Hoofdstuk 6: Controle structuren
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Basis 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Download en installeer de gereedschappen
Inleidend probleem Data structuur (hiërarchie van classes)
Visual Basic.
Wolter Kaper - Model-objecten en hun relaties in Ruby on Rails Webprogrammeren, week 1.
Wolter Kaper - Ruby on Rails Webtoepassing ontwerpen Webprogrammeren, week 1.
Wolter Kaper - AJAX en Javascript via Rails Deel 1 en 2.
Workshop PHP Een productencatalogus Met database.
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Hoofdstuk 16 en 19 PHP en MYSQL
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
NSTE-ACS GL ESC Eduard van den Berg, cardio.nl.
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
Starten met PHP Dynamischer bouwen. PHP is een een scripttaal waarmee de server pagina’s in elkaar kunt laten zetten. Het verschil met HTML: Een php pagina.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
© 2008 Wolf Knab Websitearchitectuur,
Web 1.0 HTMLAfbeeldingen FlashHyperlinks CSS Participation AJAX Usability Design Ruby on Rails.
Handleiding ClassDojo
Programmeerstijl Hoofdstuk 21. Visual Basic.NET voor studenten2 Inleiding Belang van een goede programmeerstijl:  Programma’s worden door meerdere mensen.
Les 7 Multiple Document Interface Programmeren met Visual Basic Karl Moens.
Inleiding in de statistiek voor de gedragswetenschappen
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
tircms02-p les 1 Operating Systems practicum
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
AWK A Pattern scanning and processing language made by Aho Weinberger Kernighan and explained by Albert Montijn.
Front-end development
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 8: Gebruikersinterface © 2014, Gertjan Laan, versie 2.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
INFITT01 - Internettechnologie WEEK 3. Programma Sessies JSP.
Java & het Web Programma: 3rd party libraries Standard actions (E)xpression (L)anguage.
Java & het Web Programma: Contexts Listeners Scope/Attributes Thread safety.
Java & het Web Programma: Sessies JSP. Stateless vs. Stateful(1) HTTP is stateless WAT IS STATELESS?
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
GEGEVENSSTRUCTUREN IN.NET. Inleiding  Enumerated type  Structure  Collecties  Typed collections  Untyped collections.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Informatie beoordelen If else Switch En Wiskunde.
Javascript. Voortgang op: Account gegevens Invullen op: Bevestiging ontvangen ( ) via website?
Robby de Robot. Javascript Tot nu toe gebruikt: – document.write(" Hello World "); – alert("tekst") – Toon een waarschuwingsvenster – prompt("tekst",
Objectgeoriënteerd Programmeren (2)
Javascript.
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Methoden
Gameprogrammeren: Properties
‘Inleiding objectgeoriënteerd programmeren met PHP’ ‘Inleiding’
Small Basic Console deel 2
SQL Les February 2019.
ASP.NET MVC Web Development
SQL Les 7 24 February 2019.
SQL Les 6 14 April 2019.
Software Development fundamentals
SQL Les 9 12 May 2019.
Transcript van de presentatie:

Vandaag: Ruby als taal Introductie “Vaardigheden”, I. Bethke Rails modellen: zoeken, bewaren Rails views: view helpers Wolter Kaper -

Wolter Kaper - Ruby, de taal Webprogrammeren, week 2

Wolter Kaper - Wat maakt Ruby anders? Geïnterpreteerde taal Alles is een object  Geen aparte ‘primitieve datatypen’  + is een methode Variabelen hebben geen type  Waarden van variabelen hebben typen Klassen en objecten: dynamisch methodenamen met !, ?, = erin. functie-aanroep met of zonder ()

Wolter Kaper - Geïnterpreteerd / dynamisch Geen aparte compilatie stap Klasse definitie dynamisch:  Executeerbaar  Eerder bestaat klasse niet  Klasse kan gewijzigd worden: Methoden toevoegen / weglaten: def / undef Objecten dynamisch:  Methode toevoegen aan enkel object

Wolter Kaper - Alles is een object Getal als object  1.+(1)  resultaat: 2  + is methode van FixNum klasse Methodeaanroep zonder ()  object.methode(param1, param2)  object.methode param1, param2 Operators: de punt. hoeft niet  Sommige klassen eigen operatoren  Vergelijken van datums, datum + getal

Wolter Kaper - Methode-namen met !, ?, = Mag alleen aan het eind ! betekent: pas op conventie: methoden die het eigen object wijzigen ? conventie: methoden die een boolean teruggeven = setters eindigen op = object.x = 38 (aanroep setter voor x)

Wolter Kaper - Variabelen geen type x = 1 … x = Time.new(2009, 01, 14, 9, 30) … Geen type-declaratie Waarden hebben typen “new” is een klasse-methode

Wolter Kaper - Veel gebruikte waarde-typen Numeric  Integer: FixNum, BigNum  Float  BigDecimal, Complex, Rational, … String: te wijzigen, “mijntekst” Symbol: niet te wijzigen, uniek, :mijnsymbool Range: Symbolen handig als hash-keys!

Veel gebruikte waarde-typen (2) Arrays en Hashes: Arr = [3, 5, “jan”, Time.new(2009) ] Ha = {“vader” => 1, :moeder => 2, :oom =>MyClass.new(5)} Een waarde selecteren: Arr[2] Ha[“vader”] Ha[:oom] Wolter Kaper -

Hashes, Arrays Wolter Kaper -

Hashes, Arrays Wolter Kaper -

Wolter Kaper - Strings Met enkele of dubbele aanhalinstekens  “Mijn string”  ‘Mijn string’ Een lange string maken  ‘Bla bla bla bla bla bla bla bla ‘ ‘bla bla bla’ Concatenatie  var = “world”  “Hello ” + var Interpolatie  var = “world”  “Hello #{var}”

Wolter Kaper - Controle structuren, iteratie

Wolter Kaper - Iterators Een aantal keren  3.times { …}  (1..10).each { |j|... }  for j in … end  for obj in array … end Itereren over array a  a.each {|val| … } Itereren over hash h  h.each {|key, val| …} Zie…

Wolter Kaper - Controle structuren: if if x < 10 then... end if x < 10 then... elsif x < 14 then... else... end

Wolter Kaper - Alles is een expressie if, while,.. geven resultaatwaarde waarde van een blok = waarde laatste statement in blok mijnvar = if x < 10 then “een” else “piet” end mijnvar = if x < 10 then { y=6; “een” } else {“piet”; y = 7} end

Wolter Kaper - Case mijnvar = case x when 1... when 2... else... end

Wolter Kaper - while / until x = 10 while x > 0 do... end x = 10 until x <= 0 do... end

Wolter Kaper - Stijlvarianten if... then... end... if... if x > 10 then y=3 end y=3 if x > 10

Wolter Kaper - break, next, redo – in loops break  spring uit de loop next  spring naar einde huidige iteratie, begin met de volgende redo  spring naar begin huidige iteratie: overnieuw Veel gebruikte stijl: break if x > 10

Wolter Kaper - Raise exceptions def factorial(n) raise RuntimeError “bad argument” if n<1... end raise ExceptionClass message raise message raise

Wolter Kaper - Exception handling begin... x = factorial(-1) rescue => exep... puts “#{exep.class}: #{exep.message}” end rescue => exceptievar rescue ExcKlasse1, ExcKlasse2,... => exceptievar

Wolter Kaper - Klassen en objecten

Wolter Kaper - Scope van variabelen mijnvar  Lokale scope: binnen een  Object scope, “instance variable”  Klasse variabele $mijnvar  Globale variabele MijnVar  Klasse constante, moet buiten methode definitie

Wolter Kaper - Hoe ontstaan object variabelen? class MyClass def = 5 end variabelen worden dynamisch gecreëerd

Wolter Kaper - initialize / new class MyClass def = x, y end z = MyClass.new(4, “jan”) initialize is private argumenten van new gaan naar initialize

Wolter Kaper - Methoden met optionele parameters Alles over optionele parameters in Ruby: Er zijn drie manieren om parameters te definieren: -def mymethod(a, b) Als je mymethod aanroept met anders dan 2 parameters is het fout. -def mymethod(a=2, b=“jan”) Als je mymethod aanroept met minder dan 2 parameters dan krijgen b en indien nodig ook a de hier opgegeven default waarde. - def mymethod(*a) Nu is het aantal parameters volledig optioneel. Alle parameters vind je in het array a. Men kan alle drie de soorten combineren… Bij (te) veel parameters: definieer een “options” hash als parameter Zo krijgen de opties namen, wat de leesbaarheid vergroot.

Wolter Kaper - accessors: getters / setters class MyClass def = x, y end def end def = val end end p = MyClass.new(2,5) p.x = 27

Wolter Kaper - accessors: sneller (metaprogramming) class MyClass attr_reader :x, :y end attr_reader maakt getters attr_accessor maakt getters + setters

Wolter Kaper - Objecten vergelijkbaar maken class Vector include Comparable attr_reader :x, :y def = x, y end def (v) return nil unless v.instance_of? Vector self.lengte v.lengte end protected def end

Wolter Kaper - Private, protected, public class MyClass... hier een of meer public methoden... protected... hier een of meer protected methoden... private... hier een of meer private methoden... end

Wolter Kaper - Erfelijkheid class = x, y; end end class Vector3D < Vector initialize(x,y,z) super(x, = z end < in plaats van “extends” je kunt methoden “overrulen” met “super” kun je de overrulede-methode gebruiken

Wolter Kaper - Modules Een module is een stel methoden  je kunt ´m niet instantieren  het is geen klasse include module  hiermee krijg je alle methoden van de module in je klasse  lijkt op multiple inheritance  lijkt op java interfaces verschil: je hoeft niet te implementeren include Enumerable, Comparable

Wolter Kaper - Flexibele klassen 1 class MyClass def method1... end class MyClass def method2... end

Wolter Kaper - Flexibele klassen 2 class MyClass def method1... end class MyClass undef method1 end

Wolter Kaper - Flexibele objecten object = MyClass.new(“Pietje”) def object.method1... end object krijgt een methode erbij

Wolter Kaper - Rails model klassen

Wolter Kaper - Rails model klassen Al je domein-logica Accessors  je ziet ze niet, ze zijn er wel  afgeleid uit database tabel per kolom een getter (zonder =) en een setter (met) je kunt ze overrulen Validatie  Heeft gebruiker geschikte waarden ingevoerd?  ActiveRecord: Validatie helpers

Wolter Kaper - Validatie voorbeeld class Account < ActiveRecord::Base validates_presence_of :naam, : , :reknum validates_numericality_of :reknum validates_uniqueness_of : validates_format_of : , :with=>...regexp... validates_length_of :naam, :minimum=> 5... end

Wolter Kaper - Modellen: zoeken, wijzigen, opslaan, wissen Database acties

Wolter Kaper - Rails database acties Waar?  Meestal in je controllers Hoe?  Find methode van je model-objecten  Save / update methoden,,,, ...hebben ze geërfd van ActiveRecord

Wolter Kaper - Find klanten = Klant.find(:all) klant = Klant.find(id) klant = Klant.find_by_naam(“Jansen”) klanten = Klant.find_all_by_naam(“Jansen”) klanten = Klant.find_by_naam_and_pc(“Jansen”, 12)

Wolter Kaper - Find vervolg klanten = Klant.find(:all, \ :conditions=> [“login=? AND password=?”, li, pw]) :conditions =>  dan een array met  Een string met de voorwaarde (SQL WHERE)  met vraagtekens waar variabelen moeten ingevuld  dan de variabelen in passende volgorde

Wolter Kaper - Find vervolg :order => “naam desc”  (zoals SQL ORDER BY) :limit => 10, :offset=> 100  aantal gevonden records beperken  offset, sla de eerste 100 over  handig als je wilt pagineren

Wolter Kaper - Objecten opslaan mijnobject.save object.update_attribute(:kolomnaam, waarde) object.update_attributes(attribuut-hash) object = Klasse.update(id, attribuut-hash) attribuut-hash: :kolomnaam => waarde

Wolter Kaper - Objecten wissen object.destroy Klasse.destroy(array-met-ids)

Wolter Kaper - Rails View Helpers

Wolter Kaper - Rails View Helpers Een Ruby module per controller Methoden beschikbaar in controller en in bijbehorende views Kun je zelf schrijven Er is een algemene “application” controller Alle controllers erven helpers Veel ingebouwde helpers zijn er al

Wolter Kaper - Soorten View Helpers head van je document  javascript_include_tag, stylesheet_link_tag,... gegevens weergeven  tekst uit de database  hyperlinks / actieknoppen maken formulier maken  volautomatisch formulier  zelfvormgegeven formulier gebonden aan model  ongebonden formulierelementen  validatiefouten tonen ajax helpers  div: class, id,...

Wolter Kaper - Head helpers Uit de AssetTagHelper module: javascript_include_tag(“file1”, “file2”,...)  files bevinden zich in public/javascripts stylesheet_link_tag(“file1”, “file2”,...)  files in public/stylesheets

Head helpers Wolter Kaper -

Wolter Kaper - Gegevens op de pagina zetten Uit de TextHelper module: h(user_text) standaard gebruiken!? sanitize(user_html) strip_tags(user_text) markdown(user_text) BlueCloth gem nodig __X__ => X textilize(user_text) RedCloth gem nodig *X* => X truncate(text, length, “...”) te lange tekst afbreken

Wolter Kaper - Hyperlinks genereren url_for(url) button_to( name, url, {html-options})  button_to(“delete image”, { :action=>”delete”, }, :confirm=>”Are you sure?” link_to( name, url, {html-options})

URL’s genereren link_to(name, url, {html-options}) link_to(“edit post”, { :controller=>…, :action=>…, :id=>…}, …) link_to(“edit post”, urlhelper(id), …)  Link_to(“edit post”, …) Wolter Kaper -

Wolter Kaper - Formulier maken: gebonden aan model FormHelper module, voorbeeldje: {:action => “create”} do |form| %>

Wolter Kaper - Selectbox in formulier FormOptionsHelper module: select(object, attribuut, keuzen, {options}, {html-options}) select(“post”, “person_id”, \ Person.find(:all).collect {|p| [p.name, p.id]}, \ { :include_blank=>true }) options_for_select(container, selected) als je zelf de tag neerzet of als je select_tag helper gebruikt... (zie verder)

Wolter Kaper - Ongebonden formulier FormTagHelper module:...

Wolter Kaper - Ongebonden formulierelementen FormTagHelper module: check_box_tag(...) file_field_tag(...) hidden_field_tag(...) image_submit_tag(...) password_field_tag(...) select_tag(...)...

Wolter Kaper - Validatiefouten tonen ActiveRecordHelper module: error_messages_for(...)  alle foutmeldingen bij elkaar boven- of onderaan je formulier, in Rails layout. error_messages_on( object, accessor, prepend_text=“”, append_text=“”, css_class = “formError” ) 

Wolter Kaper - Routes.rb, URLs, URL-helpers

Wolter Kaper - Routes in routes.rb map.connect ':controller/:action/:id' 3 receptors:  :controller  :action  :id map.connect '/groente/:action/:id' :controller => 'vegetables'  1 statisch onderdeel: 'groente'

Wolter Kaper - Benoemde routes map.groente '/groente/:action/:id' :controller => 'vegetables' URL helper functies: groente_url(id)  complete url groente_path(id)  zonder en hostnaam

Wolter Kaper - Routes volgens REST map.resources :groente maakt in 1x vier benoemde routes: map.groentes '/groentes :controller => 'groentes' map.groente '/groente/:id :controller => 'groentes' map.edit_groente '/groente/:id/edit :controller => 'groentes' map.new_groente '/groente/:id/new :controller => 'groentes' krijg je als je ´n scaffold doet helpers: groentes_path, groente_path(id), new_groente_path, edit_groente_path(id)

Wolter Kaper - Routes naar genest resource map.resources :groente, \ :has_many=> :varieties benoemde routes: '/groente/:groente_id/varieties '/groente/:groente_id/variety/:id '/groente/:groente_id/variety/:id/edit '/groente/:groente_id/variety/:id/new URL helpers, a la: groente_varieties_path(groente_id) groente_variety_path(groente_id, id)

Wolter Kaper - REST routes en controller acties \ HTTP werkwoord URL + Helper GETPOSTPUTDELETE /taaks/1 showupdatedestroy /taaks taaks_path indexcreate /taaks/1/edit edit /taaks/new new_taak_path new

Wolter Kaper - Doelen voor vrijdagmiddag Statische pagina’s af Vormgegeven met stylesheets Vormgeving toegepast op views Beginnen met Ruby programmeren  Paar simpele controllers doen alles al goed  Validatie is toegevoegd  Domeinlogica schrijven, beginnen met…