Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Написать крутую формулу с If else. С меня печеньки! (https://javascript.ru/forum/misc/58460-napisat-krutuyu-formulu-s-if-else-s-menya-pechenki.html)

Maikl_Rock 23.09.2015 10:56

Написать крутую формулу с If else. С меня печеньки!
 
Прежде всего, отмечу, что я не знаю толком язык Java, но движок моего сайта на Bitrix, а в нем, для математических вычислений используется Java.
Я уже использовал math.pow и еще что-то, но всё это для простетских формул =)
Хочу написать серьезную формулу, но не знаю, как точно это сделать. Поэтому прошу помощи у вас!
Знатоки, внимание вопрос!
Мне нужно написать формулу с использованием IF и вроде бы Else
Суть такова:

Если (х*у/10000) меньше чем 0.1, ТО (х*у/10000) равно 0.1*(a*b)
Если (х*у/10000) больше 0.1 то тогда (х*у/10000)*(a*b)

Всё нужно прописать в одну строчку, ибо больше строчек нет. Я в неведении, как это сделать :(

Lemme 23.09.2015 11:28

Цитата:

что я не знаю толком язык Java
я тоже.
Цитата:

математических вычислений используется Java.
круто!


Могу вас разочаровать, данный проект посвящен JavaScript, не Java.

Цитата:

Я в неведении, как это сделать
Через 10 минут чтения, мой кот написал скрипт, пока я делал кофе.
Вы, думаю, за 5 справитесь.

http://learn.javascript.ru/ifelse

Maikl_Rock 23.09.2015 11:36

А теперь представьте ситуацию, что вы заходите в магазин какой-нибудь специализированной техники и пытаетесь узнать то, что не знаете совершенно. А продавец, пользуясь своим преимуществом, отвечает на ваши вопросы саркастически и язвительно. Не приятная ситуация..

Если вы знаете в какой то области больше чем другие, это не значит, что вы можете вести себя как мудак, господин Lemme

Lemme 23.09.2015 11:53

Цитата:

А продавец, пользуясь своим преимуществом, отвечает на ваши вопросы саркастически и язвительно
Вы почему-то сравниваете меня с продавцом, хотя я такой же "зашедший в магазин", как и вы. Различие лишь в том, что я знаю больше.

А за время написания этого поста, вы могли бы посетить ссылку, которую я вам скинул и написать это:

var result = 0;

if (х*у/10000 < 0.1) {
     result = 0.1*(a*b);
}
else {
     result = (x*y/10000) * (a*b);
}


А если бы почитали еще минут 5, то написали бы это:

var result = х*у/10000 < 0.1 ? 0.1*(a*b) : (x*y/10000) * (a*b);

laimas 23.09.2015 13:15

Lemme,
дважды вычислять одно и тоже не стоит.

var result = (с = х*у/10000) < 0.1 ? 0.1 * a * b : с * a * b;

Lemme 23.09.2015 13:37

laimas, не знал о таком=) Спасибо.

devote 23.09.2015 13:43

Цитата:

Сообщение от laimas (Сообщение 389566)
Lemme,
дважды вычислять одно и тоже не стоит.

var result = (с = х*у/10000) < 0.1 ? 0.1 * a * b : с * a * b;

Так писать тоже не стоит, во первых код плохо читаем. Во вторых переменная c у вас не объявлена и будет создана в глобальном пространстве. В третьих зачем вы убрали скобки приоритета? В четвертых почему по вашему не стоит вычислять одно и тоже дважды? В данном случае это никак не повлияет на производительность, да и читаемость никуда не исчезнет.
var с = х * у / 10000;
var result = с < 0.1 ? 0.1 * (a * b) : с * (a * b);

sortarray 23.09.2015 13:50

Цитата:

Сообщение от devote
Во вторых переменная c у вас не объявлена и будет создана в глобальном пространстве

Она в любом случае будет там создана.
Цитата:

Сообщение от devote
В данном случае это никак не повлияет на производительность

никак -- это неверное слово. Незначительно.

caetus 23.09.2015 13:58

function f(x, y, a, b){
 return (x * y / 10000 < 0.1 && 0.1 * (a * b)) || (x*y/10000) * (a*b);
}

laimas 23.09.2015 14:21

Цитата:

Сообщение от devote
Так писать тоже не стоит, во первых код плохо читаем.

Что в нем трудно читаемого?

Цитата:

Сообщение от devote
Во вторых переменная c у вас не объявлена и будет создана в глобальном пространстве.

И что?

Цитата:

Сообщение от devote
В третьих зачем вы убрали скобки приоритета?

Хотите сказать что 2 * 3 * 4 и 2 * (3 * 4) дадут разный результат?

Цитата:

Сообщение от devote
В четвертых почему по вашему не стоит вычислять одно и тоже дважды? В данном случае это никак не повлияет на производительность, да и читаемость никуда не исчезнет.

А зачем?

PS. Если вас лично беспокоит глобальность, ну так кто мешает
var c, result = (с = х*у/10000) < 0.1 ? 0.1 * a * b : с * a * b;

devote 23.09.2015 14:43

Цитата:

Сообщение от laimas
Что в нем трудно читаемого?

одну строчку не сложно читать, но если таких будет десять то уже тяжело. И плюс это плохой тон делать присвоение внутри строки кода.

Цитата:

Сообщение от laimas
Хотите сказать что 2 * 3 * 4 и 2 * (3 * 4) дадут разный результат?

Похоже вы плохо знаете JavaScript раз считаете что разницы не будет. Откройте консоль браузера и введите например:
1.3 * 1.2 * 1.4 // 2.1839999999999997
и
1.3 * (1.2 * 1.4) // 2.184
и посмотрите разницу. Я понимаю что по принципам математики это одно и тоже, но не для JavaScript

Цитата:

Сообщение от laimas
А зачем?

Это не ответ на вопрос.

Цитата:

Сообщение от laimas
И что?

А вот после этого ответа, мне уже ничего не хочется вам отвечать. Странный вы человек, ваша логика для меня не понятна. Если в вашей программе будут утечки памяти, вы точно так же ответите фразой "И что?". А то что объявление переменной это важная часть разработки, так как если этого не делать можно получить кучу гейзенбагов.

sortarray 23.09.2015 14:56

Цитата:

Сообщение от laimas
вас лично беспокоит

тонко подмечено:)

Erolast 23.09.2015 15:09

Цитата:

Если вас лично беспокоит глобальность
Не только его лично. Даже если абстрагироваться от того, что это - неочевидное говно, вызывающее утечки памяти, в строгом режиме ES5 неявное присвоение в глобал запрещено и вызывает ReferenceError.

sortarray 23.09.2015 15:15

Цитата:

Сообщение от Erolast
вызывающее утечки памяти

Какой же ты бред несешь, стыдно за тебя даже.

laimas 23.09.2015 15:19

Цитата:

Сообщение от devote
одну строчку не сложно читать, но если таких будет десять то уже тяжело.

Цитата:

Сообщение от devote
Это не ответ на вопрос.

Ну если вам это сложно для чтения, ну так пишите как хотите, лично я прекрасно понимаю о чем речь. Более того, никогда не стану писать до условия кучу последовательных выражений, если их можно сразу описать в условии, тем более что более это и не будет использоваться.

Цитата:

Сообщение от devote
Я понимаю что по принципам математики это одно и тоже, но не для JavaScript

Оно и для JavaScript одно и тоже, а то что в ней так получается, так в этом не вина математики и приоритетов, да и подобные проблемы не только в JS. Нужна большая точность десятичных значений, расставляйте приоритеты. Я в условии этого не увидел.

Цитата:

Сообщение от devote
А вот после этого ответа, мне уже ничего не хочется вам отвечать. Странный вы человек, ваша логика для меня не понятна. Если в вашей программе будут утечки памяти, вы точно так же ответите фразой "И что?".

Я вообще не любитель спорить там, где нет причины. И все просто - если я пишу код, то пишу его я, не поручая ни бабушке с дедушкой, ни другу, ни врагу. А коли его пишу я, то я и контролирую свои переменные, отдаю себе отчет что делаю, не надо чертями пугать. ;)

laimas 23.09.2015 15:33

Цитата:

Сообщение от Erolast
Не только его лично. Даже если абстрагироваться от того

Только не надо слишком абстрагироваться :D

Меня это нисколько не беспокоит, ибо я пишу так - требуется в блоке N переменных, значит я их заранее объявлю, не объявляя и потом по ходу var, var, var... Вот и все, без всякой абстракции. А если автор темы этого не знает, ну так ему пусть ваша абстракция и будет в назидание. )

devote 23.09.2015 15:33

Цитата:

Сообщение от laimas
лично я прекрасно понимаю о чем речь

Дык вы на форуме пишете ответы на вопросы для себя?
Цитата:

Сообщение от laimas
если я пишу код, то пишу его я

Если вы пишете для себя, то нет проблем. Но если вы советуете и пишете его для кого-то, то это совершенно разные вещи. Написав свой корявый код в данном топике вы демонстрируете его всему интернет сообществу, понятно дело что опытные программисты увидят в вашем коде корявости. Но новички будут думать что ваш корявый код это то, что так и должно быть. А потом при устройстве на работу, задают вопросы почему их никуда не берут. Да потому что говнокодеров никто не любит. Если вам нравится говнокодить, вам никто не запрещает этого делать, только другим не нужно это советовать. А если уж хотите показать свои умения, тогда и примеры приводите не те что для вас проще в написании. А те что для новичков проще понимаемые. И те что не создают потенциальных ошибок.

laimas 23.09.2015 15:36

Цитата:

Сообщение от devote
Дык вы на форуме пишете ответы на вопросы для себя?

Ну а почему вы считаете всех равными себе? Ну вам не понятно, другому понятно. И вообще, это просто пустой базар не имеющий под собой никакой почвы. )

devote 23.09.2015 15:39

Цитата:

Сообщение от laimas
Ну а почему вы считаете всех равными себе?

это как раз таки вы так считаете, говорите что "Лично Вы все прекрасно понимаете". Если вы понимаете, это не значит что понимают другие.

Erolast 23.09.2015 15:44

Цитата:

Меня это нисколько не беспокоит, ибо я пишу так - требуется в блоке N переменных, значит я их заранее объявлю, не объявляя и потом по ходу var, var, var... Вот и все, без всякой абстракции. А если автор темы этого не знает, ну так ему пусть ваша абстракция и будет в назидание. )
Си-подход? Переменная уже была объявлена? Окей, но из того отрывка это ни хрена не понятно было.

laimas 23.09.2015 16:14

Цитата:

Сообщение от devote
это как раз таки вы так считаете, говорите что "Лично Вы все прекрасно понимаете".

Ну достали профессора-теоретики. :D Хорошо, отвечу по полной и по пунктам.

1) Я могу привести не один пример когда в постах (назовем их условно по вашему "новичков") дают безупречное решение - и с var все в порядке, и решение оригинальное. Но код решения для новичков вряд ли понятен, они его просто копируют и дело с концом. И я говорю о сложности куда более для них непонятной чем:

a = (b = 12) > m ... ,

где все просто, и присвоение, и приоритет в скобках почему, и условие результата в приоритете описанного... Ну что смеяться то? Что тут архисложно то?

2) Кроме сложного кода предлагаемого решения, часто дают решения на то, что изначально уже не верно - представление задачи. Я о том, что изначально не верное представление задачи автором, и как следствие неудачное представление данных ее, куда гораздо страшнее, чем на начальном этапе где-то сделать ошибку по не знанию языка. Второе исправить легко и оно исправится рано или поздно если учить язык. А вот первое, это не всегда - не думать, а взять то, что предложено и использовать, сперва это привычка, а потом правило. А думалка для чего?

Я не думаю, что a = (b = 12) > m для тех кто привык задумываться, это будет сложно для понимания.

3) И часто пишут так, не верите, а проверьте:

var a = n
if(a) ...

и все, более нигде эта переменная не используется. И более того такое и предлагают в решениях. А спрашивается зачем? Если открыть учебник хороший, в нем будет упоминание того, что так делать не надо, это никчемная операция.

Самое плохое в том, что даже после того как об этом будет сказано авторе поста, не все "исправляются", что это, уже привычка?

4) Я могу тоже полистать темы форума и привести разные подобные излишества, хотя они безупречны в контексте языка. Но они вредны для думалки. А я не Дон Кихот, бороться с этим не намерен - тот кто привык думать, и хочет научится, тот поймет, что-то даже и исправит если что, тот кто привык просто копировать готовое, так это его проблемы.

Вот и вся моя философия. )

laimas 23.09.2015 16:18

Цитата:

Сообщение от Erolast
Си-подход?

Да. В JS тут ясна картина, но в РНР, который своей простотой расхолаживает до лени, вольности с переменными могут привести к гораздо более плачевному.

alex.vv 23.09.2015 19:00

Топикстартер - гений троллинга.


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