- 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
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));
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
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.
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ş.
varverecordçok kullanışlı.java myfile.javayöntemiyle çözüyorum;java.basepaketinin 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.
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ı.
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.IOiçindeki üç metot otomatik olarak import ediliyor. Bu yeni bir type ve--enable-previewseç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.