Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Da Javascript a Python, da Python a Javascript

Una serie di esempi pratici che mostrano le differenze principali tra le sintassi di Python e Javascript, utili a migrare da un linguaggio all'altro.
Una serie di esempi pratici che mostrano le differenze principali tra le sintassi di Python e Javascript, utili a migrare da un linguaggio all'altro.
Link copiato negli appunti

Javascript e Python sono due tra i più popolari linguaggi di programmazione. Per gli sviluppatori Javascript che hanno necessità o intenzione di migrare a Python, e per il caso precisamente inverso, abbiamo a disposizione due ottimi lavori, sviluppati da Saya e Ilya Schurov, che ci forniscono chiari clean sheets sul confronto tra le sintassi dei due linguaggi di programmazione, confrontati con costrutti che svolgono compiti identici o simili. Basandoci su questi lavori, in questo articolo cercheremo di fare chiarezza per facilitare, il più possibile, la migrazione da un linguaggio all'altro.

Il lavoro di Saya riassume le differenze raggruppandole come di seguito:

  • Operazioni matematiche (Math)
  • Operatori di controllo del flusso (if/else, costrutto try/catch, booleani, operatore ternario, eccezioni, cicli interrotti e cosi via)
  • Lavoro con le stringhe (concatenazione, interpolazione)
  • Lavoro con le liste e gli array (iterazione, operazioni con gli elementi e gli indici)
  • Lavoro con i dizionari/oggetti (iterazione, mappatura, operazioni con le keywords, operazioni con i valori, lavoro con JSON)
  • Lavoro le funzioni (definizione, dichiarazione di parametri, dichiarazione di parametri di default, parametri posizionali, parametri variabili)
  • Lavoro con le classi (dichiarazione, creazione di istanze)

Quanto segue tiene in considerazione la versione 3 di Python e lo standard Ecma Script 2015 per Javascript.

Nel lavoro di Ilya, possiamo invece trovare:

  • Liste e array
  • Ciclo for e cicli iterativi
  • Dizionari e oggetti
  • Scope delle variabili
  • Tipizzazione e tipi di variabili
  • Comparazione tra variabili ed operatori di comparazione
  • Funzioni

Vediamo qualche esempio che ci permette di capire come questi clean sheets possono essere utili nella pratica di migrazione tra un linguaggio di programmazione e l'altro, analizzando alcune delle voci elencate in precedenza.

Math: operazioni di arrotondamento

Python

import math
# 2
print(math.ceil(1.5))
# 1
print(math.floor(1.5))
# 2
print(round(1.5))

Javascript

// 2
console.log(Math.ceil(1.5))
// 1
console.log(Math.floor(1.5))
// 2
console.log(Math.round(1.5))

Operatore If/else

Python

some_number = 3
# Number is 3
if some_number == 1:
print("Number is 1")
elif some_number == 2:
print("Number is 2")
elif some_number == 3:
print("Number is 3")
else:
print("?")

Javascript

const someNumber = 3
// Number is 3
if (someNumber === 1) {
console.log('Number is 1')
} else if (someNumber === 2) {
console.log('Number is 2')
} else if (someNumber === 3) {
console.log('Number is 3')
} else {
console.log('?')
}

Ciclo for, break/continue

Python

# 1
# 2
# Fizz
# 4
# Buzz
for number in range(1, 101):
if number == 3:
print("Fizz")
continue
if number == 5:
print("Buzz")
break
print(number)

Javascript

// 1
// 2
// Fizz
// 4
// Buzz
for (let i = 1; i <= 100; i = i + 1) {
if (i === 3) {
console.log('Fizz')
continue
}
if (i === 5) {
console.log('Buzz')
break
}
console.log(i)
}

Interpolazione di stringhe

Python

x = "Hello"
# Hello World
print(f"{x} World")

Javascript

const x = 'Hello'
// Hello World
console.log(`${x} World`)

Enumerazione di array

Python

some_list = [6, 3, 5]
# 0 6
# 1 3
# 2 5
for i, item in enumerate(some_list):
print(f"{i} {item}")
# If you're not using this in a for loop, use list()
# list(enumerate(some_list)) # [(0, 6), (1, 3), (2, 5)]

Javascript

const someList = [6, 3, 5]
// 0 6
// 1 3
// 2 5
someList.forEach((element, index) => {
console.log(`${index} ${element}`)
})

Oggetti: lavorare con i valori

Python

some_dict = {"one": 1, "two": 2, "three": 3}
# 1
# 2
# 3
# NOTE: If you're not using this in a for loop,
# convert it into a list: list(some_dict.values())
for x in some_dict.values():
print(x)

Javascript

const someDict = { one: 1, two: 2, three: 3 }
// 1
// 2
// 3
Object.values(someDict).forEach(element => {
console.log(element)
})

Funzioni: argomenti di default

Python

def greet(name, word="Hello"):
print(f"{word} {name}")
# Hello World
greet("World")
# Goodbye World
greet("World", "Goodbye")

Javascript

const greet = (name, word = 'Hello') => {
console.log(`${word} ${name}`)
}
// Hello World
greet('World')
// Goodbye World
greet('World', 'Goodbye')

Classi

Python

class Duck:
def __init__(self, name):
self.name = name
def fly(self):
print(f"{self.name} can fly")
# not @classmethod: call a method on an instance
# duck = Duck(...)
# duck.create(...)
#
# @classmethod: call a method on a class
# Duck.create(...)
@classmethod
def create(cls, name, kind):
if kind == "mallard":
return MallardDuck(name)
elif kind == "rubber":
return RubberDuck(name)
else:
# cls = Duck
return cls(name)
class MallardDuck(Duck):
# @property:
# use duck.color instead of duck.color()
@property
def color(self):
return "green"
class RubberDuck(Duck):
def __init__(self, name, eye_color="black"):
super().__init__(name)
self.eye_color = eye_color
def fly(self):
super().fly()
print(f"Just kidding, {self.name} cannot fly")
@property
def color(self):
return "yellow"
regularDuck = Duck("reggie")
# reggie can fly
regularDuck.fly()
mallardDuck = Duck.create("mal", "mallard")
# mal
print(mallardDuck.name)
# green
print(mallardDuck.color)
rubberDuck = RubberDuck("vic", "blue")
# vic can fly
# Just kidding, vic cannot fly
rubberDuck.fly()
# yellow
print(rubberDuck.color)
# blue
print(rubberDuck.eye_color)

Javascript

class Duck {
constructor(name) {
this.name = name
}
fly() {
console.log(`${this.name} can fly`)
}
// not static: call a method on an instance
// const duck = new Duck(...)
// duck.create(...)
//
// static: call a method on a class
// Duck.create(...)
static create(name, kind) {
if (kind === 'mallard') {
return new MallardDuck(name)
} else if (kind === 'rubber') {
return new RubberDuck(name)
} else {
// this = Duck
return new this(name)
}
}
}
class MallardDuck extends Duck {
// get:
// use duck.color instead of duck.color()
get color() {
return 'green'
}
}
class RubberDuck extends Duck {
constructor(name, eyeColor = 'black') {
super(name)
this.eyeColor = eyeColor
}
fly() {
super.fly()
console.log(`Just kidding, ${this.name} cannot fly`)
}
get color() {
return 'yellow'
}
}
const regularDuck = new Duck('reggie')
// reggie can fly
regularDuck.fly()
const mallardDuck = Duck.create('mal', 'mallard')
// mal
console.log(mallardDuck.name)
// green
console.log(mallardDuck.color)
rubberDuck = new RubberDuck('vic', 'blue')
// vic can fly
// Just kidding, vic cannot fly
rubberDuck.fly()
// yellow
console.log(rubberDuck.color)
// blue
console.log(rubberDuck.eyeColor)

Nelle pagine ufficiali dei lavori sopra citati, sono disponibili una moltitudine di esempi aggiuntivi, molto utili a comprendere le differenze tra Javascript e Python, facilitando quindi la migrazione tra questi linguaggi.

Ti consigliamo anche