Javascript İle Dinamik Bir Hesap Makinesi Uygulaması Nasıl Yapılır?

Javascript İle Dinamik Bir Hesap Makinesi Uygulaması Nasıl Yapılır?
Javascript İle Dinamik Bir Hesap Makinesi Uygulaması Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

JavaScript ile dinamik bir hesap makinesi geliştirmek için karmaşık kurulumlara ihtiyacınız yoktur. Modern bir tarayıcı (Chrome, Firefox veya Edge) ve herhangi bir kod düzenleyici (Visual Studio Code önerilir) yeterlidir. Projenizi başlatmak için bilgisayarınızda bir klasör oluşturun ve içerisine üç temel dosya ekleyin: index.html, style.css ve script.js.

  • HTML: Sayfanın iskeletini oluşturur ve butonları tanımlar.
  • CSS: Hesap makinesinin görsel düzenini ve butonların yerleşimini sağlar.
  • JavaScript: Kullanıcı etkileşimlerini yakalar ve matematiksel hesaplamaları yürütür.

Tarayıcınızın geliştirici araçlarını (F12) kullanarak kodunuzun çalışma anındaki durumunu izlemek, hata ayıklama sürecini hızlandıracaktır.

Adım 1: HTML Yapısını Oluşturma

Hesap makinesinin temelini atmak için bir ekran (display) alanı ve sayısal/operatör butonlarına ihtiyacımız vardır. Aşağıdaki kod bloğu, temiz ve erişilebilir bir HTML yapısı sunar.

C 7 =

Burada input alanı, kullanıcıya sonuçları göstermek için kullanılır. disabled özniteliği, kullanıcının klavye ile doğrudan giriş yapmasını engeller, böylece sadece bizim tanımladığımız butonlar üzerinden işlem yapılmasını sağlarız.

Adım 2: JavaScript ile Temel Fonksiyonları Yazma

Uygulamanın kalbi olan JavaScript dosyasında, ekranı güncelleme ve hesaplama mantığını kurmalıyız. İlk olarak, kullanıcı bir butona bastığında ekranın nasıl güncelleneceğini tanımlayalım.

const display = document.getElementById('display');

function appendToDisplay(input) {
  display.value += input;
}

function clearDisplay() {
  display.value = '';
}

appendToDisplay fonksiyonu, mevcut ekran değerine yeni karakteri ekler. clearDisplay ise ekranı temizler. Bu fonksiyonlar, kullanıcı arayüzü ile veri katmanı arasındaki köprüyü oluşturur.

Adım 3: Matematiksel Hesaplamaları Güvenli Gerçekleştirme

Hesap makinesinin en kritik noktası, girilen ifadeyi hesaplamaktır. eval() fonksiyonu pratik görünse de, güvenlik riskleri nedeniyle dikkatli kullanılmalıdır. İşte güvenli bir hesaplama yaklaşımı:

function calculate() {
  try {
    // Güvenlik notu: eval() kullanımı dışarıdan gelen verilerde tehlikelidir.
    // Sadece rakam ve operatör içeren kısıtlı bir string için kullanılır.
    display.value = eval(display.value);
  } catch (error) {
    display.value = 'Hata';
  }
}

try-catch bloğu, kullanıcının geçersiz bir işlem (örneğin: 5++5) girmesi durumunda uygulamanın çökmesini engeller ve kullanıcıya "Hata" mesajı döndürür.

Güvenlik Uyarısı: eval() fonksiyonu, kötü niyetli kullanıcıların kod çalıştırmasına (XSS saldırıları) neden olabilir. Üretim ortamında (production) matematiksel ifadeleri ayrıştırmak için güvenli bir kütüphane (örneğin math.js) veya özel bir "parser" kullanmanız şiddetle tavsiye edilir.

Adım 4: Kullanıcı Deneyimini İyileştirme

Uygulamanın daha profesyonel görünmesi için klavye desteği eklemek harika bir adımdır. Kullanıcıların fare yerine klavyeyi kullanması, uygulamanın kullanılabilirliğini artırır.

document.addEventListener('keydown', (event) => {
  if (event.key >= '0' && event.key


Adım 5: Klavye Desteği ve Etkileşimli Deneyim

Kullanıcıların hesap makinesini daha hızlı kullanabilmesi için klavye tuşlarını dinleyen bir event listener eklemek, uygulamanın profesyonellik seviyesini artırır. Aşağıdaki kod bloğu, kullanıcı klavyeden bir sayıya veya operatöre bastığında, bu girdiyi hesap makinesinin ekranına otomatik olarak yansıtır.

document.addEventListener('keydown', (event) => {
  const key = event.key;
  const display = document.getElementById('display');

  if (/[0-9]/.test(key)) {
    display.value += key;
  } else if (['+', '-', '*', '/'].includes(key)) {
    display.value += key;
  } else if (key === 'Enter') {
    calculate();
  } else if (key === 'Escape') {
    display.value = '';
  } else if (key === 'Backspace') {
    display.value = display.value.slice(0, -1);
  }
});

Bu yapı sayesinde kullanıcılar fareyle tıklama yapmadan, standart bir hesap makinesi gibi klavyelerini kullanarak işlemlerini gerçekleştirebilirler. Backspace tuşu ile son girilen karakteri silmek, kullanıcı hatalarını minimize etmek için kritik bir özelliktir.

Adım 6: Performans Optimizasyonu ve Kod Yapısı

Uygulamanız büyüdükçe, DOM (Document Object Model) manipülasyonlarını optimize etmek önem kazanır. Her tuş basımında tüm sayfayı yeniden render etmek yerine, sadece değişen ekran değerini güncellemek performans kaybını önler.

Modüler Kodlama Yaklaşımı

Kodunuzu daha okunabilir ve bakımı kolay hale getirmek için fonksiyonları mantıksal parçalara ayırın. Örneğin, hesaplama mantığını UI (arayüz) mantığından ayırmak, gelecekte uygulamanıza bir "geçmiş" (history) özelliği eklemek istediğinizde işinizi kolaylaştıracaktır.

// Hesaplama mantığını izole eden fonksiyon
const performCalculation = (expression) => {
  // Burada güvenli bir parser veya kütüphane kullanılmalıdır
  return new Function('return ' + expression)();
};

// Arayüzü güncelleyen fonksiyon
const updateDisplay = (value) => {
  const display = document.getElementById('display');
  display.value = value;
};

Bu yaklaşım, uygulamanızın test edilebilirliğini artırır. Birim testleri (unit tests) yazarken, performCalculation fonksiyonunu bağımsız olarak test edebilir ve farklı matematiksel senaryoları (negatif sayılar, ondalıklı işlemler) kolayca doğrulayabilirsiniz.

Adım 7: Deployment ve Yayına Alma

Uygulamanızı internet üzerinde erişilebilir kılmak için basit bir statik hosting hizmeti kullanabilirsiniz. GitHub Pages, Vercel veya Netlify gibi platformlar, projenizi saniyeler içinde yayına almanıza olanak tanır.

  • Minifikasyon: Yayın öncesi JS ve CSS dosyalarınızı küçülterek (minify) yükleme sürelerini azaltın.
  • HTTPS: Tarayıcı güvenliği için uygulamanızın mutlaka SSL sertifikası ile sunulduğundan emin olun.
  • Responsive Kontrolü: Farklı ekran boyutlarında (mobil, tablet, masaüstü) butonların tıklanabilirliğini test edin.

Uygulamanızın mobil cihazlarda düzgün görünmesi için CSS içerisinde viewport meta etiketini kontrol etmeyi ve flexbox veya grid yapılarını kullanarak esnek bir tasarım oluşturmayı unutmayın.

Bu yazıya tepkinizi paylaşın:
Mert Çelik

Teknoloji dünyasını ve dijital araçları günlük hayata entegre etme konusunda içerikler üretiyorum. Karmaşık teknik rehberleri en yalın haliyle sunmayı hedefliyorum.

Yorumlar (16)

16
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Oğuzhan A.
Oğuzhan A. 26 Temmuz 2026

Açıklamalar net ve öz. Karmaşık kütüphaneler yerine saf JS kullanman çok daha öğretici olmuş.

Merve Demir
Merve Demir 28 Temmuz 2026

Kodlamayı yeni öğreniyom, sayende mantığını kavradım. Emeğinize sağlık.

Emre Can
Emre Can 29 Temmuz 2026

Yazı güzel ama biraz daha ileri seviye fonksiyonlar (karekök, yüzde alma vs.) nasıl eklenir? O kısımları da bi anlatırsan harika olur.

Mert Çelik
Mert Çelik 30 Temmuz 2026

Harika fikir Emre, bir sonraki yazımda hesap makinesini geliştirmeyi planlıyorum, takipte kal!

Fatma Nur
Fatma Nur 30 Temmuz 2026

Başlangıç seviyesi için gayet anlaşılır, anlatım dilini beğendim.

Deniz Yıldırım
Deniz Yıldırım 31 Temmuz 2026

Mobil uyumluluk için media query kodlarını da eklesen şahane olurmuş, şu haliyle telefonda biraz kayıyor.

Ece Gür
Ece Gür 01 Ağustos 2026

Evet, kesinlikle! Ben kendi projemde ufak bir max-width ayarı ile düzelttim, sen de deneyebilirsin.

Hakan Tekin
Hakan Tekin 31 Temmuz 2026

Dostum kodların bazı yerlerinde parantez eksiklikleri var gibi, kopyalarken hata aldım. Bi kontrol edersen iyi olur.

Mert Çelik
Mert Çelik 02 Ağustos 2026

Haklısın Hakan, ufak bir düzenleme yaptım. Geri bildirim için teşekkürler.

Melis K.
Melis K. 02 Ağustos 2026

Tamda proje ödevim için aradığım rehberdi, çok teşekkürler :)

Burak Özdemir
Burak Özdemir 03 Ağustos 2026

Süper rehber olmuş. Tasarımı biraz daha modernleştirmek için CSS Grid mi kullanmalıyız yoksa Flexbox yeterli olur mu?

Mert Çelik
Mert Çelik 04 Ağustos 2026

Kesinlikle CSS Grid daha düzenli bir ızgara yapısı sağlar, tercih edebilirsin.

Zeynep S.
Zeynep S. 04 Ağustos 2026

Ya ben kodları kopyaladım ama butonlara basınca hiçbişey olmuyo. Konsolda hata da gözükmüyo, nerede yanlış yapıyom acaba?

Selim Aras
Selim Aras 05 Ağustos 2026

JavaScript dosyasını HTML'in en altına bağladın mı? Script tag'ini kontrol et bence, bazen unutuluyor.

Caner Yılmaz
Caner Yılmaz 05 Ağustos 2026

Eline sağlık Mert hocam, çok açıklayıcı olmuş. Özellikle eval() fonksiyonu yerine daha güvenli yöntemleri anlatman harika, çoğu kişi bunu atlıyor.

Mert Çelik
Mert Çelik 06 Ağustos 2026

Çok teşekkürler Caner, güvenlik konusunu es geçmemek lazım. Yorumun için sağ ol!

Yorum Yaz