- Basit, çapraz platform bir reaktif GUI araç takımı
- Basitlik: Projeye kolayca eklenebilir ve hemen UI oluşturmaya başlanabilir. Ek araçlara veya kod üretim aşamasına gerek yoktur. Go kodu yazarak kendi içinde her şeyi barındıran bir ikili dosya ile yerel GUI uygulamaları oluşturulabilir
- Çapraz platform: Mümkün olduğunda yerel widget'ları kullanır ve derleme sırasında çalışılan platform için en uygun backend'i otomatik olarak seçer. Şu anda FLTK tabanlı ve Cocoa tabanlı iki backend uygulaması sunulmaktadır
- Reaktif: Uygulama durumu değiştiğinde UI'yi otomatik olarak günceller. Yan etkisiz render fonksiyonları sağlar ve uygulama durumunu yönetmek için
UseState hook'unu kullanır
- Geniş widget desteği: Spot; butonlar, etiketler, metin girişi, slider'lar, açılır menüler ve daha birçok UI kontrolünü varsayılan olarak sunar
Sık sorulan sorular (SSS)
"Reaktif" ne anlama geliyor?
- Spot'ta reaktif, uygulama durumu değiştiğinde UI'nin otomatik olarak güncellenmesi anlamına gelir. Bu, durum değiştiğinde değişmez bileşen ağacını yeniden oluşturarak ve önceki durumla karşılaştırıp hangi UI kontrollerinin güncellenmesi gerektiğini belirleyerek gerçekleştirilir.
Spot'un kullandığı "yerel widget'lar" nedir?
- Şu anda Spot, macOS'ta Cocoa backend'ini, diğer tüm platformlarda ise FLTK tabanlı backend'i kullanır. İsteğe bağlı olarak Mac'te de FLTK kullanılabilir. Gelecekte Windows için daha iyi destek planlanmaktadır.
Kendi hook'larımı uygulayabilir miyim?
- Evet, React'te olduğu gibi kendi hook'larınızı uygulayabilirsiniz. İlk argüman olarak
*spot.RenderContext alan bir fonksiyon oluşturup bunun üzerinden Spot yaşam döngüsüne "hook" ekleyebilirsiniz.
Özel bileşenler nasıl yazılır?
- Spot'ta UI'yi bileşenlere ayırmanın birkaç yolu vardır. Ana yöntem,
spot.Component arayüzünü uygulayan bir struct oluşturmaktır. Bu arayüz, Render(ctx *spot.RenderContext) spot.Component adlı tek bir metoda sahiptir.
Sunulanlar dışında farklı bir widget kütüphanesi kullanılabilir mi?
- Evet, kullanılabilir.
spot.Component arayüzünü uygulayan ve yerel widget'ları yöneten bir struct oluşturmanız yeterlidir.
Cocoa veya FLTK dışında backend kullanılabilir mi?
- Şimdilik yalnızca bu iki backend desteklenmektedir. Başka bir backend eklemek istiyorsanız bir PR gönderebilirsiniz.
spot/ui ile spot arasındaki fark nedir?
spot, reaktif model ve render yeteneklerini sağlayan çekirdek pakettir. Backend'den bağımsızdır ve spot.Control arayüzünü uygulayan her türlü kontrol setiyle birlikte kullanılabilir.
spot/ui, spot ile birlikte kullanılabilecek önceden hazırlanmış çapraz platform GUI kontrol seti sağlar.
"Bileşen" ile "kontrol" arasındaki fark nedir?
- Spot'ta bileşen, iş mantığı ve durumu içeren uygulamanın mantıksal birimidir. Tüm bileşenler başka bileşenlerden oluşur ve nihayetinde bir veya daha fazla "kontrol" olarak render edilir.
- Kontrol, UI ağacına mount edilen ve ekranda görsel öğeyi temsil eden özel bir bileşen türüdür.
Spot'ta "make", "render", "build", "mount", "update" terimleri ne anlama gelir?
- Make: Yeni bir bileşen örneği oluşturma süreci.
spot.Component arayüzünü uygulayan bir struct örneğine başvurarak veya render fonksiyonuyla spot.Make çağrılarak yapılır.
- Render: Bileşenin durumunu yapı taşlarına uygulayıp başka bir bileşen örneği döndürme süreci. Bileşen örneğinde
Render metodunu çağırarak yapılır.
- Build: Bileşen örneğinden yeni bir UI ağacı oluşturma süreci. Bileşenler özyinelemeli olarak render edilerek kontrol ağacı oluşturulur.
- Mount: (Sanal) kontrol ağacından gerçek UI kontrolleri oluşturma süreci. Ağaç düğümünde
Mount çağrılarak veya bileşen örneği ya da render fonksiyonuyla spot.Mount çağrılarak yapılır.
- Update: (Mount edilmiş) kontrol ağacını güncelleme süreci. Ağaç düğümünde
Update çağrılarak yapılır.
Spot'un şu anda desteklemediği özellikler
- Otomatik yerleşim
- Çoklu pencere
- Modal iletişim kutuları
- Yeniden boyutlandırılabilir pencereler
- Menü çubuğu
- Özel widget'lar
- Yerel widget erişimi
- Sürükle ve bırak
- Uluslararasılaştırma
Desteklenen UI kontrolleri listesi
- Button: Bir eylem başlatan basit buton (Fl_Button, NSButton)
- Checkbox: Karşılıklı olarak dışlayıcı iki seçenekten birini seçen kontrol (Fl_Check_Button, NSButton (NSButtonTypeSwitch))
- ComboBox: Metin girişi yapılabilen açılır menü (ComboBox, NSComboBox)
- Dial: Dairesel durum kontrolü (Fl_Dial, NSProgressIndicator (with
NSCircular style))
- Dropdown: Birden çok seçenekten birini seçen açılır menü (Fl_Choice, NSComboBox)
- Image: Görsel kontrolü (Image, NSImageView)
- Label: Basit, düzenlenemeyen metin etiketi (Fl_Box, NSTextField)
- ListBox: Verilen listeden bir veya birden fazla öğe seçilebilen kaydırılabilir kontrol (Fl_Select_Browser/Fl_Multi_Browser, NSTableView)
- ProgressBar: Uzun süren işlerin ilerlemesini görselleştiren ilerleme çubuğu kontrolü (Fl_Progress, NSProgressIndicator)
- Slider: Yatay slider giriş kontrolü (Fl_Slider, NSSlider)
- Spinner: Yukarı/aşağı düğmeleri bulunan sayısal giriş kontrolü (Fl_Spinner, NSTextField+NSStepper)
- TextField: Tek satırlı metin giriş kontrolü (Fl_Input, NSTextField)
- TextView/TextEditor: Çok satırlı metin içeriğini görüntüleyip düzenleyebilen genel amaçlı metin kutusu (Text, NSTextView)
- Window: Ekranda (üst düzey) pencereyi temsil eden kontrol (Fl_Window, NSWindow)
GN⁺ görüşü
- Spot, Go diliyle çapraz platform GUI uygulamalarının kolayca geliştirilmesini sağlar. Özellikle reaktif modeli benimseyerek geliştiricilerin UI güncellemeleriyle uğraşmadan uygulama mantığına odaklanmasına yardımcı olur.
- Şu anda desteklenmeyen birçok özellik bulunduğundan, karmaşık uygulamalar geliştirirken bazı kısıtlar olabilir. Özellikle otomatik yerleşim veya çoklu pencere gibi özelliklere ihtiyaç varsa başka araç takımları değerlendirilmelidir.
- Spot'un sadeliği ve çapraz platform desteği, küçük projeler veya prototip geliştirme için çok yararlı olabilir. Ancak büyük ölçekli uygulamalarda işlevsellik sınırları olabilir.
- Spot'un topluluğu ve dokümantasyonu daha da gelişirse, daha fazla geliştirici ona kolayca erişip kullanabilir. Özellikle özel hook'lar ve bileşen yazımı konusunda daha fazla örnek faydalı olacaktır.
- Spot'un backend genişletilebilirliği ilgi çekicidir. Özellikle Windows için daha iyi destek eklenirse daha fazla geliştirici tarafından kullanılabilir.
1 yorum
Hacker News görüşleri
Hacker News yorumlarının özeti