SlideShare ist ein Scribd-Unternehmen logo
JSTF-Workshop
Teil 1
Heute
Web2.0
JSTF-Workshop Teil 1
JSTF-Workshop Teil 1
Browser-Abstraktion
JavaScript wird cool
“World‘s most popular
Programming Language”
              Douglas Crockford
Eigentlich alles feini-fein…
“World‘s most
misunderstood
Programming Language”
              Douglas Crockford
“Lisp in C‘s clothing”
                 Douglas Crockford
Schlechte Vergangenheit
Gestern
JS ist gefährlich!
DHTML
XMLHttpRequest
Alert Debugging
Dilettantentum
Fehlende Literatur
Geheimwissen
Eigentlich Geschichte…
Professionalität
Fachliteratur
Wissensaustausch
Kryptographie
JSTF-Workshop Teil 1
Weg von der Bastellösung
Bausatz für Zeitmaschine?
Zukunft
Google Wave
Editor für die Cloud
JSTF
Good Parts / Professional Grade JS
Werkzeuge
Strategien

Blick für's Ganze
Flexiblere Teams
Workshop

Beispiele aus dem Programmieralltag
Diskussion
Refactoring
JavaScript

‣ functions are first class objects
‣ dynamisch typisierte Sprache
‣ mächtige Objekt-Literal-Syntax
‣ Prototyp-basierte Vererbung
Mini-Javascript-

‣ in vielen Anwendungen zu sehen

‣ JavaScript erlaubt vieles, verzeiht wenig
Was passiert hier?

0 == '0'   => ?

'' == '0' => ?

0 == ''    => ?
Das hier

0 == '0' => true

'' == '0' => false

0 == ''   => true
So geht‘s richtig

0 === '0' => false

'' === '0' => false

0 === ''   => false
Best practice für
Vergleich
Verwende standardmäßig immer
=== statt == bzw. !== statt !=
Was passiert hier?

return
{
   status: true
};
Das Semikolon ;-)
‣ Automatisches Einfügen

‣ Keine Warnung

‣ Also immer dran denken ein ;-)
 einzufügen
Was passiert hier?

parseInt("16");

parseInt("16 tons");

parseInt("08");
Na wusstet ihr das?

parseInt("16");      => 16

parseInt("16 tons"); => 16

parseInt("08");      => 0    Hääääääh?!
parseInt und der


parseInt("08") => parseInt("08", 10)
Na, brauchst du einen
Taschenrechner?

0.1 + 0.2 === ?
Bei Geld ist nicht zu
spaßen

 0.1 + 0.2 === 0.30000000000000004
So ist richtig


 ((0.1 * 10) + (0.2 * 10)) / 10 = 0.3
Zahlen für
Fortgeschrittene: NaN
‣ Not a Number
‣ +'0' ist eine Zahl
‣ +'oops' ist NaN
Test auf NaN

typeof NaN === 'number' => ?

NaN === NaN   => ?

NaN !== NaN => ?
Test auf NaN

typeof NaN === 'number' => true

NaN === NaN   => false

NaN !== NaN => true
Test auf NaN richtig
isNaN(NaN)      =>   true
isNaN(0)        =>   false
isNaN('oops')   =>   true
isNaN('0')      =>   false


isFinite()   noch besser
Menschen machen
‣ Jeder kann mal ein Semikolon vergessen

‣ Keine JavaScript-Tests (zumindest in
 unseren Projekten)

‣ JSLint for the rescue

Weitere ähnliche Inhalte

Andere mochten auch

Alimentación saludable y sostenible
Alimentación saludable y sostenibleAlimentación saludable y sostenible
Alimentación saludable y sostenible
javivela
 
Infoveranstaltung MAS Social Informatics
Infoveranstaltung MAS Social InformaticsInfoveranstaltung MAS Social Informatics
Infoveranstaltung MAS Social Informatics
ingos
 
Tecnología industrial
Tecnología industrialTecnología industrial
Tecnología industrial
paginawebcovarrubias
 
365 Al Añ[1]..
365 Al Añ[1]..365 Al Añ[1]..
365 Al Añ[1]..
Melisking
 
Física
FísicaFísica
Acuarelas
AcuarelasAcuarelas
Acuarelas
Melisking
 
Presentacion diplomado b-learning
Presentacion diplomado b-learningPresentacion diplomado b-learning
Presentacion diplomado b-learning
Juan Paniagua
 

Andere mochten auch (7)

Alimentación saludable y sostenible
Alimentación saludable y sostenibleAlimentación saludable y sostenible
Alimentación saludable y sostenible
 
Infoveranstaltung MAS Social Informatics
Infoveranstaltung MAS Social InformaticsInfoveranstaltung MAS Social Informatics
Infoveranstaltung MAS Social Informatics
 
Tecnología industrial
Tecnología industrialTecnología industrial
Tecnología industrial
 
365 Al Añ[1]..
365 Al Añ[1]..365 Al Añ[1]..
365 Al Añ[1]..
 
Física
FísicaFísica
Física
 
Acuarelas
AcuarelasAcuarelas
Acuarelas
 
Presentacion diplomado b-learning
Presentacion diplomado b-learningPresentacion diplomado b-learning
Presentacion diplomado b-learning
 

Ähnlich wie JSTF-Workshop Teil 1

Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und Lambdas
Nane Kratzke
 
Von Automaten zu Programmen–Parsergeneratoren und Attributgrammatiken
Von Automaten zu Programmen–Parsergeneratoren und AttributgrammatikenVon Automaten zu Programmen–Parsergeneratoren und Attributgrammatiken
Von Automaten zu Programmen–Parsergeneratoren und Attributgrammatiken
Tim Furche
 
JavaScript Security
JavaScript SecurityJavaScript Security
JavaScript Security
Johann-Peter Hartmann
 
JavaScript Security
JavaScript SecurityJavaScript Security
JavaScript Security
Mayflower GmbH
 
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfOSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
NETWAYS
 
GPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von SoftwareprojektenGPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von Softwareprojekten
Frank Düsterbeck
 
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenSEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
Dr. Herwig Henseler
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
Mayflower GmbH
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
QAware GmbH
 
Designpatterns in Ruby
Designpatterns in RubyDesignpatterns in Ruby
Designpatterns in Ruby
pfleidi
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
QAware GmbH
 

Ähnlich wie JSTF-Workshop Teil 1 (11)

Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und Lambdas
 
Von Automaten zu Programmen–Parsergeneratoren und Attributgrammatiken
Von Automaten zu Programmen–Parsergeneratoren und AttributgrammatikenVon Automaten zu Programmen–Parsergeneratoren und Attributgrammatiken
Von Automaten zu Programmen–Parsergeneratoren und Attributgrammatiken
 
JavaScript Security
JavaScript SecurityJavaScript Security
JavaScript Security
 
JavaScript Security
JavaScript SecurityJavaScript Security
JavaScript Security
 
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfOSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
 
GPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von SoftwareprojektenGPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von Softwareprojekten
 
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenSEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
 
Designpatterns in Ruby
Designpatterns in RubyDesignpatterns in Ruby
Designpatterns in Ruby
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
 

JSTF-Workshop Teil 1

Hinweis der Redaktion

  1. -functions are first class objects: --> JavaScript hat mehr Ähnlichkeit zu Lisp oder Scheme als zu Java --> Stichwort Closures (Closures konservieren ihren Kontext) --> macht JavaScript zu einer sehr mächtigen Programmiersprache -dynamisch typisierte Sprache: -->kein Compiler --> erst zur Laufzeit werden Typ-Fehler sichtbar -mächtige Objekt-Literal-Syntax -->können einfach durch Auflistung ihrer Komponenten erstellt werden, d.h. keine Definition von Klassen und Konstruktoren notwendig -->Syntax war Inspiration für JSON-Format -protoytp-basierte Vererbung: --> JS ist ein klassenloses System --> mächtig, aber ungewohnt für klassische OOler (wie Ruby oder Java)
  2. -Viele der vorgestellten Beispiele werden aus Unwissenheit oder aus intuitiv gemacht, weil man es aus anderen Programmiersprachen kennt bzw. so erwartet
  3. - == versucht die Operanden automatisch zu konvertieren, wenn sie unterschiedliche Typen haben
  4. -es wird „undefined“ statt ein Objekt mit der Property Status zurückgegeben -undefined ist nicht null
  5. -JavaScript versucht fehlerhafte Programme automatisch zu fixen
  6. parseInt konvertiert einen String in einen Integer
  7. -Sobald parseInt auf ein Nicht-Zahl Zeichen trifft hört es auf zu parsen -Leider gibt es keine Möglichkeit auf den nicht geparsten Teil zuzugreifen (z.B. tons) -Ja das letzt ist 0. So einfach können Datums- oder Zeit-Angaben also nicht geparsed werden
  8. -Der 2. Parameter gibt die Basis an -Bei „08“ ohne Radix-Parameter wird als Zahlenbasis 8 verwendet
  9. Folge der Kompatibilität zum IEEE Standard for Binary Floating Point Arithmetic
  10. -ja richtig, 3 -Hab beide Varianten selbst im FF-Browser ausprobiert.
  11. + ,0‘ wird autokonvertiert ,+‘ ist hier der Vorzeichenoperator + ,oops‘ kann nicht autokonvertiert werden
  12. isFinite noch besser zum Testen ob etwas eine Zahl ist, da zusätzlich auf Infinity geprüft wird
  13. -Ruby hat wie JavaScript keinen Compiler. -Trotzdem treten in unseren Ruby-Programmen eigentlich solche Fehler wie ein Semikolon (bei uns ein END) zu vergessen nie auf. -Dies ist der hohen Test-Abdeckung von unserem Ruby-Code zu verdanken.