This is the fifth week. Scary!
Most students were unsatisfied with the database sprint setup and we spent a hour on the sprint reflection. I like the fact that Marcus and other stuff members took those feedbacks very seriously.
Primer on algorithms:
Two constrains are execution time and relative memory allocation; three major tasks are store data, sort data and search data. As the hiring day is approaching for us, I would spend significant more time on this topic.
Ruby
The principle of least surprise(?)
Good parts:
– tons of built-in functions; some very nice datatypes such as date or currency
– Rails is probably the reason why Ruby is so popular
Other parts:
– Server side only
Compared to JS:
– Ruby has block level scope
for obj.keys do |key|
#block scope
end
While in JS, block scope doesn’t exist, hence the necessity to wrap blocks with function(){}. It makes sense since most people want to run the same code block with some arguments, we might as well use function instead.
var f1 = function(){
//function scope
}
– in hash or object, the key can be other types beyond string. Instead of using key:value, the notation is hash rocket, meaning key=>value.
– callbacks
Ruby. Thought process: since we rarely pass more than one callback function(block), let’s always give the function a block that can be used as a callback; in that case, we might as well give the function a default name: yield. (Note: this is not 100% accurate. )
def f1
yield('sample_args')
end
f1 do |args|
puts args
end
JavaScript
var f1 = function(callback){
callback('sample_args');
};
var callback = function(args){
console.log(args);
};
f1(callback);
– collection iterations. Ruby has its built-in each method while JavaScript has to rely on underscore.js.
[1,2,3].each do |ele|
puts ele
end
JavaScript
_([1,2,3]).each(function(ele){
console.log(ele);
})
– class
Ruby has the class keyword while JavaScript doesn’t.
class Person
@@n_hands = 2 # class level variable
attr_accessor :age
def initialize age
@age = age
end
end
a = Person.new(30)
p a.age
p Person.class_variable_get(:@@n_hands)
Same code in JavaScript:
var Person = function(age){
this.age = age;
};
Person.n_hands = 2;
var a = new Person(30);
console.log(a.age);
console.log(Person.n_hands);
– private or public properties/methods of objects
Ruby only exposes methods, meaning all properties are private. For examples, obj.keys means obj.keys(). To get/set properties, one has to generate getter/setter by themselves. There is a shortcut to do so using “attr_accessor :some_var”. According to instructors,
#attr_accessor :some_var
#literally means inserting the following two blocks of code
def some_var
@some_var
end
def some_var= input #'some_var=' is the function name, and input is the parameter
@some_var = input
end
JavaScript doesn’t care.