7 puan yazan GN⁺ 2024-12-20 | 2 yorum | WhatsApp'ta paylaş
  • Java'nın büyük ölçekli, uzun vadeli projeler için uygun olduğu biliniyor, ancak küçük işler için de mükemmel bir araç olabilir
  • Statik tip denetimi ve güçlü araç desteği, küçük işlerde de büyük avantaj sağlar
  • Son dönemdeki dil iyileştirmeleri Java'yı daha da kullanışlı hale getirdi

Derlemeden çalıştırma

  • JEP 330 ve JEP 458 sayesinde Java kaynak dosyaları doğrudan çalıştırılabilir:
    java RandomFiles.java 10 /home/cay/data  
    
  • Her çalıştırmada otomatik olarak derlenir; geliştirme ve test için kullanışlıdır
  • Graal kullanılarak yerel çalıştırılabilir dosyaya dönüştürülebilir, ancak çoğu durumda performans farkı ihmal edilebilir düzeydedir

Daha sade sözdizimi: örnek ana yöntemler ve örtük sınıflar

  • JEP 477: küçük programlar ve betikler yazmayı basitleştirir
  • Önceden zahmetli olan sözdizimi (public static void main) ortadan kalkar:
var someVariable = initialValue;  
String helper(int param) { ... }  
void main(String[] args) {  
    ...  
}  
  • java.base modülü otomatik olarak içe aktarılır, bu da kullanım kolaylığı sağlar
  • println, print, readln yöntemleri de otomatik olarak içe aktarılır

Records ve Enums

  • Records: Python sözlükleri yerine yapılandırılmış veri gösterimi
record Window(int id, int desktop, int x, int y, int width, int height, String title) {}  
  • Enums: Python'a göre daha sezgisel enum gösterimi
enum Direction { NORTH, EAST, SOUTH, WEST };  

Yararlı dil ve API özellikleri

  • var kullanımı: betiklerde tür bildirmeden değişken kullanılabilir
  • static import: daha kısa matematiksel hesaplamalar yapılabilir
import static java.lang.Math.*;  
var diagonal = sqrt(pow(width, 2) + pow(height, 2));  
  • Metin blokları: kod ve veriyi birlikte tutarken okunabilirliği artırır
  • Güçlü string, düzenli ifade, koleksiyon ve tarih/saat kütüphaneleri
  • Dosya okuma:
var content = Files.readString(Path.of(filename));  
  • Harici süreç çalıştırma:
String run(String... cmd) throws Exception {  
    var process = new ProcessBuilder(cmd).redirectErrorStream(true).start();  
    process.waitFor();  
    return new String(process.getInputStream().readAllBytes());  
}  

Bağımlılık yönetimi ve JBang

  • JBang: Maven bağımlılıkları doğrudan kaynak dosyasına eklenebilir
//DEPS org.eclipse.angus:jakarta.mail:2.0.3  
  • Ardından şu şekilde çalıştırılabilir
jbang MailMerge.java  
  • Betiği çalıştırılabilir dosyaya dönüştürme:
///usr/bin/env jbang "$0" "$@" ; exit $?  

Notebook ortamı

Notebook'ların avantajları

  • Keşif odaklı programlama: veriyle çalışırken tek seferlik veya küçük ölçekli kod çalıştırmak için uygundur
  • Kod ve metin hücreleri yapısı:
    • Kod hücresi çıktıları metin, tablo, görsel, ses veya video olarak gösterilebilir
    • Deneme-yanılma süreci tekrarlanabilir, istenen sonuca ulaşıldıktan sonra açıklamalar eklenebilir
  • JShell'den daha iyi:
    • Hücre bazlı çalışmak daha kolaydır
    • Veri tabloları ve grafikler görsel olarak incelenebilir
    • Kaydetmek ve paylaşmak kolaydır

Jupyter ve Java notebook'ları

  • Jupyter notebook'ları: Python veri bilimcileri arasında yaygın olarak kullanılan araç
    • Yerelde veya bulutta (ör. Google Colab) çalıştırılabilir
  • Jupyter teknolojisi dilden bağımsızdır:
    • Çeşitli dil çekirdekleri kurulabilir (ör. IJava, JJava, Ganymede, Rapaio)
    • Jupyter Java Anywhere: JBang kullanarak Java çekirdeği kurulumunu basitleştirir
  • Sınırlamalar:
    • Her çekirdekte bağımlılık yönetimi ve metin dışı sonuçların gösterimi farklıdır
    • IJava çekirdeğinde bağımlılık çözümleme konusunda bazı sorunlar vardır
    • Oracle veya büyük sağlayıcıların Java'ya özel bir Colab hizmeti sunması gerekir

Java'da veri işleme ve görselleştirme

  • Python'da NumPy ve Matplotlib gibi kütüphaneler sayesinde veri işlemek kolaydır
    • Java'da ise benzer bir ekosistem henüz yeterince gelişmiş değildir
  • tablesaw:
    • NumPy'ye alternatif olarak kullanılabilir
    • Plot.ly JavaScript paketiyle görselleştirme desteği sunar

JTaccuino projesi

  • JTaccuino:
    • Sven Reimers tarafından geliştirilen bir Java notebook'u
    • JavaFX tabanlı, kullanıcı dostu bir arayüz sunar
    • Arka uç olarak JShell kullanır
    • Erken aşamada olsa da gelişme potansiyeli yüksektir

Kotlin notebook'u

  • Kotlin geliştiricileri için Kotlin Notebook IntelliJ eklentisi sunuluyor

Sonuç

  • Doğru araçlar kullanıldığında Java, küçük işleri ele almak için çok etkili bir seçenek olabilir
  • JBang, üçüncü taraf kütüphaneler kullanan betikler yazmayı kolaylaştırır
  • Java, keşif odaklı programlamada da potansiyel taşır, ancak araç desteğinin iyileştirilmesi gerekir

2 yorum

 
aer0700 2024-12-24

Basit scripting amaçları için kullanıldığında dinamik tipli diller çok daha rahat...
Tabii prototip aşamasını geçince statik diller kullanırım.

 
GN⁺ 2024-12-20
Hacker News yorumu
  • "Hello World" programını çok basit şekilde çalıştırmanın bir yolunu keşfettim. Önceki karmaşık koda göre çok daha sade hale gelmiş.

    • Java 21 kullanırken kodun daha az karmaşık olduğunu hissettim. Özellikle var ve record çok kullanışlı.
    • AoC problemlerini java myfile.java yöntemiyle çözüyorum; java.base paketinin otomatik import edilmesi kullanışlı.
  • Java, JavaScript ve TypeScript kullanıyorum ama script yazmak için .NET ve LINQPad kullanıyorum. LINQ sayesinde script yazmak kolaylaşıyor.

    • Python'a saygı duyuyorum ama okuması zor. PHP ve Python sözdizimine alışık değilim.
  • JDK 1.1 geliştirildiği dönemde test suite'i konusunda bir uzlaşma yoktu. Mark Reinhold, JCK tarzı testleri reddedip basit bir test harness yazmıştı.

    • Java programcıları için en faydalı özellik debugger hot reload. Kod yazmayı çok daha kolaylaştırıyor.
  • Diller zamanla gelişir. Java artık hızlı; generics ve basit type inference özellikleri eklendiği için boilerplate kod azaldı.

  • PHP de faydalı bir dil. Birçok *nix sisteminde önceden kurulu geliyor ve dosya, JSON, ağ istekleri işleme için yararlı bir standart kütüphaneye sahip.

  • Java 23'te java.io.IO içindeki üç metot otomatik olarak import ediliyor. Bu yeni bir type ve --enable-preview seçeneğiyle kullanılabiliyor.

  • Hacker Rank'te "tek dosya Java" ile kod yazmayı öğrendim; whiteboard coding problemlerini çözmek için faydalı.

  • Basit main metodunun nedenini merak ediyorsanız JEP 495'e bakmaya değer. JDK 24'e dahil edilmesi planlanıyor.

  • Tüm kodlama script'lerimde ve işlerimde Java kullanıyorum; şirkette de 5 yıldan uzun süredir kullanıyoruz. Java'nın sürekli gelişmesinden memnunum.