Yapay zeka kullanılarak CoffeeScript'dan kaynaktan kaynağa kod çevirisi, kaynak kodunu analiz etmek ve anlamak için doğal dil işleme (NLP) tekniklerinden ve makine öğrenimi algoritmalarından yararlanmayı içerir
Çeviri Problemi | CoffeeScript Söz Dizimi Örneği | Crystal Söz Dizimi Örneği | Puan (1-10) |
---|---|---|---|
Fonksiyon Tanımları | square = (x) -> x * x |
square(x : Int32) : Int32 { x * x } |
7 |
Liste Kapsamları | [x * 2 for x in [1, 2, 3]] |
[x * 2 for x in [1, 2, 3]] |
9 |
İkincil Dönüşler | double = (x) -> x * 2 |
double(x : Int32) : Int32 { x * 2 } |
6 |
Splat Operatörü | args = (a, *rest) -> rest |
args(a : Int32, *rest : Array(Int32)) |
5 |
Sınıf Mirası | class Dog extends Animal |
class Dog < Animal |
8 |
Dize Yerleştirme | "Hello, #{name}" |
"Hello, #{name}" |
10 |
Varsayılan Parametreler | greet = (name = "World") -> "Hello, #{name}" |
greet(name : String = "World") : String { "Hello, #{name}" } |
7 |
Kalın Ok Fonksiyonları | => (kalın ok) |
-> (lambda) |
8 |
Yapılandırma Ataması | a, b = [1, 2] |
a, b = [1, 2] |
9 |
Zincirleme Metot Çağrıları | array.map (x) -> x * 2).filter (x) -> x > 2 |
array.map { |x| x * 2 }.filter { |x| x > 2 } |
8 |
CoffeeScript dilinde, fonksiyonlar ->
söz dizimi kullanılarak tanımlanabilir ve bu, ikincil dönüşlere izin verir. Crystal dilinde, fonksiyonlar açık tür açıklamaları gerektirir ve fonksiyon gövdesi için {}
kullanılır.
CoffeeScript Örneği:
square = (x) -> x * x
Crystal Örneği:
def square(x : Int32) : Int32
x * x
end
CoffeeScript Dokümantasyonu
Crystal Dokümantasyonu
Hem CoffeeScript hem de Crystal liste kapsamlarını destekler, ancak söz dizimi çok benzer olduğundan bu çeviri oldukça basittir.
CoffeeScript Örneği:
result = [x * 2 for x in [1, 2, 3]]
Crystal Örneği:
result = [x * 2 for x in [1, 2, 3]]
CoffeeScript Dokümantasyonu
Crystal Dokümantasyonu
CoffeeScript ikincil dönüşlere izin verirken, Crystal metot gövdesinde açık dönüş ifadeleri gerektirir.
CoffeeScript Örneği:
double = (x) -> x * 2
Crystal Örneği:
def double(x : Int32) : Int32
x * 2
end
CoffeeScript Dokümantasyonu
Crystal Dokümantasyonu
CoffeeScript dilindeki splat operatörü değişken uzunlukta argümanlara izin verirken, Crystal dilinde tür açıklamaları gerektirir.
CoffeeScript Örneği:
args = (a, *rest) -> rest
Crystal Örneği:
def args(a : Int32, *rest : Array(Int32))
rest
end
CoffeeScript Dokümantasyonu
Crystal Dokümantasyonu
Her iki dil de sınıf mirasını destekler, ancak söz dizimi biraz farklıdır.
CoffeeScript Örneği:
class Dog extends Animal
Crystal Örneği:
class Dog < Animal
end
CoffeeScript Dokümantasyonu
Crystal Dokümantasyonu
Dize yerleştirme her iki dilde de benzer şekilde işlenir, bu da bu çeviriyi oldukça basit hale getirir.
CoffeeScript Örneği:
greeting = "Hello, #{name}"
Crystal Örneği:
greeting = "Hello, #{name}"
CoffeeScript Dokümantasyonu
Crystal Dokümantasyonu
Her iki dil de varsayılan parametreleri destekler, ancak söz dizimi biraz farklıdır.
CoffeeScript Örneği:
greet = (name = "World") -> "Hello, #{name}"
Crystal Örneği:
def greet(name : String = "World") : String
"Hello, #{name}"
end
CoffeeScript Dokümantasyonu
Crystal Dokümantasyonu
CoffeeScript kalın ok fonksiyonları için =>
söz dizimini kullanırken, Crystal lambdalar için ->
kullanır.
CoffeeScript Örneği:
add = (a, b) => a + b
Crystal Örneği:
add = -> (a : Int32, b : Int32) { a + b }
CoffeeScript Dokümantasyonu
Crystal Dokümantasyonu
Her iki dil de yapılandırma atamasını destekler, bu da bu çeviriyi oldukça basit hale getirir.
CoffeeScript Örneği:
a, b = [1, 2]
Crystal Örneği:
a, b = [1, 2]
CoffeeScript Dokümantasyonu
Crystal Dokümantasyonu
Zincirleme metot çağrıları her iki dilde de desteklenir, ancak söz dizimi biraz farklıdır.
CoffeeScript Örneği:
result = array.map (x) -> x * 2).filter (x) -> x > 2
Crystal Örneği:
result = array.map { |x| x * 2 }.filter { |x| x > 2 }