23

Click here to load reader

Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

  • Upload
    sovelto

  • View
    2.535

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Palvelujen ohjelmointi JavaScriptillä* Node.js* TypeScript

Ahti HaukilehtoSovelto

Microsoft Regional Director, FinlandMicrosoft Certified TrainerProfessional Scrum Trainer

Page 2: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Sisältö

• Miksi JavaScript palvelimessa?

• Mitä on Node.js?

• Mitä on TypeScript?

2

Page 3: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Miksi JavaScript myös palvelimessa?

• Sama ohjelmointikieli ja osittain sama ohjelmointiympäristö kuin työasemassa

• Alustariippumattomuus

• KISS

• Open Source

3

Page 4: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Miksi ei?

• Palvelinympäristö on usein staattinen, tarvitaanko palvelinpäässä alustariippumattomuutta

• Laaja integrointitarve, valmiit komponentit (muita kuin JS)

• Valmiimpi kehitysympäristö

• Sovellusarkkitehtuurin selkeys – voi olla etu, että UX on täysin eriytetty palvelujen toteuttamisesta

4

Page 5: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Node.js

5

Page 6: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Node.js in brief source: JSConf 2009

JSConf 2009

• Server-side Javascript

• Built on Google’s V8

• Evented, non-blocking I/O. Similar to EventMachine or Twisted.

• CommonJS module system.

• 8000 lines of C/C++, 2000 lines of Javascript, 14 contributors.

6

Page 7: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Mitä on node.js?

• JavaScript palvelimessa

• Event driven I/O

• Yksisäikeinen suoritus, kaikki requestit ajetaan samalla säikeellä

• Tehokas ja skaalautuva• usean coren käyttö edellyttää toimenpiteitä

Page 8: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Node.js sisältö

• libuv – a high performance cross-platform evented I/O library

• V8 – Google’s JavaScript engine (the same that is used in Chrome)

• JavaScript ja C++ koodia

Nämä yhdessä muodostavat Node.js:n

Page 9: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Node.js asentaminen

• "Normaali" asennus• http://nodejs.org/• Asennusohjelmat Windowsille, OS X:lle ja muutamalle Linuxille• Myös lähdekoodi on saatavilla• Tarvittaessa github:sta saa halutun version

• "Azure"-asennus Node.js SDK• Mikäli halutaan Azure Storage-modulit ja hieman suoraviivaisempi Azure-

integrointi. • http://www.windowsazure.com/en-us/downloads/?sdk=node

• IISNode – IIS:n ja Node.js:n integrointi• https://github.com/tjanczuk/iisnode

9

Page 10: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Editors & Debuggers

• Cloud9 IDE https://c9.io/

• WebStorm http://www.jetbrains.com/webstorm/

• Komodo IDE http://www.activestate.com/komodo-ide

• ExlipseJS https://portawiki.abnoctus.com/view/NodeIDE.html

• And many many others

On Windows (Microsoft)

• Web Matrix

• Visual Studio 2013 (osittain)

• IISNode, sisältää myös debuggauksen

Page 11: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Node.js – Evented IO

• Kaikki IO – ja yleensäkin kaikki, mikä voi kestää – suoritetaan asynkronisesti• Node.js:n oma libuv-kirjasto on toteutettu näin• Oma koodi pitäisi tehdä näin• Kirjastot on tehty näin

• Luontevaa JavaScript –ohjelmoinnissa• Mutta vähemmän luontevaa muille puolipiste-kieliä käyttäville

• Useita toteutustapoja• Eventloop• Callback• Publish/Subscribe• Stream

11

Page 12: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Modulit

• Node.js –sovellus voi käyttää ulkopuolisia moduleja.

• Moduulit ovat yleensä sovelluksen hakemistossa erillisissä tiedostoissa

Modulien lähteet

1. Built-in Modules• esim. fs, http, crypto, os• Käyttöönotto: var fs = require(‘fs’);

2. Projektissa tehdyt modulit• jokainen .js –tiedosto on oma modulinsa• modulissa exportoidaan se, mitä halutaan näyttää ulkopuolelle• Käyttöönotto: var bar = require(‘../lib/bar’);

3. Kolmannen osapuolten modulit Node Package Manager (NPM) –rekisteristä https://npmjs.org/• Asennetaan npm install 'module name' –komennolla• Käyttöönotto: var request = require(‘request’);

12

Page 13: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Mihin node.js soveltuu

• Voiko koko web-sivuston tehdä node:lla• Kyllä voi http://nodejs.org/industry/• Mutta tarviihan se ison panostuksen

• Luontevinta siellä, missä Node.js:n edut ovat merkittäviä• suorituskyky• JavaScript• alustariippumattomuus

13

Page 14: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

TypeScript

14

Page 15: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

JavaScript

• Laajojen, ylläpidettävien (== enterprise scale) JS-sovellusten tekeminen on haastavaa, ellei mahdotonta• moni näistä haasteista kulminoituu tyyppijärjestelmän puuttumiseen

• intellisense-haste• kontrahtien tekemisen haste• käännösaikaisen tarkastamisen haasteet

• JS-kielen haasteet• === on monelle kehittäjälle tuntematon• this / closure –käsitteistä puhumattakaan

• JS modulointi on haastavaa

• Mutta se on välttämätön kieli alustariippumattomien client-sovellusten tekemiseen• joka BYOD-aikakaudella on välttämätöntä enterprise-sovelluskehityksessä

• JS:n tuki niin alustoiden kuin open-source kirjastojen puolesta on ylivoimainen

15

Page 16: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

TypeScript

• TypeScript tuo kehitys- ja käännösaikaisen tyyppijärjestelmän JS:n päälle

• JavaScript-koodi on sellaisenaan myös TypeScript-koodia• Valid JavaScript is valid TypeScript• Olemassa oleva JavaScript.js –tiedosto voidaan nimetä .ts –tiedostoksi ja kaikki

toimii

• TypeScript-kääntäjä tsc.exe kääntää .ts-tiedoston JavaScript:ksi• Visual Studiossa tiedoston tallentamisen yhteydessä• Käännöksen yhteydessä paljastuu kaikki tyyppitarkastuksessa havaitut virheet• TypeScript-koodi toimii siis kaikilla alustoilla, kaikissa käyttiksissä, kaikissa

selaimissa

• Kehitysaikainen tyyppijärjestelmä mahdollistaa hyvän välinetuen (intellisense)• TypeScript on ainoastaan kehitysaikainen tyyppijärjestelmä, käännöksen jälkeen

ei ole mitään tarkistusta – sehän on vain JavaScript –koodia• Kehittimiä: Visual Studio 2012 2013, Emacs, Vi,

http://www.typescriptlang.org/Playground/

• TypeScript on open-source –projekti• http://www.typescriptlang.org 16

Page 17: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

TypeScript ja vastaavat muut tuotteet

• CoffeeScript, DART, Ecma Script 6 (kun valmistuu, TS tukee)http://smthngsmwhr.wordpress.com/2013/02/25/javascript-and-friends-coffeescript-dart-and-typescript/

17

Page 18: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

TS koodin modulointi

18

Module

Class

FieldsConstructorPropertiesFunctions

Interface

Page 19: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Tyyppijärjestelmä

19

Page 20: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Tyypin määrittely – Type Annotations ja Inference

// type Annotation

var num1: number = 7;

var num2: number;

// type inference, tyypin päättely käytön perusteella

// käytetään myös nimeä Contextual Typing

var num3 = 7;

var num4 = FunktioJokaPalauttaaNumberin( );

• Tyyppi on olemassa vain kehitysaikana,käännöstuotoksessa (JavaScript) sitä ei ole

• Tyypittäminen on täysin vapaaehtoista• mutta _erittäin_ suositeltavaa• Type Annotationia tarvitaan kuitenkin melko harvoin, Contextual Typing _toimii_

Page 21: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Rajapinta callback-määrittelyssä

• Rajapinnan avulla voidaan esitellä callback-metodin rakenne

21

interface IMoottori {

start(callback: (nimi:string, käynnistyi: boolean) =>void): void;

stop(callback: (nimi:string, sammutustapa: string) =>void): void;

}

Moottorilla tulee olla start ja stop-funktiot

start() –metodi saa yhden parametrin, nimeltään callback

callback-parametriksi on annettava funktio, joka hyväksyy nimi- ja käynnistyi-

parametrit. Tyyppiturvallinen!

callback() ei palauta mitään

start() ei palauta mitään

Page 22: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Callback-rajapintaisen olion käyttäminen

• Intellisense

22

intellisense pelittää ja kääntäjä tarkastaa

var am = new AutoMoottori('BMW V8');am.start( (nimi: string, käynnistyi: boolean) =>

alert(nimi + " käynnissä:" + käynnistyi));

am.stop( (nimi, tapa) => alert(nimi + ':' + tapa));

Page 23: Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript

Mihin TypeScript sopii

• Kaikkeen JavaScript –ohjelmointiin

• Luontevinta siellä, missä “koko” sovellus tehdään JavaScriptillä• suuri sovellus• tarvitaan rajapintoja• käytetään IDEä

23