Proje Detayları
Proje Tanımı
Bu projede, temel aritmetik işlemleri (toplama, çıkarma, çarpma, bölme) yapabilen basit bir hesap makinesi uygulaması geliştireceğiz. Proje, DOM manipülasyonu ve olay işleme (event handling) konularını pekiştirmenize yardımcı olacak.
Adım Adım Geliştirme
1 HTML Yapısını Oluşturmaİlk olarak, hesap makinesinin HTML yapısını oluşturalım. Bir ekran (display) ve tuşlar için butonlar içeren bir yapı oluşturacağız.
Not: HTML yapısında, veri öznitelikleri (data attributes) kullanarak butonların işlevlerini belirtiyoruz. data-number
özniteliği sayı tuşlarını, data-operator
özniteliği ise operatör tuşlarını belirtiyor. Bu, JavaScript kodunda bu tuşları kolayca seçmemizi sağlayacak.
2 CSS ile Stil VermeŞimdi, hesap makinesine stil verelim. Grid layout kullanarak tuşları düzenleyeceğiz ve görsel olarak çekici bir arayüz oluşturacağız.
İpucu: CSS Grid, hesap makinesi tuşlarını düzenlemek için mükemmel bir seçenektir. Eşittir (=) tuşunu diğer tuşlardan daha büyük yapmak için grid-column
ve grid-row
özelliklerini kullanıyoruz.
3 JavaScript ile İşlevsellik EklemeSon olarak, JavaScript ile hesap makinesine işlevsellik ekleyelim. Tuşlara tıklandığında gerçekleşecek olayları ve hesaplama mantığını kodlayacağız.
Uyarı: Sıfıra bölme durumunu kontrol etmeyi unutmayın. Yukarıdaki kodda, sıfıra bölme durumunda "Hata" mesajı gösteriliyor ve hesap makinesi sıfırlanıyor.
4 Projeyi Test Etme ve Hata AyıklamaHesap makinesini oluşturduktan sonra, farklı senaryoları test ederek doğru çalıştığından emin olun:
- Basit işlemler: 2 + 2 = 4, 5 - 3 = 2, 4 * 3 = 12, 10 / 2 = 5
- Ardışık işlemler: 2 + 3 * 4 = 14 (2 + 3 = 5, 5 * 4 = 20)
- Ondalık sayılar: 2.5 + 1.3 = 3.8
- Sıfıra bölme: 5 / 0 = "Hata"
- Temizle tuşu: C tuşuna basıldığında hesap makinesi sıfırlanmalı
- Klavye desteği: Sayılar, operatörler, Enter ve Escape tuşları çalışmalı
Herhangi bir hata veya beklenmeyen davranış tespit ederseniz, JavaScript kodunuzu gözden geçirin ve düzeltin.
5 Bonus Özellikleri EklemeTemel hesap makinesi işlevselliğini tamamladıktan sonra, aşağıdaki bonus özellikleri ekleyebilirsiniz:
İlk olarak, hesap makinesinin HTML yapısını oluşturalım. Bir ekran (display) ve tuşlar için butonlar içeren bir yapı oluşturacağız.
Not: HTML yapısında, veri öznitelikleri (data attributes) kullanarak butonların işlevlerini belirtiyoruz. data-number
özniteliği sayı tuşlarını, data-operator
özniteliği ise operatör tuşlarını belirtiyor. Bu, JavaScript kodunda bu tuşları kolayca seçmemizi sağlayacak.
Şimdi, hesap makinesine stil verelim. Grid layout kullanarak tuşları düzenleyeceğiz ve görsel olarak çekici bir arayüz oluşturacağız.
İpucu: CSS Grid, hesap makinesi tuşlarını düzenlemek için mükemmel bir seçenektir. Eşittir (=) tuşunu diğer tuşlardan daha büyük yapmak için grid-column
ve grid-row
özelliklerini kullanıyoruz.
Son olarak, JavaScript ile hesap makinesine işlevsellik ekleyelim. Tuşlara tıklandığında gerçekleşecek olayları ve hesaplama mantığını kodlayacağız.
Uyarı: Sıfıra bölme durumunu kontrol etmeyi unutmayın. Yukarıdaki kodda, sıfıra bölme durumunda "Hata" mesajı gösteriliyor ve hesap makinesi sıfırlanıyor.
Hesap makinesini oluşturduktan sonra, farklı senaryoları test ederek doğru çalıştığından emin olun:
- Basit işlemler: 2 + 2 = 4, 5 - 3 = 2, 4 * 3 = 12, 10 / 2 = 5
- Ardışık işlemler: 2 + 3 * 4 = 14 (2 + 3 = 5, 5 * 4 = 20)
- Ondalık sayılar: 2.5 + 1.3 = 3.8
- Sıfıra bölme: 5 / 0 = "Hata"
- Temizle tuşu: C tuşuna basıldığında hesap makinesi sıfırlanmalı
- Klavye desteği: Sayılar, operatörler, Enter ve Escape tuşları çalışmalı
Herhangi bir hata veya beklenmeyen davranış tespit ederseniz, JavaScript kodunuzu gözden geçirin ve düzeltin.
Temel hesap makinesi işlevselliğini tamamladıktan sonra, aşağıdaki bonus özellikleri ekleyebilirsiniz:
Yüzde (%) İşlemi
Pozitif/Negatif Değiştirme (+/-)
İşlem Geçmişi
Proje Zorlukları ve Çözümleri
Zorluk 1: Ardışık İşlemler
Hesap makinelerinde, bir işlem tamamlandıktan sonra başka bir işlem yapılabilir. Örneğin, 2 + 3 = 5 işleminden sonra, 5 * 4 = 20 işlemi yapılabilir. Bu durumu doğru bir şekilde yönetmek önemlidir.
Çözüm: inputOperator
fonksiyonunda, eğer zaten bir operatör ve ilk operand varsa, calculate
fonksiyonunu çağırarak mevcut işlemi tamamlayın ve sonucu yeni ilk operand olarak kullanın.
Hesap makinelerinde, bir işlem tamamlandıktan sonra başka bir işlem yapılabilir. Örneğin, 2 + 3 = 5 işleminden sonra, 5 * 4 = 20 işlemi yapılabilir. Bu durumu doğru bir şekilde yönetmek önemlidir.
Çözüm: inputOperator
fonksiyonunda, eğer zaten bir operatör ve ilk operand varsa, calculate
fonksiyonunu çağırarak mevcut işlemi tamamlayın ve sonucu yeni ilk operand olarak kullanın.
Zorluk 2: Ondalık Sayılar
JavaScript'te ondalık sayılarla çalışırken, bazen beklenmeyen sonuçlar alabilirsiniz. Örneğin, 0.1 + 0.2 = 0.30000000000000004 gibi.
Çözüm: Sonuçları belirli bir hassasiyetle yuvarlayarak bu sorunu çözebilirsiniz. Yukarıdaki kodda, Math.round(result * 1000000) / 1000000
kullanarak sonucu 6 ondalık basamağa yuvarlıyoruz.
JavaScript'te ondalık sayılarla çalışırken, bazen beklenmeyen sonuçlar alabilirsiniz. Örneğin, 0.1 + 0.2 = 0.30000000000000004 gibi.
Çözüm: Sonuçları belirli bir hassasiyetle yuvarlayarak bu sorunu çözebilirsiniz. Yukarıdaki kodda, Math.round(result * 1000000) / 1000000
kullanarak sonucu 6 ondalık basamağa yuvarlıyoruz.
Zorluk 3: Sıfıra Bölme
Matematiksel olarak, bir sayıyı sıfıra bölmek tanımsızdır ve JavaScript'te Infinity değeri döndürür.
Çözüm: Bölme işlemi yapmadan önce, ikinci operandın sıfır olup olmadığını kontrol edin. Eğer sıfırsa, bir hata mesajı gösterin ve hesap makinesini sıfırlayın.
Matematiksel olarak, bir sayıyı sıfıra bölmek tanımsızdır ve JavaScript'te Infinity değeri döndürür.
Çözüm: Bölme işlemi yapmadan önce, ikinci operandın sıfır olup olmadığını kontrol edin. Eğer sıfırsa, bir hata mesajı gösterin ve hesap makinesini sıfırlayın.
Geliştirme İpuçları
- Modüler Kod Yazın: Kodunuzu küçük, anlaşılır fonksiyonlara bölün. Her fonksiyon tek bir işi yapmalıdır.
- Durum Yönetimi: Hesap makinesinin durumunu (ilk operand, operatör, ikinci operand bekleniyor mu vb.) doğru bir şekilde yönetin.
- Hata Kontrolü: Sıfıra bölme gibi hata durumlarını kontrol edin ve kullanıcıya uygun mesajlar gösterin.
- Kullanıcı Deneyimi: Hesap makinesinin kullanımını kolaylaştırmak için klavye desteği ekleyin.
- Görsel Geri Bildirim: Tuşlara tıklandığında görsel geri bildirim sağlayın (hover efektleri, aktif durum stilleri vb.).
- Modüler Kod Yazın: Kodunuzu küçük, anlaşılır fonksiyonlara bölün. Her fonksiyon tek bir işi yapmalıdır.
- Durum Yönetimi: Hesap makinesinin durumunu (ilk operand, operatör, ikinci operand bekleniyor mu vb.) doğru bir şekilde yönetin.
- Hata Kontrolü: Sıfıra bölme gibi hata durumlarını kontrol edin ve kullanıcıya uygun mesajlar gösterin.
- Kullanıcı Deneyimi: Hesap makinesinin kullanımını kolaylaştırmak için klavye desteği ekleyin.
- Görsel Geri Bildirim: Tuşlara tıklandığında görsel geri bildirim sağlayın (hover efektleri, aktif durum stilleri vb.).
Proje Genişletme Fikirleri
- Bilimsel Hesap Makinesi: Trigonometrik fonksiyonlar (sin, cos, tan), logaritma, karekök, üs alma gibi bilimsel hesap makinesi özellikleri ekleyin.
- Tema Değiştirme: Kullanıcının açık/koyu tema arasında geçiş yapabilmesini sağlayın.
- Hafıza Fonksiyonları: M+, M-, MR, MC gibi hafıza fonksiyonları ekleyin.
- İşlem Geçmişi: Yapılan işlemlerin geçmişini gösterin ve geçmişteki işlemleri tekrar kullanabilme özelliği ekleyin.
- Parantez Desteği: Matematiksel işlem önceliğini değiştirmek için parantez kullanımı ekleyin.
- Bilimsel Hesap Makinesi: Trigonometrik fonksiyonlar (sin, cos, tan), logaritma, karekök, üs alma gibi bilimsel hesap makinesi özellikleri ekleyin.
- Tema Değiştirme: Kullanıcının açık/koyu tema arasında geçiş yapabilmesini sağlayın.
- Hafıza Fonksiyonları: M+, M-, MR, MC gibi hafıza fonksiyonları ekleyin.
- İşlem Geçmişi: Yapılan işlemlerin geçmişini gösterin ve geçmişteki işlemleri tekrar kullanabilme özelliği ekleyin.
- Parantez Desteği: Matematiksel işlem önceliğini değiştirmek için parantez kullanımı ekleyin.