Julia Dili ile Başlarken – Üzüm

In: Genel


Hızlı, başlaması kolay ve trend olan bir programlama dili mi arıyorsunuz? Julia dili gereksinimleri karşılar. Bu yazıda, ilk adımlarınızı nasıl atacağınızı gösteriyoruz.

Julia’nın dili nedir?

Julia, genel amaçlar için açık kaynaklı bir programlama dilidir. Bununla birlikte, esas olarak şu amaçlar için kullanılır: veri bilimi, makine öğrenimiveya sayısal ve istatistiksel hesaplama. Giderek daha fazla popülerlik kazanıyor. TIOBE endeksine göre, Julia dili 2020’de 47. sıradan 23. sıraya sıçradı ve gelecek yıl ilk 20’ye girmesi bekleniyor.

Julia esnek bir dinamik dil olmasına rağmen son derece hızlıdır. İyi yazılmış kod, düşük seviyeli bir dil olmasa da genellikle C kadar hızlıdır. Bu, benzer amaçlar için kullanılan Python veya R gibi dillerden çok daha hızlı olduğu anlamına gelir. Bazı AOT (zamanında) optimizasyonları ile tür paraziti ve JIT (tam zamanında) derlemesi kullanılarak yüksek performans elde edilir. C, C++, MATLAB, Python, R, FORTRAN gibi diğer dillerden doğrudan fonksiyonları çağırabilirsiniz… Öte yandan, çalışma zamanında derlendiğinden statik derleme için zayıf destek sağlar.

Julia, birçok nesne yönelimli ve işlevsel programlama modelini ifade etmeyi kolaylaştırır. Özellikle matematiksel bir kod yazarken yardımcı olan birden fazla gönderim kullanır. Bir betik dili gibi hissediyor ve etkileşimli kullanım için iyi bir desteği var. Tüm bu özellikler Julia’yı kullanmaya başlamayı ve denemeyi çok kolaylaştırıyor.

Julina dili ile ilk adımlar

  1. Julia’yı şuradan indirin ve yükleyin: Julia’yı İndir.
  2. (İsteğe bağlı – makaleyi takip etmeniz gerekmez) Julia dili için IDE’nizi seçin. VS Kodu, muhtemelen bu paragrafı yazarken mevcut olan en gelişmiş seçenektir. Araştırmanızı yapmanızı ve tercihlerinize göre birini seçmenizi öneririz. VSCode’u yüklemek için lütfen takip edin VS Code ve VS Code Julia uzantısını yükleme.

Oyun alanı

Etkileşimli bir oturumda bazı deneylerle başlayalım. Julia komutunu bir terminalde çalıştırmanız yeterlidir. Önce PATH değişkeninize Julia’nın ikili yolunu eklemeniz gerekebilir. Julia ile öğrenmenin ve oynamanın en hızlı yolu budur.

C:UsersprsoDesktop>julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.5.3 (2020-11-09)
 _/ |__'_|_|_|__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> println("hello world")
hello world

julia> 2^10
1024

julia> ans*2
2048

julia> exit()

C:UsersprsoDesktop>

Yakın zamanda döndürülen bir değer elde etmek için şunu kullanabiliriz: ans değişken. REPL’yi kapatmak için şunu kullanın: exit() işlev veya Ctrl+D kısayol.

Komut dosyalarını çalıştırma

Komut dosyalarınızı bir IDE içinde oluşturabilir ve çalıştırabilirsiniz. Ancak, elbette, bunu yapmanın daha fazla yolu var. İlk komut dosyamızı herhangi bir metin düzenleyicide oluşturalım ve adını verelim: example.jl.

REPL’den çalıştırabilirsiniz:

julia> include("example.jl")
20

Veya doğrudan sistem terminalinizden:

C:UsersprsoDesktop>julia example.jl
20

Lütfen REPL’in mevcut durumu koruduğunu ve kopyala-yapıştır gibi ifade çalışmaları içerdiğini unutmayın. Bu, dahil edilen çalıştırmanın, bu kodu doğrudan REPL’ye yazmaya eşdeğer olduğu anlamına gelir. Sonraki komutlarınızı etkileyebilir.

Temel tipler

Julia, standart matematiksel işlevler ve operatörlerle birlikte çok çeşitli ilkel türler sağlar. İşte tüm ilkel sayısal türlerin listesi:

  • Int8, UInt8
  • Int16, UInt16
  • Int32, UInt32
  • Int64, UInt64
  • Int128, UInt128
  • Float16
  • Float32
  • Float64

Bir rakam soneki birkaç bit ve bir U imzasız önek. Demek oluyor UInt64 imzasızdır ve 64 bit’e sahiptir. Ayrıca karmaşık ve rasyonel sayılar için tam destek sağlar.

ile birlikte gelir Bool, Charve String gibi standart olmayan dize değişmezleri ile birlikte türler Regex ilave olarak. ASCII olmayan karakterler için destek vardır. Hem değişken isimleri hem de değerler bu karakterleri içerebilir. Matematiksel ifadeleri çok sezgisel hale getirebilir.

julia> x = 'a'
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)

julia> typeof(ans)
Char

julia> x = 'β'
'β': Unicode U+03B2 (category Ll: Letter, lowercase)

julia> typeof(ans)
Char

julia> x = "tgα * ctgα = 1"
"tgα * ctgα = 1"

julia> typeof(ans)
String

julia> x = r"^[a-zA-z]{8}$"
r"^[a-zA-z]{8}$"

julia> typeof(ans)
Regex    

Depolama: Diziler, Tuple’lar ve Sözlükler

Julia dilinde en sık kullanılan depolama türleri şunlardır: diziler, demetler, sözlükler veya kümeler. Her birine bir göz atalım.

diziler

Bir dizi, ilgili öğelerin sıralı bir koleksiyonudur. Tek boyutlu bir dizi, vektör veya liste olarak kullanılır. İki boyutlu bir dizi, bir matris veya tablo görevi görür. Daha boyutlu diziler çok boyutlu matrisleri ifade eder.
Boş olmayan basit bir dizi oluşturalım:

julia> a = [1, 2, 3]
3-element Array{Int64,1}:
 1
 2
 3

julia> a = ["1", 2, 3.0]
3-element Array{Any,1}:
  "1"
 2
 3.0

Yukarıda, Julia’daki dizilerin depolayabileceğini görebiliriz. Any nesneler. Ancak, bu bir anti-desen olarak kabul edilir. Performans nedenleriyle belirli türleri dizilerde saklamalıyız.

Dizi oluşturmanın başka bir yolu da bir dizi kullanmaktır. Range nesne veya kavramalar (bir ifadeyi değerlendirerek öğeleri oluşturmanın ve toplamanın basit bir yolu).

julia> typeof(1:10)
UnitRange{Int64}

julia> collect(1:3)
3-element Array{Int64,1}:
 1
 2
 3

julia> [x for x in 1:10 if x % 2 == 0]
5-element Array{Int64,1}:
  2
  4
  6
  8
 10

Burada duracağız. Ancak Julia’da hem tek boyutlu hem de çok boyutlu diziler oluşturmanın daha birçok yolu vardır.

Dizilerde çalışan birçok yerleşik işlev vardır. Julia, Python’daki nokta gösteriminden farklı olarak işlevsel bir stil kullanır. Şimdi öğelerin nasıl ekleneceğini veya kaldırılacağını görelim.

julia> a = [1,2]
2-element Array{Int64,1}:
 1
 2

julia> push!(a, 3)
3-element Array{Int64,1}:
 1
 2
 3

julia> pushfirst!(a, 0)
4-element Array{Int64,1}:
 0
 1
 2
 3

julia> pop!(a)
3

julia> a
3-element Array{Int64,1}:
 0
 1
 2

demetler

Tuple’lar dizilerle aynı şekilde çalışır. Tuple, sıralı bir öğe dizisidir. Ancak önemli bir fark var. Tuple’lar değişmezdir. Gibi yöntemleri çağırmaya çalışmak push!() bir hatayla sonuçlanacaktır.

julia> t = (1,2,3)
(1, 2, 3)

julia> t[1]
1

sözlükler

Julia’da bir sonraki yaygın olarak kullanılan koleksiyonlar sözlüklerdir. Sözlüğe kısaca Dict denir. Muhtemelen beklediğiniz gibi, bir anahtar/değer çifti koleksiyonudur.
Basit bir sözlük nasıl oluşturulur:

julia> d = Dict(1 => "a", 2 => "b")
Dict{Int64,String} with 2 entries:
  2 => "b"
  1 => "a"

julia> d = Dict(x => 2^x for x = 0:5)
Dict{Int64,Int64} with 6 entries:
  0 => 1
  4 => 16
  2 => 4
  3 => 8
  5 => 32
  1 => 2

julia> sort(d)
OrderedCollections.OrderedDict{Int64,Int64} with 6 entries:
  0 => 1
  1 => 2
  2 => 4
  3 => 8
  4 => 16
  5 => 32

Sözlüklerin sıralanmadığını görebiliriz. Belirli bir düzeni korumazlar. Bu özelliğe ihtiyacınız varsa, kullanabilirsiniz SortedDict.

julia> import DataStructures

julia> d = DataStructures.SortedDict(x => 2^x for x = 0:5)
DataStructures.SortedDict{Any,Any,Base.Order.ForwardOrdering} with 6 entries:
  0 => 1
  1 => 2
  2 => 4
  3 => 8
  4 => 16
  5 => 32

DataStructures kullanıma hazır bir paket değildir. İlk kez kullanmak için indirmemiz gerekiyor. ile yapabiliriz Pkg Paketleme yöneticisi.

julia> import Pkg; Pkg.add("DataStructures")

Setler

Julia’da bir başka koleksiyon türü de setlerdir. Tıpkı diğer birçok dilde olduğu gibi, Set öğelerin sırasını korumaz ve çoğaltılan öğeleri saklamaz. Aşağıdaki örnek, bir Set belirli bir türle ve belirli bir öğeyi içerip içermediğini kontrol eder.

julia> s = Set{String}(["one", "two", "three"])
Set{String} with 3 elements:
  "two"
  "one"
  "three"

julia> in("two", s)
true

Bu sefer açıkça bir koleksiyon türü belirledik. Aynı şeyi diğer tüm koleksiyonlar için de yapabilirsiniz.

Fonksiyonlar

Okulda ikinci dereceden denklemler hakkında öğrendiklerimizi hatırlayalım. Aşağıda, belirli bir denklemin köklerini hesaplayan örnek bir komut dosyası verilmiştir: ax2+bx+c.

discriminant(a, b, c) = b^2 - 4a*c

function rootsOfQuadraticEquation(a, b, c)
    Δ = discriminant(a, b, c)
    if Δ > 0
        x1 = (-b - √Δ)/2a
        x2 = (-b + √Δ)/2a
        return x1, x2
    elseif Δ == 0
        return -b/2a
    else
        x1 = (-b - √complex(Δ))/2a
        x2 = (-b + √complex(Δ))/2a
        return x1, x2
    end
end

println("Two roots: ", rootsOfQuadraticEquation(1, -2, -8))
println("One root: ", rootsOfQuadraticEquation(2, -4, 2))
println("No real roots: ", rootsOfQuadraticEquation(1, -4, 5))

İki işlev vardır. İlki sadece bir satırdır ve denklemin bir diskriminantını hesaplar. İkincisi, fonksiyonun köklerini hesaplar. Tuple’ları kullanarak bir veya birden çok değer döndürür.

Argüman türlerini belirtmemize gerek yok. Derleyici bu türleri dinamik olarak kontrol eder. Lütfen aradığınızda da aynı şeyin olduğunu unutmayın. sqrt() √ sembolü kullanarak işlev. Bu durumda, diskriminant negatif olduğunda, onu bir ile sarmamız gerekir. complex()function olduğundan emin olmak için sqrt() işlev karmaşık bir argümanla çağrıldı.
İşte yukarıdaki betiğin konsol çıktısı:

C:UsersprsoDocumentsJulia>julia quadraticEquations.jl
Two roots: (-2.0, 4.0)
One root: 1.0
No real roots: (2.0 - 1.0im, 2.0 + 1.0im)

çizim

Julia diliyle çizim yapmak basittir. Çizim için birkaç paket var. Bunlardan birini kullanıyoruz, Plots.jl.
İlk önce kullanmak için yüklememiz gerekiyor:

julia> using Pkg; Pkg.add("Plots") 

Paket indirildikten sonra doğrudan örneğe geçelim:

julia> f(x) = sin(x)cos(x)
f (generic function with 1 method)

julia> plot(f, -2pi, 2pi)

-2π ile 2π aralığında bir fonksiyonun grafiğini bekliyoruz. İşte çıktı:

Özet ve daha fazla okuma

Bu yazıda Julia’ya nasıl başlayacağımızı öğrendik. Gerekli tüm bileşenleri kurduk. Sonra ilk “merhaba dünyamızı” yazdık ve temel Julia unsurlarıyla tanıştık.

Elbette bir makaleyi okuyarak yeni bir dil öğrenmenin yolu yok. Bu nedenle, Julia diliyle kendi başınıza oynamanızı öneririz.

Daha derine inmek için aşağıdaki kaynakları okumanızı öneririz:

Bir cevap yazın

Ready to Grow Your Business?

We Serve our Clients’ Best Interests with the Best Marketing Solutions. Find out More

How Can We Help You?

Need to bounce off ideas for an upcoming project or digital campaign? Looking to transform your business with the implementation of full potential digital marketing?

For any career inquiries, please visit our careers page here.
[contact-form-7 404 "Bulunamadı"]