اطلاعیه

Collapse
هیچ اطلاعیه ای هنوز ایجاد نشده است .

دوره آموزش swift - درس ۱۰: ساخت اپلیکیشن ماشین حساب - بخش دوم

Collapse
X
 
  • فیلتر
  • زمان
  • نمایش
پاک کردن همه
new posts

  • دوره آموزش swift - درس ۱۰: ساخت اپلیکیشن ماشین حساب - بخش دوم

    با سلام و عرض ادب

    به بخش دوم اپلیکیشن ماشین حساب می رسیم. منطق پشت اپلیکیشن ماشین حساب در نگاه اول بسیار ساده به نظر میاد اما اگر کمی دقت کنید متوجه پیچیدگی هایی خواهید شد. بنابراین پیشنهاد می کنم که قبل از شروع کد نویسی, بر روی یک کاغذ نقشه راه یک ماشین حساب رو ترسیم کنید که یک ماشین حساب دقیقا چطور کار می کند. ( بدون ترسیم واقعا گیج خواهید شد )‌

    برای قدم اول, اجازه دهید که بخش های معادله را نام گذاری کنیم


    براساس تصویر ارائه شده, اولین عدد وارد شده در ماشین حساب را leftSide می نامیم و بعد از زدن اولین operator, عدد بعدی را rightSide می نامیم و جواب هم Result می نامیم

    پس پیش از هر چیز سه متغیر را معرفی می کنیم

    کد:
     
    var leftSide = "" var rightSide = "" var result = ""
    براساس منطق یک ماشین حساب. وقتی برای اولین بار عددی می زنیم, عددی که leftside نامیدیم نخست در صفحه نمایش رویت می شود. عددی که روی صفحه نمایش ظاهر می شود را RunningNumber می نامیم

    کد:
    var RunningNumber = ""
    بنابراین نخست leftside در صفحه نمایش ظاهر می شود, سپس یک operator را انتخاب می کنیم ( + , - , * , / ) و سپس عدد دوم که rightside نام دارد را وارد می کنیم. پس از کلیک بر روی operator, عدد leftside می بایست در حافظه نگه داری شود و جای خودش را به rightside بدهد ( این پروسه برای اولین کلیک بر روی operator ها رخ می دهد )‌
    پس از وارد کردن leftside و rightside, اگر بر روی مساوی کلیک کنیم خوب باید با جواب روبرو شویم که همان result است
    اما اگر پس از وارد leftside و rightside دوباره بر روی یک operator دیگر کلیک کنیم در صفحه نمایش result نمایش داده می شود اما این جواب در واقع خودش leftSide است و عدد بعدی که وارد می شود rightSide است.
    کمی پیچیده شد بنابراین دوباره با یک تصویر سعی می کنیم کمی روشن ترش کنیم


    خوب امیدوارم که به قدر کافی روشن بوده باشد

    در ادامه operator ها را در Enumerations معرفی می کنیم. در برنامه نویسی از Enumerations, برای معرفی یک گروه با عضو های هم نوع استفاده می کنیم.

    بنابراین بخش زیر به کد ها اضافه می شود, به این نکته توجه داشته باشید که علایم درون " ", اصلا مهم نیست که چی هستند

    کد:
    enum Operators: String{ case add = "+" case subtract = "-" case divide = "/" case Multiply = "*" case equal = "=" case empty = "Empty" }
    در ادامه هم, یک متغیر می بایست معرفی کنیم که نشان دهنده وضعیت operator ها باشد, بدین صورت که در واقع اپراتور ها را در حافظه در حین عملیات نگه دارد.

    کد:
    var currentOperator: Operators = Operators.empty
    در ادامه, بخش اعداد صفحه نمایش را به نام screen به صورت IBoutlet معرفی می کنیم

    کد:
    @IBOutlet weak var screen: UILabel!
    اما برای معرفی اعداد, روش جدیدی را در پیش می گیریم. در xcode بخشی به نام tag وجود دارد که در اسلاید بار utlities قابل وارد کردن است. بر روی تمامی کلید های 0 تا 9 کلیک می کنیم و در بخش tag عددی مشابه با کلید ها وارد می کنیم. یعنی برای صفر عدد 0 را در tag وارد می کنیم و تا 9 ادامه می دهیم



    و در ادامه خود یک IBAction می نویسیم با نام numberPressed . سپس تمامی کلید ها را نگه داشتن کلید control دراگ کنید به view controller و سپس numberPressed را از لیست انتخاب می کنیم


    سپس درون گیومه, کد های زیر را وارد می کنیم. در این بخش می گوییم که پس از کلیک بر روی هر عددی, runningNumber به اعداد وارد شده تغییر کند و در واقع عدد وارد شده به آن اضافه شود
    سپس می گوییم که runningNumber را در صفحه نمایش نشان دهد.

    کد:
    @IBAction func numberPressed(btn: UIButton!) { RunningNumber += "\(btn.tag)" screen.text = RunningNumber }
    سپس تمام اپراتور ها را نیز به صورت IBAction معرفی می کنیم اما فعلا درون گیومه آنان خالی می گذاریم

    حال به بخشی اصلی داستان می رسیم و می خواهییم بگوییم که اگر بر روی یک اپراتور کلیک کنیم چه می بایست پیش آید

    یک function با نام processOperators ایجاد می کنیم و می گوییم که وابسته به Operations هست که به صورت Enumerations پیش تر معرفی کردیم. در این حالت از آخر به اول می رویم و نخست حالتی را بررسی می کنیم که برای بار دوم روی یک اپراتور کلیک می کنیم. یعنی اپراتور مورد نظر نمی بایست خالی باشد و باید چیزی در حافظه داشته باشد


    با یک if کار را شروع می کنیم و می گوییم که currentOperator باید نا مساوی با Operators.empty باشد و درون آن نیز یک if دیگر قرار می دهیم که runningNumber نیز نباید خالی باشد

    اگر این دو شرط رعایت شود براساس تصاویری که در اول کاری منتشر کردیم پس از زدن دومین بار یک اپراتور rightSide می بایست در صفحه نمایش باشد که در واقع:

    کد:
    rightSide = RunningNumber RunningNumber = ""
    سپس اپراتور ها نیز تعریف می کنیم

    کد:
    if currentOperator == Operators.add { result = "\(Double(leftSide)! + Double(rightSide)!)" } else if currentOperator == Operators.subtract { result = "\(Double(leftSide)! - Double(rightSide)!)" } else if currentOperator == Operators.divide { result = "\(Double(leftSide)! / Double(rightSide)!)" } else if currentOperator == Operators.Multiply { result = "\(Double(leftSide)! * Double(rightSide)!)" }
    در ادامه تابع processOperators نیز مشخص می کنیم که leftSide برابر با result است و در result نیز در صفحه نمایش قرار بگیرد. سپس در ریشه این function نیز می گوییم که اپراتور فعلی در حافظه نگه داری شود با کد :

    کد:
    currentOperator = op
    اگر یادتان باشد که با یک اگر تابع processOperators شروع کردیم که اگر اپراتور خالی نباشد دستور های گفته شده را اجرا کند, حال نوشتن else در ادامه آن می گوییم که حال اگر خالی باشد چه کار کن. این بخش بدین معنی است که برای نخستین بار بر روی یک اپراتور کلیک می کنیم و در واقع در شروع کار با ماشین حساب هستیم

    در این حالت leftSide برابر با runningNumber است .

    اگر تا اینجا توضیحات را متوجه شده باشید با دیدن شکل شمایل کلی کد با کلیت کارمان آشنا می شوید. در بخش آینده اپلیکیشن ماشین حساب, کمی اپلیکیشن را کامل تر و بهتر می کنیم. اما تا همین جای کار هم, توانسته اید یک اپلیکیشن کاربردی بسازید


    کد:
    import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } var leftSide = "" var rightSide = "" var result = "" var RunningNumber = "" var currentOperator: Operators = Operators.empty enum Operators: String{ case add = "+" case subtract = "-" case divide = "/" case Multiply = "*" case equal = "=" case empty = "Empty" } @IBOutlet weak var screen: UILabel! @IBAction func numberPressed(btn: UIButton!) { RunningNumber += "\(btn.tag)" screen.text = RunningNumber } @IBAction func onDividePressed(sender: AnyObject) { processOperators(Operators.divide) } @IBAction func onMultiplyPressed(sender: AnyObject) { processOperators(Operators.Multiply) } @IBAction func onSubtractPressed(sender: AnyObject) { processOperators(Operators.subtract) } @IBAction func onAddPressed(sender: AnyObject) { processOperators(Operators.add) } @IBAction func onEqualPressed(sender: AnyObject) { processOperators(currentOperator) } func processOperators(op: Operators){ if currentOperator != Operators.empty { if RunningNumber != "" { rightSide = RunningNumber RunningNumber = "" if currentOperator == Operators.add { result = "\(Double(leftSide)! + Double(rightSide)!)" } else if currentOperator == Operators.subtract { result = "\(Double(leftSide)! - Double(rightSide)!)" } else if currentOperator == Operators.divide { result = "\(Double(leftSide)! / Double(rightSide)!)" } else if currentOperator == Operators.Multiply { result = "\(Double(leftSide)! * Double(rightSide)!)" } leftSide = result screen.text = result } } else { leftSide = RunningNumber RunningNumber = "" currentOperator = op } } }
    i-phone.ir
    The Best or Nothing



    Twitter : Rouzbeh7000
صبر کنید ..
X