Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Пример простого калькулятора (https://javascript.ru/forum/misc/65522-primer-prostogo-kalkulyatora.html)

vlad35 23.10.2016 20:48

Пример простого калькулятора
 
Доброго времени суток, уважаемые форумчане. Я совсем недавно взялся за JavaScript, поэтому у меня масса, может нелепых вопросов. Я нашел пример простого калькулятора здесь: http://www.on-line-teaching.com/js/js.math.sample.htm или в песочнице http://https://jsfiddle.net/vlad35/1unqeec3/ . У меня такой вопрос. В скрипте постоянно используется переменная, принимающая то истинное, то ложное значение FlagNewNum. Мне не понятно для чего и зачем она нужна. Если есть какие-то мысли, помогите. Заранее спасибо.

Bond 24.10.2016 03:13

Название переменной само за себя говорит - флаг нового числа
Эта переменная становится true когда нажато + - = / * и тд.
То есть если FlagNewNum == true то поле калькулятора очищается и подставляется новая цифра в зависимости о того какая кнопка нажата, если же FlagNewNum == false то до существующего числа добавляется новая цифра путем конкатенации.

vlad35 24.10.2016 09:57

Bond, спасибо Вам огромное!

vlad35 25.10.2016 13:25

Уважаемый, Bond! Если Вам не сложно, помогите мне пожалуйста еще раз. В том же калькуляторе в скрипте есть эта функция:
function Operation (Op)
{
var Readout = Fcalc.ReadOut.value;
if (FlagNewNum && PendingOp != "=")
{
Fcalc.ReadOut.value = Currents;
}
else
{
FlagNewNum = true;
if ( '+' == PendingOp )
Currents += parseFloat(Readout);

else if ( '-' == PendingOp )
Currents -= parseFloat(Readout);
else if ( '/' == PendingOp )
Currents /= parseFloat(Readout);
else if ( '*' == PendingOp )
Currents *= parseFloat(Readout);
else
Currents = parseFloat(Readout);
Fcalc.ReadOut.value = Currents;
PendingOp = Op;
}
}
Вот над ней сижу уже два дня никак понять не могу. Не могли бы Вы ее расшифровать? Заранее спасибо! Не понятны переменные Currents и PendingOp?

Bond 25.10.2016 15:31

Функция Operation(op) срабатывает когда нажимается кнопка + - * / =
По сути здесь вся главная магия и происходит
В комменте так и написано
// обработчик нажатия
// кнопки действия
Функция принимает один параметр - значение кнопки что бы знать какая кнопка была нажата, собственно это и есть переменная PendingOp и она принимает новое значение после нажатия кнопок действия в этой строке
PendingOp = Op;

и по ней же проверяется какое действие производить над переменной currents.

Переменная Currents - это промежуточный результат вычисления и он выводится в поле только тогда когда нажата кнопка "=" и флаг нового числа == false (то есть когда пользователь нажал к примеру 3+3 и =) эти строки
Fcalc.ReadOut.value = Currents; //Здесь выводится в поле промежуточный результат вычисления


или же когда нажато не "=" и флаг нового числа == true ( то есть когда пользоваель нажал 3+3 и еще раз "+" или другое кроме =); в этих строках
if (FlagNewNum && PendingOp != "=")
		{
			Fcalc.ReadOut.value = Currents;
		}


Если же нажата одна из кнопок + - * / = то вычисляется новое значение currents. здесь

if ( '+' == PendingOp ) // Если ранее был нажат плюс
				Currents += parseFloat(Readout); // то к текущему промежуточному значению добавляем значение поля 
			else if ( '-' == PendingOp )
				Currents -= parseFloat(Readout); //  А здесь минусуем и т.д
			else if ( '/' == PendingOp )
				Currents /= parseFloat(Readout);
			else if ( '*' == PendingOp )
				Currents *= parseFloat(Readout);
                        else
				Currents = parseFloat(Readout);
			Fcalc.ReadOut.value = Currents; //Здесь выводится в поле промежуточный результат вычисления
			PendingOp = Op;

Не знаю доступно ли объяснил ))

vlad35 25.10.2016 18:24

Да, все понятно, спасибо Вам огромное!!!


Часовой пояс GMT +3, время: 15:24.