Slide 1

Slide 1 text

JavaScript Node.js JavaScript - Node.js G¨ okmen G¨ oksel, @gokmen Yazılım M¨ uhendisi Koding III. Programlama G¨ unleri, 2016 Karab¨ uk ¨ Universitesi G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 2

Slide 2 text

JavaScript Node.js Hikaye Dil Yapısı G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 3

Slide 3 text

JavaScript Node.js Hikaye Dil Yapısı Hikaye Netscape tarayıcısı i¸ cinde basit programlama ihtiya¸ clarını kar¸ sılamak ¨ uzere 1995 yılında Brendan Eich tarafından tasarlandı. G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 4

Slide 4 text

JavaScript Node.js Hikaye Dil Yapısı Hikaye Netscape tarayıcısı i¸ cinde basit programlama ihtiya¸ clarını kar¸ sılamak ¨ uzere 1995 yılında Brendan Eich tarafından tasarlandı. Mocha → LiveScript → JavaScript G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 5

Slide 5 text

JavaScript Node.js Hikaye Dil Yapısı Hikaye Netscape tarayıcısı i¸ cinde basit programlama ihtiya¸ clarını kar¸ sılamak ¨ uzere 1995 yılında Brendan Eich tarafından tasarlandı. Mocha → LiveScript → JavaScript Java ile do˘ grudan bir ilgisi yok, ismin sebebi o d¨ onemlerde Java’nın yaygınla¸ smaya ba¸ slaması, tamamen duygusal. G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 6

Slide 6 text

JavaScript Node.js Hikaye Dil Yapısı Hikaye Netscape tarayıcısı i¸ cinde basit programlama ihtiya¸ clarını kar¸ sılamak ¨ uzere 1995 yılında Brendan Eich tarafından tasarlandı. Mocha → LiveScript → JavaScript Java ile do˘ grudan bir ilgisi yok, ismin sebebi o d¨ onemlerde Java’nın yaygınla¸ smaya ba¸ slaması, tamamen duygusal. 1997 yılında Avrupa Bilgisayar ¨ Ureticileri Birli˘ gi (ECMA) standartla¸ stırma s¨ urecine aldı ECMAScript ECMA-262 G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 7

Slide 7 text

JavaScript Node.js Hikaye Dil Yapısı S ¸imdilerde Ba¸ slangı¸ cta basit i¸ slevler yerine getirmesi bekleniyordu G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 8

Slide 8 text

JavaScript Node.js Hikaye Dil Yapısı S ¸imdilerde Ba¸ slangı¸ cta basit i¸ slevler yerine getirmesi bekleniyordu ˙ Ilk s¨ ur¨ um sadece 10 g¨ unde geli¸ stirilmi¸ sti G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 9

Slide 9 text

JavaScript Node.js Hikaye Dil Yapısı S ¸imdilerde Ba¸ slangı¸ cta basit i¸ slevler yerine getirmesi bekleniyordu ˙ Ilk s¨ ur¨ um sadece 10 g¨ unde geli¸ stirilmi¸ sti S ¸imdi daha yetenekli... G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 10

Slide 10 text

JavaScript Node.js Hikaye Dil Yapısı S ¸imdilerde Ba¸ slangı¸ cta basit i¸ slevler yerine getirmesi bekleniyordu ˙ Ilk s¨ ur¨ um sadece 10 g¨ unde geli¸ stirilmi¸ sti S ¸imdi daha yetenekli... Sunucu tarafında ¸ calı¸ sabiliyor, web socket a¸ cabiliyor, donanımdan bilgi alabiliyor... G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 11

Slide 11 text

JavaScript Node.js Hikaye Dil Yapısı S ¸imdilerde Ba¸ slangı¸ cta basit i¸ slevler yerine getirmesi bekleniyordu ˙ Ilk s¨ ur¨ um sadece 10 g¨ unde geli¸ stirilmi¸ sti S ¸imdi daha yetenekli... Sunucu tarafında ¸ calı¸ sabiliyor, web socket a¸ cabiliyor, donanımdan bilgi alabiliyor... Artık bir standart, t¨ um tarayıcılar tarafından destekleniyor. G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 12

Slide 12 text

JavaScript Node.js Hikaye Dil Yapısı S ¸imdilerde Ba¸ slangı¸ cta basit i¸ slevler yerine getirmesi bekleniyordu ˙ Ilk s¨ ur¨ um sadece 10 g¨ unde geli¸ stirilmi¸ sti S ¸imdi daha yetenekli... Sunucu tarafında ¸ calı¸ sabiliyor, web socket a¸ cabiliyor, donanımdan bilgi alabiliyor... Artık bir standart, t¨ um tarayıcılar tarafından destekleniyor. Ta¸ sınabilir cihazlarda, ta¸ sınamayan cihazlarda (buzdolabı gibi) G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 13

Slide 13 text

JavaScript Node.js Hikaye Dil Yapısı Chrome’da Nasıl? Kullanıcı Arabirimi G¨ or¨ unt¨ u Altyapısı Tarayıcı WebKit V8 JavaScript Motoru libXML Eklentiler A˘ g Altyapısı G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 14

Slide 14 text

JavaScript Node.js Hikaye Dil Yapısı Chrome’da Nasıl? Kullanıcı Arabirimi G¨ or¨ unt¨ u Altyapısı Tarayıcı WebKit V8 JavaScript Motoru libXML Eklentiler A˘ g Altyapısı Di˘ gerleri: Carakan - Opera, SpiderMonkey - Firefox, Chakra - Edge G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 15

Slide 15 text

JavaScript Node.js Hikaye Dil Yapısı Genel G¨ or¨ un¨ um 1 var degisken = ’javascript’; 2 function test(degisken) { 3 for (var i = 0; i < 5; i++) { 4 console.log(degisken + i); 5 }; 6 }; 7 test(degisken); 8 var nesne = { 9 sayi : 5, 10 metod : function () { 11 return this.sayi + 5 12 }, 13 dizi : [1, "pi", 3.14] 14 }; 15 console.log(nesne.sayi); 16 console.log(nesne.metod()); 17 console.log(nesne.dizi[1] + " sayisi: ", nesne.dizi[2]); 18 console.log(nesne.olmayan_eleman); Sonu¸ c javascript0 javascript1 javascript2 javascript3 javascript4 5 10 pi sayisi: 3.14 undefined G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 16

Slide 16 text

JavaScript Node.js Hikaye Dil Yapısı undefined, null ve NaN 1 birdegisken 2 var birdegisken = null; birdegisken 3 typeof null 4 typeof undefined 5 null === undefined 6 null == undefined 7 NaN === NaN 8 Number.NaN === NaN 9 isNaN(NaN) 10 isNaN(Number.NaN) "ReferenceError: birdegisken is not defined" null object // ECMAScript tanım hatası, do˘ grusu null undefined false true false false true true G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 17

Slide 17 text

JavaScript Node.js Hikaye Dil Yapısı Veri Tipleri/Operat¨ orler 1 // Sayılar (Numbers) 2 2.998e8 3 100 + 4 * 11 4 (100 + 4) * 11 5 6 // Karakter Dizisi (Strings) 7 "Merhaba D¨ unya" 8 "Merhaba\nD¨ unya" 9 10 "Merhaba" + "D¨ u" + "nya" 11 12 // Mantıksal (Boolean) 13 3 > 1 14 5 != 5 15 "a" == "b" 16 17 // Nesneler (Objects) Her¸ sey 18 a = { b: 5, c: 4 } 19 a.b + a.c 20 21 // Diziler (Arrays) 22 a = [1, "test", 3, function(){ return "hello"; }, 5] 23 a[3]() // 2.998 x 108 = 299,800,000 299800000 144 1144 Merhaba D¨ unya Merhaba D¨ unya Merhaba D¨ unya true false true Object {b: 5, c: 4} 9 [1, "test", 3, function a(), 5] "hello" G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 18

Slide 18 text

JavaScript Node.js Hikaye Dil Yapısı S ¸artlı C ¸alı¸ stırma/D¨ ong¨ uler 1 // If 2 var sayi = 50; 3 if (sayi < 10) 4 console.log("K¨ uc¨ uk"); 5 else if (sayi < 100) 6 console.log("Orta"); 7 else 8 console.log("Buyuk"); 9 10 // While 11 var sayi = 0; 12 while (sayi <= 4) { 13 console.log(sayi); 14 sayi = sayi + 2; 15 }; 16 17 // For 18 for (var sayi = 0; sayi <= 4; sayi++) 19 console.log(sayi); // If Orta // While 0 2 4 6 // For 0 1 2 3 4 G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 19

Slide 19 text

JavaScript Node.js Hikaye Dil Yapısı Fonksiyonlar/Prototipler 1 // Asal sayı kontrol¨ u 2 function asalmi(sayi) { 3 for(var i = 2; i < sayi; i++) { 4 if(sayi % i === 0) { 5 return false; 6 } 7 } 8 return sayi > 1; 9 } 10 console.log(asalmi(7)); 11 console.log(asalmi(12)); 12 console.log(asalmi(15487457)); 13 14 // Prototipler 15 var a = 7; 16 console.log(typeof a); 17 18 Number.prototype.asalmi = function(){ 19 return asalmi(this); 20 } 21 22 console.log(a.asalmi()); true //<-- asalmi(7) false //<-- asalmi(12) true //<-- asalmi(15487457) number //<-- typeof a true //<-- a.asalmi() G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 20

Slide 20 text

JavaScript Node.js Hikaye Dil Yapısı Kapsam (Scope) var neden ¨ onemli? 1 var x = "disarisi"; 2 3 var f1 = function() { 4 var x = "f1in icinde"; 5 }; 6 f1(); 7 console.log(x); 8 9 var f2 = function() { 10 x = "f2nin icinde"; 11 }; 12 f2(); 13 console.log(x); disarisi f2nin icinde G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 21

Slide 21 text

JavaScript Node.js Hikaye Dil Yapısı Kapsam (Scope) var neden ¨ onemli? 1 var x = "disarisi"; 2 3 var f1 = function() { 4 var x = "f1in icinde"; 5 }; 6 f1(); 7 console.log(x); 8 9 var f2 = function() { 10 x = "f2nin icinde"; 11 }; 12 f2(); 13 console.log(x); disarisi f2nin icinde var x = ”disarisi” global function f2 x = ”f2nin icinde” function f1 var x = ”f1in icinde” G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 22

Slide 22 text

JavaScript Node.js Hikaye Dil Yapısı Sorular? G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 23

Slide 23 text

JavaScript Node.js Hikaye Peki Nasıl? G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 24

Slide 24 text

JavaScript Node.js Hikaye Peki Nasıl? Hikaye JavaScript’i Tarayıcıdan C ¸ıkartalım Sunucu tarafında web uygulamaları i¸ cin geli¸ stirilmi¸ s bir ¸ calı¸ stırma ortamı. A¸ cık Kaynak kodlu ve hali hazırda bir¸ cok platform tarafından destekleniyor (Linux, Mac OS X, Windows, Unix, BSD* etc.) G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 25

Slide 25 text

JavaScript Node.js Hikaye Peki Nasıl? Hikaye JavaScript’i Tarayıcıdan C ¸ıkartalım Sunucu tarafında web uygulamaları i¸ cin geli¸ stirilmi¸ s bir ¸ calı¸ stırma ortamı. A¸ cık Kaynak kodlu ve hali hazırda bir¸ cok platform tarafından destekleniyor (Linux, Mac OS X, Windows, Unix, BSD* etc.) Ryan Dahl tarafından 2009 yılında geli¸ stirilmeye ba¸ slandı. S ¸u anda Node.js vakfı tarafından finanse ediliyor ve Linux Vakfı’nın da ¨ uye kurulu¸ sları arasında. G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 26

Slide 26 text

JavaScript Node.js Hikaye Peki Nasıl? Hikaye JavaScript’i Tarayıcıdan C ¸ıkartalım Sunucu tarafında web uygulamaları i¸ cin geli¸ stirilmi¸ s bir ¸ calı¸ stırma ortamı. A¸ cık Kaynak kodlu ve hali hazırda bir¸ cok platform tarafından destekleniyor (Linux, Mac OS X, Windows, Unix, BSD* etc.) Ryan Dahl tarafından 2009 yılında geli¸ stirilmeye ba¸ slandı. S ¸u anda Node.js vakfı tarafından finanse ediliyor ve Linux Vakfı’nın da ¨ uye kurulu¸ sları arasında. JS yorumlamak i¸ cin Google’ın Chrome ile birlikte geli¸ stirdi˘ gi V8 JavaScript motorunu kullanıyor. G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 27

Slide 27 text

JavaScript Node.js Hikaye Peki Nasıl? Hikaye JavaScript’i Tarayıcıdan C ¸ıkartalım Sunucu tarafında web uygulamaları i¸ cin geli¸ stirilmi¸ s bir ¸ calı¸ stırma ortamı. A¸ cık Kaynak kodlu ve hali hazırda bir¸ cok platform tarafından destekleniyor (Linux, Mac OS X, Windows, Unix, BSD* etc.) Ryan Dahl tarafından 2009 yılında geli¸ stirilmeye ba¸ slandı. S ¸u anda Node.js vakfı tarafından finanse ediliyor ve Linux Vakfı’nın da ¨ uye kurulu¸ sları arasında. JS yorumlamak i¸ cin Google’ın Chrome ile birlikte geli¸ stirdi˘ gi V8 JavaScript motorunu kullanıyor. C, C++ ve JavaScript ile geli¸ stiriliyor, kendi paket y¨ onetim sistemi NPM (Node Package Manager) ’de 250.000’e yakın paket bulunmakta. NPM G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 28

Slide 28 text

JavaScript Node.js Hikaye Peki Nasıl? G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 29

Slide 29 text

JavaScript Node.js Hikaye Peki Nasıl? Peki Nasıl? Node.js tekil i¸ s par¸ cacıkları (threads) ¨ uzerinde ¸ calı¸ sabiliyor fakat e¸ ssamansız girdi/¸ cıktı hareketlerine olanak sa˘ glayan bir altyapıya dayanır. G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 30

Slide 30 text

JavaScript Node.js Hikaye Peki Nasıl? Peki Nasıl? Node.js tekil i¸ s par¸ cacıkları (threads) ¨ uzerinde ¸ calı¸ sabiliyor fakat e¸ ssamansız girdi/¸ cıktı hareketlerine olanak sa˘ glayan bir altyapıya dayanır. Temeldeki en ¨ onemli bile¸ sen t¨ um platformlara destek veren libuv kitaplı˘ gı. libuv ile i¸ sletim sisteminin ve dosya sisteminin olanaklarını kullanarak e¸ szamansız bir akı¸ s d¨ ong¨ us¨ u (event loop) yaratılır. G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 31

Slide 31 text

JavaScript Node.js Hikaye Peki Nasıl? Peki Nasıl? Node.js tekil i¸ s par¸ cacıkları (threads) ¨ uzerinde ¸ calı¸ sabiliyor fakat e¸ ssamansız girdi/¸ cıktı hareketlerine olanak sa˘ glayan bir altyapıya dayanır. Temeldeki en ¨ onemli bile¸ sen t¨ um platformlara destek veren libuv kitaplı˘ gı. libuv ile i¸ sletim sisteminin ve dosya sisteminin olanaklarını kullanarak e¸ szamansız bir akı¸ s d¨ ong¨ us¨ u (event loop) yaratılır. Tekil bir akı¸ s d¨ ong¨ us¨ u i¸ s listesinde bir¸ seyler oldu˘ gu s¨ urece ¸ calı¸ smaya devam eder. G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 32

Slide 32 text

JavaScript Node.js Hikaye Peki Nasıl? Peki Nasıl? Node.js tekil i¸ s par¸ cacıkları (threads) ¨ uzerinde ¸ calı¸ sabiliyor fakat e¸ ssamansız girdi/¸ cıktı hareketlerine olanak sa˘ glayan bir altyapıya dayanır. Temeldeki en ¨ onemli bile¸ sen t¨ um platformlara destek veren libuv kitaplı˘ gı. libuv ile i¸ sletim sisteminin ve dosya sisteminin olanaklarını kullanarak e¸ szamansız bir akı¸ s d¨ ong¨ us¨ u (event loop) yaratılır. Tekil bir akı¸ s d¨ ong¨ us¨ u i¸ s listesinde bir¸ seyler oldu˘ gu s¨ urece ¸ calı¸ smaya devam eder. G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 33

Slide 33 text

JavaScript Node.js Hikaye Peki Nasıl? Akı¸ s D¨ ong¨ us¨ u G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 34

Slide 34 text

JavaScript Node.js Hikaye Peki Nasıl? Dosya Sistemi 1 var fs = require(’fs’); 2 var sayi = undefined; 3 4 // birArttir fonksiyonu her ¸ calı¸ stırıldı˘ gında 5 // sayi.txt’nin i¸ ceri˘ gindeki sayının bir fazlasını verecektir. 6 7 function birArttir() { 8 fs.readFile(’sayi.txt’, function (err, dosyaIcerigi) { 9 sayi = parseInt(dosyaIcerigi); 10 sayi++; 11 }) 12 }; 13 14 // ¸ calı¸ stırıldı˘ gında ekrana ‘undefined‘ basmasını bekleriz 15 // ¸ c¨ unk¨ u okuma i¸ slemi e¸ szamansız bir i¸ slem ve o i¸ slem bitip 16 // ona parametre olarak verdi˘ gimiz fonksiyonu 17 // ¸ ca˘ gırana kadar sayi ‘undefined‘ olmaya devam edecek. 18 19 birArttir(); 20 21 console.log(sayi); G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 35

Slide 35 text

JavaScript Node.js Hikaye Peki Nasıl? Basit bir Node.js Sunucusu G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 36

Slide 36 text

JavaScript Node.js Hikaye Peki Nasıl? Kimler kullanıyor? Koding PayPal Uber Netflix LinkedIn Microsoft ve di˘ gerleri... G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js

Slide 37

Slide 37 text

JavaScript Node.js Hikaye Peki Nasıl? Sorular - Te¸ sekk¨ urler G¨ okmen G¨ oksel - [email protected] gokmen.goksel.me github.com/gokmen twitter.com/gokmen speakerdeck.com/gokmen G¨ okmen G¨ oksel, @gokmen JavaScript - Node.js