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.