SlideShare a Scribd company logo
LET ECMASCRIPT = 6LET ECMASCRIPT = 6
Wiktor Toporek
O MNIEO MNIE
Blog:
Na co dzień PHP i JS
Inspirują mnie inne języki programowania i podejścia
http://wiktortoporek.name/blog
WSTĘPWSTĘP
ECMASCRIPT VS JSECMASCRIPT VS JS
Podzbiór JS
JS implementuje ES
ES5 / ES5.1ES5 / ES5.1
Metody Object.*:
.create(),
.defineProperty(), ...
Natywny support JSONa
Metody w Arrayach:
.forEach(),
.map(),
.filter(), ...
ES6ES6
Źródło: http://reddit.com/r/gifs
FICZERY ES6FICZERY ES6
AGENDAAGENDA
1. Arrow functions
2. let & const
3. Template strings
4. Destrukturyzacja
5. class
6. Promise
7. Moduły
ARROW FUNCTIONSARROW FUNCTIONS
() => {}() => {}
Źródło obrazka: http://www.bronzemoonoutdoors.com.au
/* examples/arrow/01-filter.js */
var numbers = [1, 2, 3, 4, 5, 6];
var even = numbers.filter(function(x) {
return x % 2 == 0;
});
console.log(even); //[ 2, 4, 6 ]
/* examples/arrow/02-arrow-filter.js */
var numbers = [1, 2, 3, 4, 5, 6];
var even = numbers.filter(x => x % 2 == 0);
console.log(even); //[ 2, 4, 6 ]
PROSTA SKŁADNIAPROSTA SKŁADNIA
x => x * 2
function(x) {return x * 2;}
WIELE ARGUMENTÓWWIELE ARGUMENTÓW
(x, y) => x + y
function(x, y) {return x + y;}
BRAK ARGUMENTÓWBRAK ARGUMENTÓW
() => 2 + 2
function() {return 2 + 2;}
BARDZIEJ ZŁOŻONE CIAŁO FUNKCJIBARDZIEJ ZŁOŻONE CIAŁO FUNKCJI
(x, y) => {
console.log(x);
return x+y;
}
function(x, y) {
console.log(x);
return x+y;
}
NIE TYLKONIE TYLKO
"SYNTACTIC SUGAR""SYNTACTIC SUGAR"
Źródło obrazka: https://en.wikipedia.org/wiki/Sugar
/* examples/arrow/03-buggy-timer.js */
var Timer = function() {
this.secs = 0;
};
Timer.prototype.start = function() {
setInterval(function() {
this.secs++;
}, 1000);
};
var timer = new Timer();
timer.start();
"let ECMAScript = 6"
/* examples/arrow/04-corrected-timer.js */
var Timer = function() {
this.secs = 0;
};
Timer.prototype.start = function() {
var that = this;
setInterval(function() {
that.secs++;
}, 1000);
};
var timer = new Timer();
timer.start();
/* examples/arrow/05-arrow-func-timer.js */
var Timer = function() {
this.secs = 0;
};
Timer.prototype.start = function() {
setInterval(() => {this.secs++;}, 1000);
};
var timer = new Timer();
timer.start();
LETLET && CONSTCONST
Źródło obrazka: https://www.flickr.com/photos/mtip/4562826679
/* examples/letnconst/01-tricky-async-var.js */
for (var i=1; i <= 10; ++i) {
setTimeout(function() {console.log(i);}, i * 1000);
}
/* examples/letnconst/02-tricky-async-var-corrected.js */
for (var i=1; i <= 10; ++i) {
(function(i) {
setTimeout(function() {console.log(i);}, i * 1000);
})(i);
}
/* examples/letnconst/03-let.js */
"use strict";
for (let i=1; i <= 10; ++i) {
setTimeout(function() {console.log(i);}, i * 1000);
}
/* examples/letnconst/04-let-in-if.js */
"use strict";
if (true) {
let foo = 'bar';
}
console.log(foo); // ReferenceError: foo is not defined
var - function scope
let - block (if, for, etc) scope
/* examples/letnconst/05-tricky-var.js */
var x = 'foo';
(function() {
console.log(x);
var x = 'bar';
})();
/* examples/letnconst/06-tricky-var-explained.js */
var x = 'foo';
(function() {
var x;
console.log(x);
x = 'bar';
})();
/* examples/letnconst/07-beware-tdz.js */
'use strict';
let foo = 'bar';
if (true) {
console.log(foo); /* ReferenceError (due to Temporal Dead Zone)*/
let foo = 'bar';
}
CONSTCONST
/* examples/letnconst/08-const.js */
const x = 1;
x++;
console.log(x); //1
/* examples/letnconst/09-const-strict.js */
"use strict";
const x = 1;
x++; /*SyntaxError*/
console.log(x);
Źródło: http://reddit.com/r/gifs
/* examples/letnconst/10-const-object.js */
const obj = {x: 1, y: 2};
console.log(obj); /*Object {x: 1, y: 2}*/
obj.x = 'foo!';
console.log(obj); //Object {x: "foo!", y: 2} :-(
TEMPLATE STRINGSTEMPLATE STRINGS
Źródło obrazka: https://www.flickr.com/photos/alexfiles/3106114417
/* examples/template-strings/01-classic-string-concat.js */
var firstName = 'John';
var lastName = 'Doe';
var fullName = firstName + ' ' + lastName;
console.log(fullName);
/* examples/template-strings/02-template-string.js */
var firstName = 'John';
var lastName = 'Doe';
var fullName = `${firstName} ${lastName}`;
console.log(fullName);
/* examples/template-strings/03-template-string-multiline.js */
var multilineText = `first line
second
third
`;
console.log(multilineText);
/*
Output:
first line
second
third
*/
DESTRUKTURYZACJADESTRUKTURYZACJA
Źródło obrazka: http://www.autoevolution.com/news/stunning-deconstruction-of-f1-car-at-
mercedes-benz-world-32294.html
/* examples/destruct/01-destruct.js */
/*Arrays*/
var [el1, , el3] = [1, 2, 3];
console.log(el1, el3); /*1 3*/
/*Objects*/
var john = {
firstName: 'John',
lastName: 'Doe'
};
var {firstName, lastName} = john;
console.log(firstName, lastName); /*John Doe*/
/* examples/destruct/02-spread.js */
var head, rest;
[head, ...rest] = [1, 2, 3, 4, 5];
console.log(head); /*1*/
console.log(rest); /*[2, 3, 4, 5]*/
var array1 = [1,2,3],
array2 = [4,5,6];
/*ES5: array1.push.apply(array1, array2);*/
array1.push(...array2);
console.log(array1); //[1,2,3,4,5,6]
/* examples/destruct/03-func-many-params.js */
function ajax(url, method, async, headers) {
if (method === undefined) {
method = 'get';
}
if (async === undefined) {
async = true;
}
if (headers === undefined) {
headers = {};
}
console.log(method, url, async ? 'async' : 'sync');
console.log('headers:', headers);
}
/*
get http://google.com sync
headers: {}
*/
ajax('http://google.com', 'get', false);
/* examples/destruct/04-func-params-es6.js */
function ajax({url, method = 'get', async = true, headers = {}}) {
console.log(method, url, async ? 'async' : 'sync');
console.log('headers:', headers);
}
/*
get http://google.com sync
headers: {}
*/
ajax({url: 'http://google.com', async: false});
CLASSCLASS
Źródło obrazka: http://cufflinkedmag.com/2014/07/14/keepin-it-classy-7-things-you-will-never-see-
in-cufflinked-magazine/
/* examples/class/01-es5.js */
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
Person.prototype.say = function(what) {
console.log(this.firstName+' '+this.lastName+' says: '+what);
};
var john = new Person('John', 'Doe');
john.say('Hello!');
/* examples/class/02-es6.js */
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
say(what) {
console.log(`${this.firstName} ${this.lastName} says: ${what}`);
}
}
var john = new Person('John', 'Doe');
john.say('Hello!');
/* examples/class/03-inheritance.js */
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
getFullName() {
return [this.firstName, this.lastName].join(' ');
}
toString() {
return 'Person ' + this.getFullName();
}
}
class Employee extends Person {
constructor(firstName, lastName, jobTitle) {
super(firstName, lastName);
this.jobTitle = jobTitle;
}
toString() {
return `${super.toString()} (${this.jobTitle})`;
}
}
var john = new Person('John', 'Doe');
var wiktor = new Employee('Wiktor', 'Toporek', 'PHP Programmer');
console.log(john.toString()); /*Person: John Doe*/
console.log(wiktor.toString()); //Person: Wiktor Toporek (PHP Programmer)
/* examples/class/04-dynamic-inheritance.js */
const CarMixin = {
ride() {
console.log('Riding...');
}
};
const SailingMixin = {
sail() {
console.log('Sailing...')
}
};
function mixin(...mixins) {
var base = function() {};
Object.assign(base.prototype, ...mixins);
return base;
}
class Amphibian extends mixin(CarMixin, SailingMixin) {}
var amphibian = new Amphibian();
amphibian.ride(); /*Riding...*/
amphibian.sail(); /*Sailing...*/
/* examples/class/05-gettersnsetters.js */
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
this._scale = 1;
}
get area() {
return this.width * this.height;
}
set scale(newScale) {
var prevScale = this._scale;
this._scale = newScale;
this.width *= newScale / prevScale;
this.height *= newScale / prevScale;
}
get scale() {
return this._scale;
}
}
var rect = new Rectangle(10, 10);
console.log(rect.area); /*100*/
rect.scale = 0.5;
console.log(rect.area); /*25*/
rect.scale = 1;
console.log(rect.area); //100
/* examples/class/06-static.js */
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
static distance(a, b) {
const dx = a.x - b.x;
const dy = a.y - b.y;
return Math.sqrt(dx*dx + dy*dy);
}
}
const p1 = new Point(5, 5);
const p2 = new Point(10, 10);
console.log(Point.distance(p1, p2));
/* examples/class/07-hoisting.js */
var foo = new Bar(); /* ReferenceError*/
class Bar {}
ZALETYZALETY
Łatwa przejrzysta składnia
Składnia bliższa dla programistów z innych języków OO
(np. Java)
Łatwiejsze dziedziczenie z extends
WADYWADY
Mamy kilka sposobów tworzenia obiektów. Po co kolejny?
Brakuje Access modifierów dla metod np. private
Brak wsparcia dla deklarowania właściwości klasy
PROMISEPROMISE
Źródło obrazka: http://thenextweb.com/lifehacks/2014/03/30/always-promise-deliver/
/* examples/promise/01-promise.js */
function timeout(duration = 0) {
return new Promise((resolve, reject) => {
setTimeout(resolve, duration);
})
}
var p = timeout(1000).then(() => {
return timeout(2000);
}).then(() => {
throw new Error("hmm");
}).catch(err => {
return Promise.all([timeout(100), timeout(200)]);
})
MODUŁYMODUŁY
Źródło obrazka: http://www.officescope.com/blog/wp-content/uploads/2013/07/Puzzle-pieces.jpg
POZOSTAŁE FICZERYPOZOSTAŁE FICZERY
Generatory
for..of
Symbol
Unicode
Subclassable Built-ins (m.in. elementy DOM)
Array.from / Array.of
Proxy
Optymalizacja "Tail Call"
i inne...
Źródło: http://reddit.com/r/gifs
JAK UŻYWAĆ?JAK UŻYWAĆ?
COMPATIBILITY TABLECOMPATIBILITY TABLE
BACKENDBACKEND
node --harmony - tylko 17% ficzerów
io.js - 44% ficzerów
Czekamy na implementacje i olewamy stare przeglądarki?
FRONTENDFRONTEND
"let ECMAScript = 6"
BEZPIECZNA DROGA:BEZPIECZNA DROGA:
TRANSPILACJATRANSPILACJA
npm install --global babel
babel es6-script.js --out-file es5-script-file.js
NA CO ZWRÓCIĆ UWAGĘ?NA CO ZWRÓCIĆ UWAGĘ?
Część ficzerów wymaga babel/polyfill
Proxy nie możliwe do przetłumaczenia na ES5
Źródło obrazka: http://www.successfulworkplace.org/wp-content/uploads/2013/05/the-future.jpg
Źródło obrazka: http://www.successfulworkplace.org/wp-content/uploads/2013/05/the-future.jpg
ES7?ES7?
operator **
async functions
Object.observe
operator ::
SIMD
Trailing commas in function syntax:
function(a,b,c,){}
>=ES8?>=ES8?
Makra?
THANKYOU.JSTHANKYOU.JS
PYTANIA.JS ?PYTANIA.JS ?

More Related Content

What's hot (20)

PDF
ECMAScript 6 new features
GephenSG
 
PPTX
Academy PRO: ES2015
Binary Studio
 
PDF
FalsyValues. Dmitry Soshnikov - ECMAScript 6
Dmitry Soshnikov
 
PDF
ClojurianからみたElixir
Kent Ohashi
 
PDF
C++ game development with oxygine
corehard_by
 
PDF
Mozilla とブラウザゲーム
Noritada Shimizu
 
PDF
ECMAScript 6
Piotr Lewandowski
 
ODP
EcmaScript 6
Manoj Kumar
 
PPTX
ES6 Overview
Bruno Scopelliti
 
PDF
Javascript ES6 generators
RameshNair6
 
PPTX
The State of JavaScript
Domenic Denicola
 
PDF
Chainer-Compiler 動かしてみた
Akira Maruoka
 
PDF
EcmaScript 6 - The future is here
Sebastiano Armeli
 
PPTX
ES6: Features + Rails
Santosh Wadghule
 
PDF
Обзор фреймворка Twisted
Maxim Kulsha
 
PDF
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Jung Kim
 
PDF
Myraytracer
kedar nath
 
PDF
Introduction into ES6 JavaScript.
boyney123
 
PDF
Introduction of ES2015
Nakajima Shigeru
 
PDF
Doctrineのメモリーリークについて
t satoppejp
 
ECMAScript 6 new features
GephenSG
 
Academy PRO: ES2015
Binary Studio
 
FalsyValues. Dmitry Soshnikov - ECMAScript 6
Dmitry Soshnikov
 
ClojurianからみたElixir
Kent Ohashi
 
C++ game development with oxygine
corehard_by
 
Mozilla とブラウザゲーム
Noritada Shimizu
 
ECMAScript 6
Piotr Lewandowski
 
EcmaScript 6
Manoj Kumar
 
ES6 Overview
Bruno Scopelliti
 
Javascript ES6 generators
RameshNair6
 
The State of JavaScript
Domenic Denicola
 
Chainer-Compiler 動かしてみた
Akira Maruoka
 
EcmaScript 6 - The future is here
Sebastiano Armeli
 
ES6: Features + Rails
Santosh Wadghule
 
Обзор фреймворка Twisted
Maxim Kulsha
 
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Jung Kim
 
Myraytracer
kedar nath
 
Introduction into ES6 JavaScript.
boyney123
 
Introduction of ES2015
Nakajima Shigeru
 
Doctrineのメモリーリークについて
t satoppejp
 

Viewers also liked (20)

PDF
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
The Software House
 
PDF
e2e frameworks - czyli kij ma dwa końce
The Software House
 
PDF
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
The Software House
 
PDF
Pierwsza aplikacja na iOS, czyli z czym można się spotkać, co jest trudne i c...
The Software House
 
PDF
Pi razy drzwi - o szacowaniu projektów
The Software House
 
PDF
O Electronie słów kilka
The Software House
 
PDF
Gulp.js - alternatywa do Grunta
The Software House
 
PDF
Tester - przyjaciel czy wróg programisty?
The Software House
 
PDF
Bitcoin - (nie)udany eksperyment?
The Software House
 
PDF
Varnish
The Software House
 
PDF
Wielkie protokoły wielkich ludzi
The Software House
 
PDF
Angular 2.0 – Kochaj albo rzuć!
The Software House
 
PDF
PSR-7 - HTTP message interfaces
The Software House
 
PDF
Design dla estetycznie ograniczonych
The Software House
 
PDF
TDD w iOS
The Software House
 
PDF
Deploy appki na iOS, czyli magia publikacji
The Software House
 
PDF
Confd - Uszanowanko Programowanko
The Software House
 
PDF
Persisting Value Objects
The Software House
 
PDF
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
The Software House
 
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
The Software House
 
e2e frameworks - czyli kij ma dwa końce
The Software House
 
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
The Software House
 
Pierwsza aplikacja na iOS, czyli z czym można się spotkać, co jest trudne i c...
The Software House
 
Pi razy drzwi - o szacowaniu projektów
The Software House
 
O Electronie słów kilka
The Software House
 
Gulp.js - alternatywa do Grunta
The Software House
 
Tester - przyjaciel czy wróg programisty?
The Software House
 
Bitcoin - (nie)udany eksperyment?
The Software House
 
Wielkie protokoły wielkich ludzi
The Software House
 
Angular 2.0 – Kochaj albo rzuć!
The Software House
 
PSR-7 - HTTP message interfaces
The Software House
 
Design dla estetycznie ograniczonych
The Software House
 
TDD w iOS
The Software House
 
Deploy appki na iOS, czyli magia publikacji
The Software House
 
Confd - Uszanowanko Programowanko
The Software House
 
Persisting Value Objects
The Software House
 
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
The Software House
 
Ad

Similar to "let ECMAScript = 6" (20)

PPTX
JavaScript (without DOM)
Piyush Katariya
 
PDF
ECMAScript2015
qmmr
 
PPTX
ES6(ES2015) is beautiful
monikagupta18jan
 
PPTX
Advanced JavaScript
Zsolt Mészárovics
 
PDF
ES6 Simplified
Carlos Ble
 
PDF
Workshop 10: ECMAScript 6
Visual Engineering
 
PDF
JavaScript - new features in ECMAScript 6
Solution4Future
 
PDF
ES6, WTF?
James Ford
 
KEY
Javascript 基础
Alipay
 
PDF
Introduction to ECMAScript 2015
Tomasz Dziuda
 
PPTX
Awesomeness of JavaScript…almost
Quinton Sheppard
 
PDF
Ecmascript 2015 – best of new features()
Miłosz Sobczak
 
KEY
JavaScript Growing Up
David Padbury
 
PDF
ESCMAScript 6: Get Ready For The Future. Now
Krzysztof Szafranek
 
PDF
JavaScript 101
ygv2000
 
PPTX
Javascript Basics
msemenistyi
 
PPTX
Java script
Adrian Caetano
 
PDF
Javascript
Vlad Ifrim
 
PDF
ES2015 New Features
Giacomo Zinetti
 
PDF
Design patterns in javascript
Abimbola Idowu
 
JavaScript (without DOM)
Piyush Katariya
 
ECMAScript2015
qmmr
 
ES6(ES2015) is beautiful
monikagupta18jan
 
Advanced JavaScript
Zsolt Mészárovics
 
ES6 Simplified
Carlos Ble
 
Workshop 10: ECMAScript 6
Visual Engineering
 
JavaScript - new features in ECMAScript 6
Solution4Future
 
ES6, WTF?
James Ford
 
Javascript 基础
Alipay
 
Introduction to ECMAScript 2015
Tomasz Dziuda
 
Awesomeness of JavaScript…almost
Quinton Sheppard
 
Ecmascript 2015 – best of new features()
Miłosz Sobczak
 
JavaScript Growing Up
David Padbury
 
ESCMAScript 6: Get Ready For The Future. Now
Krzysztof Szafranek
 
JavaScript 101
ygv2000
 
Javascript Basics
msemenistyi
 
Java script
Adrian Caetano
 
Javascript
Vlad Ifrim
 
ES2015 New Features
Giacomo Zinetti
 
Design patterns in javascript
Abimbola Idowu
 
Ad

More from The Software House (20)

PDF
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
The Software House
 
PDF
Uszanowanko Podsumowanko
The Software House
 
PDF
Jak efektywnie podejść do certyfikacji w AWS?
The Software House
 
PDF
O co chodzi z tą dostępnością cyfrową?
The Software House
 
PDF
Chat tekstowy z użyciem Amazon Chime
The Software House
 
PDF
Migracje danych serverless
The Software House
 
PDF
Jak nie zwariować z architekturą Serverless?
The Software House
 
PDF
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
The Software House
 
PDF
Feature flags na ratunek projektu w JavaScript
The Software House
 
PDF
Typowanie nominalne w TypeScript
The Software House
 
PDF
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
The Software House
 
PDF
Serverless Compose vs hurtownia danych
The Software House
 
PDF
Testy API: połączenie z bazą danych czy implementacja w pamięci
The Software House
 
PDF
Jak skutecznie read model. Case study
The Software House
 
PDF
Firestore czyli ognista baza od giganta z Doliny Krzemowej
The Software House
 
PDF
Jak utrzymać stado Lambd w ryzach
The Software House
 
PDF
Jak poskromić AWS?
The Software House
 
PDF
O łączeniu Storyblok i Next.js
The Software House
 
PDF
Amazon Step Functions. Sposób na implementację procesów w chmurze
The Software House
 
PDF
Od Figmy do gotowej aplikacji bez linijki kodu
The Software House
 
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
The Software House
 
Uszanowanko Podsumowanko
The Software House
 
Jak efektywnie podejść do certyfikacji w AWS?
The Software House
 
O co chodzi z tą dostępnością cyfrową?
The Software House
 
Chat tekstowy z użyciem Amazon Chime
The Software House
 
Migracje danych serverless
The Software House
 
Jak nie zwariować z architekturą Serverless?
The Software House
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
The Software House
 
Feature flags na ratunek projektu w JavaScript
The Software House
 
Typowanie nominalne w TypeScript
The Software House
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
The Software House
 
Serverless Compose vs hurtownia danych
The Software House
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
The Software House
 
Jak skutecznie read model. Case study
The Software House
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
The Software House
 
Jak utrzymać stado Lambd w ryzach
The Software House
 
Jak poskromić AWS?
The Software House
 
O łączeniu Storyblok i Next.js
The Software House
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
The Software House
 
Od Figmy do gotowej aplikacji bez linijki kodu
The Software House
 

Recently uploaded (20)

PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PDF
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PPTX
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Add Background Images to Charts in IBM SPSS Statistics Version 31.pdf
Version 1 Analytics
 
PDF
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
PDF
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
PDF
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PDF
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
PDF
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
PPTX
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Add Background Images to Charts in IBM SPSS Statistics Version 31.pdf
Version 1 Analytics
 
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 

"let ECMAScript = 6"