Преобразуйте CoffeeScript в Crystal с помощью ИИ

Перевод исходного кода из CoffeeScript с использованием ИИ предполагает использование методов обработки естественного языка (NLP) и алгоритмов машинного обучения для анализа и понимания исходного кода

Объясни

FAQ

Проблемы перевода

Проблема перевода CoffeeScript Пример синтаксиса Crystal Пример синтаксиса Оценка (1-10)
Определения функций square = (x) -> x * x square(x : Int32) : Int32 { x * x } 7
Генераторы списков [x * 2 for x in [1, 2, 3]] [x * 2 for x in [1, 2, 3]] 9
Неявные возвращения double = (x) -> x * 2 double(x : Int32) : Int32 { x * 2 } 6
Оператор распаковки args = (a, *rest) -> rest args(a : Int32, *rest : Array(Int32)) 5
Наследование классов class Dog extends Animal class Dog < Animal 8
Интерполяция строк "Hello, #{name}" "Hello, #{name}" 10
Параметры по умолчанию greet = (name = "World") -> "Hello, #{name}" greet(name : String = "World") : String { "Hello, #{name}" } 7
Функции с жирной стрелкой => (жирная стрелка) -> (лямбда) 8
Деструктурирующее присваивание a, b = [1, 2] a, b = [1, 2] 9
Цепочка вызовов методов array.map (x) -> x * 2).filter (x) -> x > 2 array.map { |x| x * 2 }.filter { |x| x > 2 } 8

Определения функций

В CoffeeScript функции могут быть определены с использованием синтаксиса ->, который позволяет неявные возвращения. В Crystal функции требуют явных аннотаций типов и используют {} для тела функции.

Пример CoffeeScript:

square = (x) -> x * x

Пример Crystal:

def square(x : Int32) : Int32
  x * x
end

Документация CoffeeScript
Документация Crystal

Генераторы списков

Обе языки CoffeeScript и Crystal поддерживают генераторы списков, но синтаксис очень похож, что делает этот перевод простым.

Пример CoffeeScript:

result = [x * 2 for x in [1, 2, 3]]

Пример Crystal:

result = [x * 2 for x in [1, 2, 3]]

Документация CoffeeScript
Документация Crystal

Неявные возвращения

CoffeeScript позволяет неявные возвращения, в то время как Crystal требует явных операторов возврата внутри тела метода.

Пример CoffeeScript:

double = (x) -> x * 2

Пример Crystal:

def double(x : Int32) : Int32
  x * 2
end

Документация CoffeeScript
Документация Crystal

Оператор распаковки

Оператор распаковки в CoffeeScript позволяет использовать аргументы переменной длины, в то время как в Crystal он требует аннотаций типов.

Пример CoffeeScript:

args = (a, *rest) -> rest

Пример Crystal:

def args(a : Int32, *rest : Array(Int32))
  rest
end

Документация CoffeeScript
Документация Crystal

Наследование классов

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

Пример CoffeeScript:

class Dog extends Animal

Пример Crystal:

class Dog < Animal
end

Документация CoffeeScript
Документация Crystal

Интерполяция строк

Интерполяция строк обрабатывается аналогично в обеих языках, что делает этот перевод простым.

Пример CoffeeScript:

greeting = "Hello, #{name}"

Пример Crystal:

greeting = "Hello, #{name}"

Документация CoffeeScript
Документация Crystal

Параметры по умолчанию

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

Пример CoffeeScript:

greet = (name = "World") -> "Hello, #{name}"

Пример Crystal:

def greet(name : String = "World") : String
  "Hello, #{name}"
end

Документация CoffeeScript
Документация Crystal

Функции с жирной стрелкой

CoffeeScript использует синтаксис => для функций с жирной стрелкой, в то время как Crystal использует -> для лямбд.

Пример CoffeeScript:

add = (a, b) => a + b

Пример Crystal:

add = -> (a : Int32, b : Int32) { a + b }

Документация CoffeeScript
Документация Crystal

Деструктурирующее присваивание

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

Пример CoffeeScript:

a, b = [1, 2]

Пример Crystal:

a, b = [1, 2]

Документация CoffeeScript
Документация Crystal

Цепочка вызовов методов

Цепочка вызовов методов поддерживается в обеих языках, но синтаксис немного отличается.

Пример CoffeeScript:

result = array.map (x) -> x * 2).filter (x) -> x > 2

Пример Crystal:

result = array.map { |x| x * 2 }.filter { |x| x > 2 }

Документация CoffeeScript
Документация Crystal