Исследуйте сходство между JavaScript и Python.

Сравнивать JavaScript и Python — все равно, что сравнивать яблоки и картошку. Оба полезны, но используются для разных целей. JavaScript в основном запускается на стороне клиента, тогда как Python в основном запускается на стороне сервера. С учетом сказанного, это два совершенно разных зверя, и сравнивать их несправедливо.

Но PHP тоже работает на сервере, а PHP и JavaScript очень похожи. На самом деле, очень легко освоить PHP, если вы знаете JavaScript. Можно ли то же самое сказать о Python? Давайте сравним их!

1. Переменные

Около двадцати лет в JavaScript был только один тип переменной — var. При создании ES6 были добавлены еще две: let, которая лучше для памяти, поскольку на нее ссылаются только при вызове и ее не таскают, как кошку на поводке, и const, которая является неизменяемой переменной.

В Python нет… ни того, ни другого. Просто объявить слово вроде foo = bar достаточно, чтобы объявить переменную. Переменные между двумя языками выглядят следующим образом:

#JavaScript
var fName = 'Kenton';
let mName = 'John';
const lName = 'de Jong';
#Python
fName = 'Kenton'
mName = 'John'
lName = 'de Jong'

2. Конкатенация строк

Если вы используете переменные, вам часто придется вставлять их в предложения. Теперь JavaScript и Python делают это очень похоже благодаря шаблонным литералам ES6:

#JavaScript
let name = "Kenton de Jong";
console.log(`My name is ${name}.`);
#Python
name = "Kenton de Jong"
print(f'My name is {name}.');

3. Если-утверждения

Операторы if — это хлеб с маслом программирования. В JavaScript операторы if выглядят так:

if (1 == 1) {
   return true;
}

А если это однострочные операторы, то их можно записать даже так:

if (1 == 1)
   return true

Python похож на это, так как в Python нет фигурных скобок. Вместо этого их операторы if выглядят так:

if (1 == 1):
   return true

Добавление «else» также ничем не отличается:

#JavaScript
if (1 == 1)
    return true
else 
    return false
#Python
if (1 ==1): 
   return true
else:
   return false

Даже else-if ничем не отличается:

#JavaScript
if (1 == 1)
    return true
else if (1 == 2)
    return false
else 
    return false
#Python
if (1 ==1):
   return true
elif (1 == 2):
   return false
else:
   return false

Самая большая разница заключается в том, что вы создаете сокращенную версию двух операторов.

#JavaScript
return 1 == 1 ? true : false;
#Python
return true if 1 == 1 else false

В JavaScript сначала идет условие, затем первое возможное значение, затем двоеточие и затем второе значение. В Python первое значение записывается еще до вызова условия.

4. Для циклов

Оба языка имеют разные способы выполнения циклов, но синтаксис между JavaScript и Python сильно различается.

#JavaScript
for (let i = 0; i <= 5; i++) {
  console.log(i)
}
#Python
for i in range(6):
  print(i)

В обоих случаях оба языка печатают числа от 0 до 5. Синтаксис in range() в Python сравним с <= в JavaScript, поскольку он зацикливается только для всего, что меньше заданного аргумента. В нашем случае аргумент равен 6, поэтому цикл проходит от 0 до 5.

Если бы мы хотели использовать массив, мы могли бы сделать что-то вроде этого:

#JavaScript
let fruits = ['apples', 'mangos', 'watermellon'];
for (let i = 0; i < fruits.length; i++) {
  console.log(fruit[i])
}
#apples mangos watermellon
#Python
fruits = ['apples', 'mangos', 'watermellon']
for i in range(len(fruit)):
  print(fruit[i])
#apples mangos watermellon

5. Пока циклы

Циклы while во многом похожи на циклы for. На самом деле так много способов, что я редко использую циклы while. Однако синтаксис между ними очень похож:

#JavaScript
let i = 1;
while (i < 10) {
  console.log(i)
  i++;
}
#Python
i = 1
while i < 10:
  print(i)
  i += 1

Здесь вы заметите несколько вещей: JavaScript увеличивает число с помощью i++, тогда как Python делает это с помощью i += 1. Это не имеет ничего общего с циклами while; В Python просто нет оператора ++.

6. Функции

Функции — отличный способ сохранить ваш код в чистоте, особенно если вы повторяетесь. Однако подход к функциям двух языков сейчас сильно различается, особенно с появлением ES6.

#JavaScript
#Before ES6
function add(num1, num2) {
    return num1 + num2;
}
#After ES6
let add = (num1, num2) => {
    return num1 + num2;
}

В то время как Python заменяет function на def :

#Python
def add(num1, num2):
   return num1 + num2

Еще одно отличие заключается в том, как интерпретируются параметры функции. В Python есть «аргументы ключевого слова», которые при добавлении вставляют параметры в функцию независимо от того, как их добавляет пользователь. В JavaScript этого нет. Рассмотрим следующее:

#JavaScript
let animal = (type="Dog", breed="Poodle", weight="5") => {
 return `This ${type} is a ${breed} and weights ${weight} pounds`
}
console.log(animal(breed="test"));
#This test is a Poodle and weight 5 pounds
#Python
def animal(type="Dog", breed="Poodle", weight="5"):
     return f"This {type} is a {breed} and weighs {weight} pounds"    
   
print(animal(breed="test"))
#This Dog is a test and weights 5 pounds. 

7. Импорт

Одна из самых больших проблем, с которыми я столкнулся при работе с Python, — это importing других библиотек. Для меня язык должен просто делать все. Мне не нужно импортировать для перетасовки массива в JavaScript или импортировать что-то для вызова AJAX. Но в Python вы это делаете. Синтаксис тоже немного отличается.

На самом деле, поскольку JavaScript может делать все прямо из коробки, я даже не знал о существовании import до нескольких месяцев назад. Его можно использовать для импорта класса из другого файла вместо загрузки всего файла.

Основной синтаксис такой:

#JavaScript
import whatever from 'another/script'
#Python
from 'another/script' import whatever

(Хотя в большинстве случаев вы просто напишете import whatever на Python.)

Вы также заметите, что последовательность обратная: import предшествует from в JavaScript, а from предшествует import в Python. Это продолжается, когда мы становимся еще более сложными:

#JavaScript
import whatever as wtv from 'another/script'
#Python
from 'another/script' import whatever as wtv

Если мы хотим импортировать несколько модулей, синтаксис меняется еще сильнее:

#JavaScript
import {whatever as wtv, idontknow as idk} from 'another/script.js'
#Python
from 'another/script' import whatever as wtv, idontknow as idk

8. АЯКС

AJAX создал современную сеть. Идея взаимодействия клиентской части с серверной изменила Интернет. Именно из-за этого Twitter не перезагружает страницу каждый раз, когда вам нравится твит, а YouTube не перезагружает плеер, когда вы нажимаете на новое видео.

В JavaScript встроены возможности AJAX — что имеет смысл, учитывая, что он называется асинхронным JavaScript и XML, — а Python — нет. К счастью, модуль requests доступен и решает эту проблему за нас:

#JavaScript, ES6
fetch('https://dog.ceo/api/breeds/list/all')
.then(resp => resp.json())
.then(data => console.log(data.message));
#Python
#-m pip install requests if needed
import requests
resp = requests.get('https://dog.ceo/api/breeds/list/all')
data = resp.json()
print(data.get('message'))

9. Операторы спреда

Операторы расширения являются новыми для JavaScript, но довольно распространены в Python. Они работают как способ отправки нескольких значений в один параметр. Например, если у вас есть это:

let asl = (age, sex, location, ...other) => {
   console.log(age);
   console.log(sex);
   console.log(location);
   console.log(other);
}

И вы хотите, чтобы other было несколькими значениями (рост, вес и т. д.), вы можете сделать что-то вроде этого:

let other = ["5'10", "250", "brown hair"];
asl(29, "Male", "Saskatchewan", other);

Python тоже имеет это, но использует * вместо ...

def asl(age, sex, location, *other):
    print(age)
    print(sex)
    print(location)
    print(other)
    
    
other = ["5'10", "250", "brown hair"]
asl(29, "Male", "Saskatchewan", other)

Разница между ними в том, что JavaScript возвращает array, а Python возвращает tuple. Оба могут быть зациклены, чтобы получить результаты, но структура отличается.

Кроме того, в то время как JavaScript может использовать оператор расширения для массивов и объектов, Python использует * для массивов и ** для объектов.

Вероятно, между этими двумя языками больше сходства, но когда я только начинал изучать Python, я обнаружил, что это очень интересно и очень полезно, когда дело доходит до разработки моих первых программ на Python. Конечно, Python может быть намного сложнее и может все больше и больше отклоняться от JavaScript, но основы, тем не менее, очень похожи.

Какие еще сходства вы можете назвать между этими двумя языками? Я хотел бы услышать ваши мысли!

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.