(Re-)introducing Javascript from a Ruby perspective
Created by James Riley / @mrjamesriley
Portuguese speaking, guitar playing, cat loving.. uncle!
Full-stack developer at SupaDupa.me
What is Javascript, how does it compare to Ruby?
Created in 10 days
Monopoly on the front end
Seen as a toy language, had quirks
The use cases of Javascript have grown
The latest version of Javascript
For Complex applications
To adopt defacto standards
Rails sprockets-es6 Gem
Try it out at BabelJS.io
Brower support will take years.
Yay for transpilers!
Javascript basics
// variables needs to be declared
let partyHost = 'James';
// supports arithmetic and dates
let guestCount = 10 + 5;
let partyDate = new Date(2015, 8, 25);
// constants
const MAX_GUESTS = 30;
// conditionals
if(guestCount >= MAX_GUESTS) {
console.log('No more guests allowed');
}
// arrays
let buffet_food = ['Muffins', 'Biscuits'];
// object
let muffin = {
glutenFree: false,
flavour: 'Blueberry',
expiry: 2018
}
Ruby basics
# variables
party_host = 'James'
# arithmetic and dates
guest_count = 10 + 5;
party_date = Date.new(2015, 8, 25)
# constants
MAX_GUESTS = 30
# conditionals
if guest_count >= MAX_GUESTS
puts 'No more guests allowed'
end
# arrays
buffet_food = ['Muffins', 'Biscuits']
# hashes
muffin = {
glutenFree: false,
flavour: 'Blueberry',
expiry: 2018
}
// loops
for food in buffetFood {
console.log(`There shall be: ${food}`);
}
// functions
function eat(foodName, foodList) {
if(foodList.indexOf(foodName) != -1) {
console.log(`Enjoy your ${foodName}`);
} else {
console.log(`Sorry, no more: ${foodName}`)
}
}
eat('Muffin', buffetFood) // Enjoy your Muffin
// rest parameters
function startParty(location, ...guests) {
console.log(`${guests.length} guests!`);
}
startParty('London', 'Alice', 'Bob');
// 2 guests!
# loops
for food in buffet_food do
puts "There shall be: #{food}"
end
# functions
def eat(food_name, food_list)
if(food_list.index(food_name))
puts "Enjoy your #{food_name}"
else
puts "Sorry, no more: #{food_name}"
end
end
eat 'Muffin', buffet_food # Enjoy your Muffin
# splat operator
def startParty(location, *guests)
puts "#{guests.length} guests!"
end
startParty('London', 'Alice', 'Bob')
# 2 guests!
Javacsript classes
class Guest {
// constructor function with default options
constructor(options={}) {
this.firstName = options.firstName;
this.lastName = options.lastName;
}
// method with string interpolation
introduce() {
console.log(`I am ${this.firstName}`);
}
}
var sam = new Guest({
firstName: 'Sam',
lastName: 'Phillips'
});
Ruby classes
class Guest
# constructor function with default options
def initialize(options={})
@first_name = options[:first_name]
@last_name = options[:last_name]
end
# instance method with string interpolation
def introduce
"Hello, my name is: #{@first_name}"
end
end
sam = Guest.new({
first_name: 'Sam',
last_name: 'Phillips'
});
Javacsript inheritance
class Singer extends Guest {
constructor(options={}) {
super(options);
this.genre = options.genre;
}
sing() {
console.log('la la laaa');
}
static find_by_name(name) {
// retrieves singers matching the name given
}
}
var beyonce = new Singer({
firstName: 'Beyonce',
Lastname: 'Knowles',
genre: 'Pop'
});
Ruby inheritance
class Singer < Guest
def initialize(options={})
super options
@genre = options[:genre]
end
def sing
puts 'la la laaa'
end
def self.find_by_name(name)
# retrieves singers matching the name given
end
end
beyonce = Singer.new({
first_name: 'Beyonce',
last_name: 'Knowles',
genre: 'Pop'
});
// assigning a function to a variable
var dance = function() {
console.log('Shapes are being thrown');
}
// passing a function as an argument
document.addEventListener('click', function() {
console.log('I have been clicked!');
}):
Makes JS suitable for Event based programming
Advanced features of do differ:
Bonus: Javascript makes you a Cross-app Developer!
People: Kyle Simpson
Books: Eloquent Javascript, Understanding EcmaScript 6
Websites: CodeSchool, CodeAcademy,
Mozilla Developer Network
Thank you for listening!