This article originally appeared on https://vahid.blog
I've been working with Javascript for a while now, and have gotten fairly comfortable with its syntax.
I'm now also using Ruby again, which has a slightly different flavor.
Here are some of the main syntactical differences between the two languages, in table format.
1. Basics
Javascript | Ruby | |
---|---|---|
Naming convention for variables, functions, and methods | camelCase | snake_case |
Naming convention for classes | PascalCase | PascalCase |
Declaring variables |
let someArray = [ 1,2]; Although var was exclusively used in older codebases, let is now more encouraged because let is block scoped while var is function scoped and can cause unintended consequences |
some_array = [ 1,2]
|
Declaring constants |
const SOMECONSTANT = 3.14; Reassigning something else to the constant will throw an error |
SOME_CONSTANT = 3.14Ruby will throw a warning when attempting to reassign something else to the constant, but will let you do it |
Declaring global variables | Declare the variable with let or const in the global context. However, if a variable with the same name is declared in a local scope, the local variable will be usable in that scope but not the global variable |
You can declare a global variable anywhere by using a $ just in front of the variable name(e.g. $ this_is_a_global_variable = 2100 ) |
Comments |
// this is a single-line comment in JS/* This is a multi-line comment in JS */
|
# this is a single-line comment in Ruby=begin This is a multi-line comment in Ruby =end
|
Print to console (automatically adding new line) |
console.log( 'hello world');
|
puts 'hello world' |
Print to console (without new line) |
process.stdout.write( 'hello');
|
print 'hello' |
Conditional Statements |
if ( someCondition) { // do this// and this } else if ( someOtherCondition) { // do this instead} else { // otherwise do this}
|
if some_condition # do this # and this elsif some_other_condition # do this instead else # otherwise do thisend
|
one-line conditional statement |
if ( condition) doThis;
|
do_this if condition |
Ternary conditional expression | condition ? doThisIfTrue : doThisIfFalse;
|
condition ? do_this_if_true : do_this_if_false |
Switch / case statement |
switch( expression) { case x: // code blockbreak; case y:// code block break; default: // code block} If you do not break , JS will execute every line after that case too |
case expressionwhen x # code block when y # code block else # code block end
|
Define a function / method |
function someFunction( param1, param2){ // do stuffreturn something;} If the return keyword is never used, the function will return undefined
|
def some_method( param1, param2) # do stuffreturn somethingend If the return keyword is never used, the method will return whatever is calculated on the last line before the end statement. |
Keyword to refer to the current particular instantiated object | this |
self |
Error handling |
try { // do something risky } catch(err) { // handle error here }
|
begin # do something risky rescue # handle error here end
|
2. Arrays & Strings
Javascript | Ruby | |
---|---|---|
Map / Collect method (Returning a new array of tweaked elements from an original array) |
const newArray = someArray.map( el=> el * 2)
|
new_array = some_array`.map { |
Iterate through an array's elements in one line and no need for index # | someArray.forEach(el => console.log(el)); | some_array.each { |
Iterate through an array's elements to perform a block requiring index # | for(let i=0; i < someArr.length; i++){ console.log(i, someArr[i]); // rest of block } |
some_arr.each_index do |
Delete an element at index i of an array | someArray.splice(i,length); Where i=index # to start deleting, and length = # of elements to delete |
some_array.delete_at(i) To delete all elements of a particular value (e.g. 'cat') regardless of index number, use: some_array.delete('cat') |
Return the unique values of an array | const uniqueArray = [...new Set(someArray)]; | unique_array = some_array.uniq To mutate the original array and retain only its unique values, use: someArray.uniq! |
Filter an array | const filteredArray = someArray.filter(el => el > 5); E.g. Returns all elements in someArray greater than 5 |
filtered_array = some_array.select { |
Check if an element is in an array | someArray.includes(5); E.g. Returns true if someArray has an element with a value of 5 |
some_array.include?(5) E.g. Returns true if some_array has an element with a value of 5 For methods that return a boolean, a Ruby convention is to name them with a ? at the end |
String Concatenation | someString = 'Hi,' + someName; If the left side of the {% raw %} + is a string, then JS will coerce anything that appears on the right side into a string too, even if it's a number or another data type |
some_string = 'Hi,' + some_name Ruby will throw an error if you attempt to concatenate a string with a non-string. You must convert it to a string first (i.e. .to_s ) |
Convert a number to a string |
let varString = someNum.toString();
|
var_string = some_num.to_s
|
Convert a string to an integer |
let varNum = Number( someString);
|
var_num = some_string.to_i
|
Convert a string to a float |
let varNum = parseFloat( someString);
|
var_num = some_string.to_f
|
3. Objects / Hashes
Javascript | Ruby | |
---|---|---|
Key-value pair data type is called | an object | a hash |
object/hash creation + assignment (Literal notation) |
const someObject = { key1: value1, key2: value2};
|
the older, symbol & hash-rocket method: some_hash = {: key1 => value1, : key2 => value2} or the newer, cleaner method: some_hash = { key1: value1, key2: value2} |
Object/hash creation (class instantiation notation) |
const someObject = new Object;
|
some_hash = Hash.new
|
Add key/value pair to an existing object/hash | someExistingObject[key3] = value3; or someExistingObject.key3 = value3;
|
some_existing_object[: key3] = value3 |
Iterate through an object/hash in one line | for(let key in someObject) { console.log(key,someObject[key])}; | some_hash.each { |
convert an object/hash to an array of sub-arrays of [key,value] | const someArray = Object.entries( someObject);
|
some_array = some_hash.to_a |
Delete a key/value pair |
delete someObject[someKey]; |
some_hash.delete(some_key) |
Check if an object/hash has a key | someObject.hasOwnProperty(someKey) | some_hash.has_key?(some_key) the fetch method allows you to get the value at the key or specify an alternative return value if the key doesn't exist:some_hash.fetch(some_key, "error message") |
Top comments (1)
this deserves more views from the full stack javascript/ruby developers. I wanted to create an app about this but you already have a good post about it. thanks!