آموزش رایگان جاوا اسکریپت (JavaScript)

آموزش صفر تا صد ساخت ماشین حساب با جاوا اسکریپت (پروژه محور و کاربردی)

1405/03/13 23:55 محراب حسن زاده
آموزش صفر تا صد ساخت ماشین حساب با جاوا اسکریپت (پروژه محور و کاربردی)

مقدمه

یکی از بهترین و موثرترین راه‌ها برای یادگیری عمیق زبان برنامه‌نویسی جاوا اسکریپت (JavaScript)، انجام پروژه‌های عملی و کاربردی است. طراحی و ساخت یک ماشین حساب، پروژه‌ای کلاسیک و در عین حال بسیار قدرتمند است که مفاهیم اساسی توسعه وب فرانت‌اند را به شما آموزش می‌دهد. در این مقاله تفصیلی، ما قدم به قدم یک ماشین حساب مدرن و ریسپانسیو (Responsive) را با استفاده از مثلث طلایی وب یعنی HTML5 ،CSS3 و جاوا اسکریپت خواهیم ساخت.

چرا ساخت ماشین حساب اهمیت دارد؟

شاید بپرسید چرا این پروژه برای یادگیری جاوا اسکریپت حیاتی است؟ دلیل آن درگیر شدن شما با سه بخش کلیدی توسعه وب است:

  • طراحی ساختار (HTML): یادگیری نحوه چیدمان منطقی دکمه‌ها و نمایشگر ماشین حساب.
  • استایل‌دهی (CSS): استفاده از ابزارهای مدرن مانند Grid و Flexbox برای چیدمان دکمه‌ها در یک ساختار منظم و واکنش‌گرا.
  • منطق برنامه (JavaScript): کار با رویدادهای کلیک (Event Listeners)، دریافت ورودی کاربر، مدیریت وضعیت برنامه (State Management) و انجام محاسبات ریاضی به صورت پویا.

بخش اول: ساختارگرایی با HTML

در ابتدا نیاز داریم تا اسکلت یا ساختار فیزیکی ماشین حساب خود را تعریف کنیم. ما به یک محفظه اصلی (Container)، یک صفحه نمایش برای نشان دادن ارقام و یک گالری از دکمه‌ها برای اعداد و عملگرها نیاز داریم.

در این قطعه کد، ساختار HTML پروژه را مشاهده می‌کنید:


< div class="calculator" >
  < div class="display" id="display" >0< / div >
  < div class="buttons" >
    < button class="btn clear" onclick="clearDisplay()" >C< / button >
    < button class="btn operator" onclick="appendOperator('/')" >/< / button >
    < button class="btn operator" onclick="appendOperator('*')" >*< / button >
    < button class="btn operator" onclick="appendOperator('-')" >-< / button >
    < button class="btn" onclick="appendNumber('7')" >7< / button >
    < button class="btn" onclick="appendNumber('8')" >8< / button >
    < button class="btn" onclick="appendNumber('9')" >9< / button >
    < button class="btn operator" onclick="appendOperator('+')" >+< / button >
    < button class="btn" onclick="appendNumber('4')" >4< / button >
    < button class="btn" onclick="appendNumber('5')" >5< / button >
    < button class="btn" onclick="appendNumber('6')" >6< / button >
    < button class="btn equal" onclick="calculate()" >=< / button >
    < button class="btn" onclick="appendNumber('1')" >1< / button >
    < button class="btn" onclick="appendNumber('2')" >2< / button >
    < button class="btn" onclick="appendNumber('3')" >3< / button >
    < button class="btn" onclick="appendNumber('0')" >0< / button >
    < button class="btn" onclick="appendNumber('.')" >.< / button >
  < / div >
< / div >

بخش دوم: زیبایی بصری با CSS

بدون استایل‌های مناسب، ماشین حساب ما صرفاً یک لیست از دکمه‌های نامرتب خواهد بود. با استفاده از CSS Grid، دکمه‌ها را به صورت یک شبکه منظم ۴ ستونه در می‌آوریم و از رنگ‌های جذاب برای تفکیک دکمه‌های ریاضی استفاده می‌کنیم.


body {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    background-color: #f0f2f5;
    font-family: Arial, sans-serif;
}
.calculator {
    background-color: #1e1e24;
    padding: 20px;
    border-radius: 10px;
    box-shadow: 0px 4px 10px rgba(0,0,0,0.3);
    width: 320px;
}
.display {
    background-color: #3a3d40;
    color: #ffffff;
    font-size: 2.5rem;
    text-align: right;
    padding: 15px;
    border-radius: 5px;
    margin-bottom: 20px;
    overflow-x: auto;
    white-space: nowrap;
}
.buttons {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
}
.btn {
    background-color: #e0e0e0;
    border: none;
    padding: 20px;
    font-size: 1.2rem;
    border-radius: 5px;
    cursor: pointer;
    transition: background 0.2s;
}
.btn:hover {
    background-color: #d4d4d4;
}
.operator {
    background-color: #ff9f0a;
    color: white;
}
.operator:hover {
    background-color: #cc7f08;
}
.clear {
    background-color: #ff3b30;
    color: white;
}
.clear:hover {
    background-color: #cc2f26;
}
.equal {
    background-color: #34c759;
    color: white;
    grid-row: span 2;
    height: 100%;
}
.equal:hover {
    background-color: #289e44;
}

بخش سوم: مدیریت منطق و پردازش ریاضی با جاوا اسکریپت

جاوا اسکریپت مغز متفکر پروژه ماست. وظیفه اصلی آن ذخیره مقادیر ورودی، مدیریت عملیات ریاضی، و در نهایت ارزیابی فرمول وارد شده و نمایش نتیجه نهایی است.

برای پیاده‌سازی این کار، توابع مختلفی را برای افزودن اعداد، مدیریت دکمه پاک کردن (Clear) و دکمه محاسبه (Equal) تعریف می‌کنیم:


const display = document.getElementById('display');
let currentInput = '0';
let shouldResetDisplay = false;

function updateDisplay() {
    display.innerText = currentInput;
}

function appendNumber(number) {
    if (currentInput === '0' || shouldResetDisplay) {
        currentInput = number;
        shouldResetDisplay = false;
    } else {
        currentInput += number;
    }
    updateDisplay();
}

function appendOperator(operator) {
    const lastChar = currentInput.slice(-1);
    // جلوگیری از تکرار همزمان عملگرها در کنار هم
    if (['+', '-', '*', '/'].includes(lastChar)) {
        currentInput = currentInput.slice(0, -1) + operator;
    } else {
        currentInput += operator;
    }
    shouldResetDisplay = false;
    updateDisplay();
}

function clearDisplay() {
    currentInput = '0';
    updateDisplay();
}

function calculate() {
    try {
        // فیلتر کردن مقادیر ورودی برای دلایل امنیتی پیش از اجرا
        const sanitizedInput = currentInput.replace(/[^0-9+\-*\/.]/g, '');
        const result = Function('"use strict";return (' + sanitizedInput + ')')();
        currentInput = String(result);
        shouldResetDisplay = true;
        updateDisplay();
    } catch (error) {
        currentInput = 'Error';
        updateDisplay();
        shouldResetDisplay = true;
    }
}

توضیحات فنی کد جاوا اسکریپت

بیایید بخش‌های مهم کد بالا را با هم مرور کنیم تا مفهوم کار عمیق‌تر درک شود:

۱. مدیریت فواصل و بازنشانی صفحه (State Management)

متغیر shouldResetDisplay وظیفه دارد به برنامه بگوید که آیا پس از فشرده شدن کلید مساوی، با زدن دکمه عددی بعدی، صفحه پاک شود یا خیر. این کار تجربه کاربری بهتری ایجاد می‌کند.

۲. امنیت در ارزیابی فرمول‌ها

استفاده مستقیم از تابع معروف eval() در دنیای وب به دلیل مسائل امنیتی توصیه نمی‌شود. به جای آن، ما ورودی کاربر را ابتدا با یک الگوی منظم (Regex) بررسی کرده و کاراکترهای مخرب احتمالی را حذف می‌کنیم، سپس با ساختار امن‌تر Function() فرمول ریاضی را محاسبه می‌کنیم.

نتیجه‌گیری

تبریک می‌گویم! شما موفق شدید یک پروژه کاربردی و مدرن را از پایه خلق کنید. این پروژه مفاهیم متعددی از جمله رویدادها، متغیرهای موقت، مدیریت خطاها و همچنین طراحی تمیز با CSS Grid را در بر داشت. یادگیری فرانت‌اند با انجام این‌گونه پروژه‌ها بسیار ساده‌تر و لذت‌بخش‌تر خواهد بود.


پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش جامع ساخت فرم ورود کاربر در PHP (براساس استانداردهای گوگل و امنیت بالا)
1405/05/14 22:03

آموزش جامع ساخت فرم ورود کاربر در PHP (براساس استانداردهای گوگل و امنیت بالا)

مطالعه بیشتر
راهنمای کامل جداول HTML: آموزش ساخت و بهینه‌سازی سئو
1402/05/21 23:26

راهنمای کامل جداول HTML: آموزش ساخت و بهینه‌سازی سئو

مطالعه بیشتر
آموزش ساخت یک Todo List با استفاده از DOM و جاوا اسکریپت: راهنمای گام به گام
1403/08/03 16:30

آموزش ساخت یک Todo List با استفاده از DOM و جاوا اسکریپت: راهنمای گام به گام

مطالعه بیشتر
ایجاد Layout‌های واکنش‌گرا با flex-direction و justify-content در CSS Flexbox: راهنمای جامع
1403/08/11 20:59

ایجاد Layout‌های واکنش‌گرا با flex-direction و justify-content در CSS Flexbox: راهنمای جامع

مطالعه بیشتر
آموزش جامع ساخت پنل مدیریت ساده و استاندارد با PHP
1405/05/14 22:19

آموزش جامع ساخت پنل مدیریت ساده و استاندارد با PHP

مطالعه بیشتر
آموزش انیمیشن‌های پیشرفته با keyframes در CSS: طراحی حرکات پویا و چند مرحله‌ای
1402/06/18 22:48

آموزش انیمیشن‌های پیشرفته با keyframes در CSS: طراحی حرکات پویا و چند مرحله‌ای

مطالعه بیشتر
نصب Vue.js و ایجاد پروژه ساده: آموزش گام‌به‌گام راه‌اندازی Vue
1402/06/28 00:41

نصب Vue.js و ایجاد پروژه ساده: آموزش گام‌به‌گام راه‌اندازی Vue

مطالعه بیشتر
آموزش کامل کار با آرایه‌ها و اشیاء در جاوا اسکریپت: ایجاد، دستکاری و پیمایش
1403/06/02 21:08

آموزش کامل کار با آرایه‌ها و اشیاء در جاوا اسکریپت: ایجاد، دستکاری و پیمایش

مطالعه بیشتر
آموزش CSS Transform و Transition: تبدیل‌ها و ایجاد تغییرات ظاهری پویا
1402/06/10 18:32

آموزش CSS Transform و Transition: تبدیل‌ها و ایجاد تغییرات ظاهری پویا

مطالعه بیشتر
معرفی Vue.js و ویژگی‌های کلیدی آن: فریمورک مدرن برای توسعه وب تعاملی
1402/06/28 00:33

معرفی Vue.js و ویژگی‌های کلیدی آن: فریمورک مدرن برای توسعه وب تعاملی

مطالعه بیشتر
آموزش استفاده از ماژول‌ها (Modules) در جاوا اسکریپت: آشنایی با ES6 Modules - راهنمای کامل
1403/08/05 20:24

آموزش استفاده از ماژول‌ها (Modules) در جاوا اسکریپت: آشنایی با ES6 Modules - راهنمای کامل

مطالعه بیشتر
آموزش mix-blend-mode و background-blend-mode در CSS: ترکیب رنگ‌ها و ایجاد افکت‌های جذاب
1403/08/12 20:18

آموزش mix-blend-mode و background-blend-mode در CSS: ترکیب رنگ‌ها و ایجاد افکت‌های جذاب

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد