В света на програмирането изучаването на нови езици е задължително. И докато изучаването на нов език е много по-малко трудно, отколкото първоначалното учене да програмирате, може да бъде доста досадно. По-долу са дадени няколко съвета за конвертиране на вашите JavaScript enumarables в Ruby.

карта:

Разгледайте следния код:

const letters = ["a", "b", "c"]

const lettersMapped = letters.map((letter) => {
return(letter.toUpperCase())
})

Горната функция взема масив от низове и го преобразува в нов масив с главни букви на низовете. За да направите същото на ruby, можете да използвате няколко различни синтаксиса:

letters = ["a", "b", "c"]

lettersMapped = letters.collect do |letter|
  letter.upcase
end
letters = ["a", "b", "c"]

lettersMapped = letters.map do |letter|
  letter.upcase
end

И трите горни кодови фрагмента постигат една и съща цел: вземане на масив от букви и връщане на версия с главни букви на масива.

Ето няколко ключови разлики, както е показано по-горе:

  • Докато .map работи в Ruby, можете също да използвате .collect. Ruby има множество имена за много itterables. Например .filter в JS може да се нарича .filter в Ruby, но може също да се нарича .select ИЛИ .find_all.
  • Не е необходимо да декларирате тип променлива в Ruby
  • Вместо формата „(source.method((var) =› var.action))“ в JS, в Ruby ще използвате „source.method do |var|“.
  • И най-важното: в Ruby не е необходимо изрично да посочвате какво връщате:

Неявно връщане:

Когато кодирате в ruby, един лукс на езика е, че последният ред на функция (или „def“) се връща, без да е необходимо да бъде посочен. Това не само изглежда по-приятно за очите (може би едно от най-приятните качества на ruby ​​е колко приятно е да се чете), но също така спестява много писане и бързо ще стане втора природа.

За да върнете нещо в ruby ​​имплицитно, просто го поставете в края на функция като по-долу:

def plusOne(var)
 var+1
end 

plusOne(1)

Output: 2 

Имплицитното връщане е хубаво и вероятно е начинът, по който ще напишете повечето от изявленията си за връщане. Въпреки това, вие все още сте абсолютно свободни да поставите изрични изрази за връщане другаде във вашия код:

def plusOneButNotIfItsFive(var)
  if var == 5
    return "We don't return 5s here"
  end
  var + 1
end 

plusOne(1)

Output: 2

plusOne(5)

Output: "We don't return 5s here"

С изявлението за връщане, изрично посочено в нашето условие, ако условието е изпълнено, ние ще върнем низа и ще напуснем функцията по-рано, без никога да стигнем до края, за да върнем неявно нашата променлива плюс едно. Красива.

За цикли:

Ако сте се захванали с програмирането в JS, може да не осъзнаете колко тромав е всъщност синтаксисът на For Loop. Разгледайте кода по-долу:

for (let i = 0, i > 5, i++) {
  console.log(`Counting: ${i}!`)
}

Output:
"Counting: 1!"
"Counting: 2!"
"Counting: 3!"
"Counting: 4!"
"Counting: 5!"

В горния JS метод започвате с дефиниране на типа цикъл, който правите ( for), след това декларирате променлива, върху която да се повтаря (нека i = 5), след което задавате условието кога да спрете цикъла (i ‹ 0 ), СЛЕД това казвате на цикъла какво да прави с променливата при всяка итерация. Изтощително! Според мен Ruby има много по-красив синтаксис за постигане на същата цел:

5.times do |i|
  puts "Counting: #{i}!"
end

Output:
"Counting: 1!"
"Counting: 2!"
"Counting: 3!"
"Counting: 4!"
"Counting: 5!"

Колко красиво е това? В Ruby можете просто да определите броя пъти, които искате да преминете от цикъл към цикъл и той ще се увеличи сам.

Можете също да зададете диапазон от числа с малко по-различен синтаксис:

(5..10).each do |num|
  puts num
Output:
5
6
7
8
9
10

хубаво! С това можете да определите диапазона, който искате да повторите, и все още отнема значително по-малко въвеждане и по-малко пунктуация. Да не говорим, че е много по-красив и по-четлив. Ако това не отговаря на вашите нужди, можете също да използвате цикъл while, който е почти същият като в Javascript:

let i = 5
while (i > 0) {
console.log(`Countdown: ${i}!`)
i --
}

Output:
"Countdown 5!"
"Countdown 4!"
"Countdown 3!"
"Countdown 2!"
"Countdown 1!"

И в Ruby:

i = 5
while i > 0
  puts "Countdown: #{i}!"
  i-= 1
end

Output:
"Countdown 5!"
"Countdown 4!"
"Countdown 3!"
"Countdown 2!"
"Countdown 1!"

Тук също ще забележите, че няма скоби около „i › 0“. В Ruby можете да изберете да включите или пропуснете скобите въз основа на вашите предпочитания. Никаква скоба не може да бъде по-лесна за четене, докато скобата може да се счита за по-разбираема от гледна точка на програмирането. Кодът по-долу ще функционира точно по същия начин:

while(i>0)
  puts "Countdown: #{i}!"
  i-= 1
end

Ruby има друг метод за постигане на подобна цел, показвайки колко гъвкав може да бъде език: до.

i = 5

until i == 0
  puts "Countdown: #{i}!"
  i -= 1
end

Output:
"Countdown 5!"
"Countdown 4!"
"Countdown 3!"
"Countdown 2!"
"Countdown 1!"

Надяваме се, че сте придобили известна представа за разликите в синтаксиса между JS и Ruby. Ако имате само всички програмирани в JS, надявам се да се почувствате като глътка свеж въздух за вас, както беше за мен. Никога не съм разбирал колко много не харесвам начина, по който изглеждаше моят JS, докато не видях колко чисто МОЖЕше да бъде моето кодиране.

Приятно кодиране!