2 puan yazan GN⁺ 2025-01-31 | 1 yorum | WhatsApp'ta paylaş
  • JavaScript Temporal yayını başlıyor

    • Yeni JavaScript Temporal nesnesinin uygulaması, tarayıcıların deneysel sürümlerine dahil edilmeye başladı. Bu, web geliştiricileri için büyük bir haber; çünkü JavaScript'te tarih ve saatle çalışmak önemli ölçüde sadeleşecek ve modernleşecek.
    • Takvim planlama, uluslararasılaştırma ve zamana duyarlı verilere dayanan uygulamalar; yerleşik özellikleri kullanarak verimli, doğru ve tutarlı tarih, saat, süre ve takvim işleyişinden yararlanabilecek.
    • Kararlı tarayıcılar arası desteğe ulaşmaya daha çok var ve uygulama geliştikçe değişiklikler olabilir; ancak şimdiden mevcut Temporal'a göz atıp neden önemli olduğunu ve hangi sorunları çözdüğünü anlayabilirsiniz.
    • Bu hafta MDN'e eklenen, ayrıntılı açıklamalar ve örnekler içeren 270 sayfadan fazla Temporal dokümantasyonu bulunuyor.
  • JavaScript Temporal nedir?

    • Temporal'ı anlamak için JavaScript'in Date nesnesine bakabiliriz. JavaScript 1995'te oluşturulduğunda, Date nesnesi Java'nın ilk dönemlerdeki hatalı java.util.Date uygulamasından kopyalandı.
    • Java bu uygulamayı 1997'de değiştirdi, ancak JavaScript yaklaşık 30 yıldır aynı API'ye sıkışmış durumda.
    • JavaScript'in Date nesnesindeki temel sorun, yalnızca kullanıcının yerel saatini ve UTC'yi desteklemesi, zaman dilimi desteğinin olmamasıdır. Ayrıca ayrıştırma davranışı oldukça güvenilmezdir ve Date nesnesinin değiştirilebilir olması, izlemesi zor hatalara yol açabilir.
    • Tüm bu sorunlar nedeniyle JavaScript'te tarih ve saatle çalışmak karmaşık ve hataya açık hale gelir. Geliştiricilerin çoğu, uygulamalarında tarih ve saati daha iyi işlemek için Moment.js ve date-fns gibi kütüphanelere güvenir.
    • Temporal, Date nesnesinin yerini tamamen almak üzere tasarlandı ve tarih/saat yönetimini güvenilir ve öngörülebilir hale getiriyor. Temporal; zaman dilimi ve takvim gösterimlerini destekliyor, ayrıca dönüştürme, karşılaştırma, hesaplama, biçimlendirme ve daha fazlası için birçok yerleşik metot ekliyor.
  • Temel kavramlar

    • Temporal'daki temel kavramlar; anlık zaman noktası, duvar saati zamanı (yerel zaman) ve süredir. API, bu kavramları ele almak için şu yapıya sahiptir:
      • Süre: Temporal.Duration, iki zaman noktası arasındaki fark
      • Zaman noktaları:
        • Benzersiz zaman noktası:
          • Zaman damgası olarak: Temporal.Instant
          • Zaman dilimli tarih-saat: Temporal.ZonedDateTime
        • Zaman diliminden bağımsız tarih/saat ("Plain"):
          • Tam tarih ve saat: Temporal.PlainDateTime
          • Yalnızca tarih: Temporal.PlainDate
          • Yıl ve ay: Temporal.PlainYearMonth
          • Ay ve gün: Temporal.PlainMonthDay
          • Yalnızca saat: Temporal.PlainTime
      • Şimdi: çeşitli sınıf örnekleri veya belirli bir biçimde güncel zamanı almak için Temporal.now kullanılır
  • Temporal örnekleri

    • Temporal'ın en temel kullanım örneklerinden bazıları, mevcut tarih ve saati ISO dizeleri olarak almaktır. Artık birçok metoda zaman dilimi verilebildiğinden, karmaşık hesaplamaları kendiniz yapmanız gerekmez.
    • Farklı takvimlerle çalışmak da sadeleşiyor; böylece Gregoryen takvimin dışındaki takvim sistemlerinde de (ör. İbrani, Çin, İslam) tarih oluşturabilirsiniz.
    • Unix zaman damgalarıyla çalışmak çok yaygın bir kullanım senaryosudur; çünkü birçok sistem (API'ler, veritabanları) zamanı temsil etmek için bu biçimi kullanır.
    • compare() metodu, sürelerin zarif ve verimli biçimde sıralanmasını sağlar.
  • Temporal'ı deneme ve tarayıcı desteği

    • Destek, deneysel tarayıcı sürümlerine yavaş yavaş eklenmeye başladı ve şu anda en olgun uygulama Firefox'ta bulunuyor.
    • Firefox'ta Temporal, javascript.options.experimental.temporal ayarının arkasında Nightly sürümüne yerleşik olarak geliyor.
    • Deneysel uygulamaların devreye girmesiyle birlikte, Temporal'ı denemek ve JavaScript'te tarih/saat işlemenin modern yaklaşımını öğrenmek için iyi bir zamandayız.
  • Teşekkür

    • Konu üzerindeki çalışmaları için Eric Meyer'e teşekkür ediliyor. Eric'in, mdn/content fork'unda tarayıcı uyumluluk verilerini belgelemesinin ve dokümantasyonu yapılandırmasının üzerinden yaklaşık 4 yıl geçti.
    • Joshua Chen, Eric'ten bayrağı devralarak MDN dokümantasyonu için pull request hazırladı.
    • Firefox Temporal uygulaması üzerindeki çalışmaları için André Bargull'a teşekkür ediliyor.

1 yorum

 
GN⁺ 2025-01-31
Hacker News görüşleri
  • Temporal, mevcut Date() API'sindeki sorunları çözmek için faydalı. Rust'ın chrono'su ve Java'nın Joda Time'ı gibi yüksek kaliteli zaman kütüphanelerinden ilham alarak kullanışlı bir API sunuyor

    • Zaman karmaşıktır; Temporal bunu naif zaman, anlık zaman ve zaman dilimli zaman olarak ayırıp ele alıyor
    • Bir zaman damgasına bir gün eklerken, belirli bir zaman diliminde yerel olup olmadığına karar vermek gerekir. Aksi halde DST veya zaman dilimi değişikliklerinde hatalar ortaya çıkabilir
    • "Sabit ofsetli" zaman damgaları ile belirli bir zaman dilimine ait zaman damgaları arasındaki serileştirme sorunlarını da çözüyor
  • Temporal.ZonedDateTime.prototype.withTimeZone() kullanılarak zaman dilimi dönüştürülebilir

    • Zaman dilimi dönüşümü ve süre işleme, bir kütüphanenin ele alması gereken önemli özelliklerdir ve Temporal bunu yapıyor
    • Ancak Temporal.Duration, kullanıcı tanımlı bir format fonksiyonu sunmuyor
  • Temporal önerisi iyi, ancak karşılaştırmada referans eşitliği kullanması hayal kırıklığı yaratıyor

    • Bu, nesneleri Map anahtarı olarak kullanma veya Set içinde toplama imkânını ortadan kaldırıyor
  • TC39'da birçok özellik geliştiriliyor ve Temporal'ın bir an önce çıkması isteniyor

    • Büyük tarayıcıların yeni özellikleri desteklemesi için geliştirme çabası gerekiyor
  • Temporal'ın zaman dilimi verilerini nasıl güncellediği merak ediliyor

    • Kullanıcı tarayıcısını güncellemezse yanlış saat görebilir
  • Zaman dilimi değiştiğinde bir event eklenmesi öneriliyor

    • Birçok insan her gün zaman dilimi değiştiriyor
  • Temporal adı, genel zaman nesneleriyle çakışmayı önlemek için seçilmiş, ancak ilk bakışta çöp toplama kontrolüyle karıştırılabilir

  • PHP'deki Carbon sınıfı, DateTime'dan kalıtım alarak değiştirilebilir zaman damgalarıyla çalışmanın sorunlarını açıklıyor

    • Her zaman yeni bir örnek döndüren CarbonImmutable kullanılması daha iyi
    • Laravel'de CarbonImmutable ve Carbon'u takma adla içe aktarma yöntemi öneriliyor
  • JavaScript Temporal ile ilgili çeşitli makaleler ve tartışmalar var