?

Log in

No account? Create an account

Previous Entry | Next Entry

Учу сейчас новый (для меня) язык программирования. Потрясен до мозга костей.
Вот смотрите

Первый кусок кода
var x = (1.5 - 1) * 10;
Вычисляем. Значение х, как ему и положено по всем правилам арифметики равняется пяти.

Случайно ошибаемся - пишем вот так
var x = (1, 5 - 1) * 10;
Вычисляем. Что получается, как вы думаете? Ошибка вычисления? Те же самые 5? Хрен там. Получается СОРОК. И после ЭТОГО мне будут говорить, 1С -- язык с "грязным синтаксисом". Да 1С-ка по сравнению с этим чудом просто сверх-строгий язык.

Кстати, мои уважаемые френды, кто-нить в состоянии мне объяснить КАК здесь получается сорок? Будем считать это тестом на широту программистской эрудиции..

promo torin_kr december 5, 2015 19:43 26
Buy for 200 tokens
Этот пост -- заказной. Меня его попросила написать одна моя хорошая знакомая, с которой мы знакомы такое количество лет. что аж страшно становится. Как говорит в таких случаях мой младший брат -- "Да ну нафиг. Столько и не живут". Живут... к сожалению. Ладно, это было лирическое…

Comments

( 20 comments — Leave a comment )
kumehtar
Dec. 8th, 2015 01:13 pm (UTC)
(5-1)*10.
1, - не учитываются.
torin_kr
Dec. 8th, 2015 01:16 pm (UTC)
Почти так. Только не "не учитывается", а вычисляется последовательно и выбирается большее значение. То есть если бы было (7,5 -1)*10 то получилось бы 70, а не 40. Вот такой вот язык программирования...
kumehtar
Dec. 8th, 2015 01:21 pm (UTC)
жесть... не могу понято назначение этой функции. Чтобы мануалы курить дольше?
torin_kr
Dec. 8th, 2015 01:43 pm (UTC)
Работает это так -- максимальное из значений перечислений внутри скобок, причем одно значение от другого отделяется запятой. Т.е. (1,5-1) = max(1, 4) = 4, а (7,5-1) = max(7, 4) = 7. Затем это значение уже умножается на 10.
Потрясающий синтаксис языка...
alexdj
Dec. 9th, 2015 03:34 am (UTC)
Совершенно неверно.
torin_kr
Dec. 9th, 2015 03:59 am (UTC)
Что именно неверно? То, что получится 40? Так оно ПОЛУЧИЛОСЬ. Или ход моих рассуждений? Тогда объясни как верно. Но 40 -- получилось. Я в отладчике смотрел!!!
alexdj
Dec. 9th, 2015 04:07 am (UTC)
Я ниже расписал почему)
torin_kr
Dec. 9th, 2015 04:14 am (UTC)
Посмотрел, спасибо.
(Deleted comment)
torin_kr
Dec. 8th, 2015 01:17 pm (UTC)
нет, она вступает как знак ПЕРЕЧИСЛЕНИЯ
smenavech
Dec. 8th, 2015 02:09 pm (UTC)
Ну если это - перечисление, то , (1, 4) вполне может быть множеством чисел от одного до 4х, т.е. множеством с кардинальностью 4. Если в этом языке множество можно умножать на число и получать число, и операция определена через число элементов в множестве, то получится 40. Только зачем это кому-то может быть нужно ?
torin_kr
Dec. 8th, 2015 02:36 pm (UTC)
Вот на вопрос "Зачем" в мануале никакого ответа нет :)))
alex_dvorak
Dec. 8th, 2015 01:57 pm (UTC)
А что за язык-то?
Спрашиваю, чтобы ненароком не вляпаться случайно не начать осваивать
torin_kr
Dec. 8th, 2015 02:04 pm (UTC)
JS, естессно. AJAX осваиваю -- надо же будет там, на "проклятом Западе" на что-то жить. 1С-ка там боюсь совсем никакой популярностью не пользуется..
alex_dvorak
Dec. 9th, 2015 10:46 am (UTC)
Вы планируете "там" жить за счет кодинга?
Это не будет оверквалификацией?
AJAX видимо, осваивать придется даже мне (для самообеспечения, а не для продажи), хотя последнее что я кодил (было несколько лет назад) было еще на шестых дельфях...

А за 1С лучше помолчать.
Хотя... импортозамещение по полной программе (гы).
utyos
Dec. 9th, 2015 03:13 am (UTC)
Я не программист, но предположил бы из опыта работы с экселем, что в связи с заменой точки на запятую то, что перед запятой, становится "текстом".
alexdj
Dec. 9th, 2015 03:26 am (UTC)
Я аж подумал, что у меня уже лыжи не едут, аж проверил даже)

Читать матчасть про базовые операторы. Подробно можно на w3schools или на хабре, вот статья даже есть: http://habrahabr.ru/post/116827/

Если на пальцах: "," - это простейший оператор с наименьшим приоритетом (это английский язык, не русский - здесь "," и "." не имеют ничего общего).
(a, b, c) - перечисление, при условии, что мы задаем переменную в сингл формате (как Int в примере), а не объект как массив, то в результате мы имеем одно значение. Значение берется последним в последовательном ряду - (a, b, c) - вернет "c", а не "a" или "b".

Никакие функции max() тут не используются - это простейший оператор перечисления :)

И да, "(7,5 -1)*10" вернет те же 40, а никак не 70, ибо последнее значение в скобках по-прежнему 4.

Синтаксис безумно простой, логичный и лаконичный.
torin_kr
Dec. 9th, 2015 04:13 am (UTC)
Да, теперь понятно. Но мне он простым и логичным почему-то не кажется...
alexdj
Dec. 9th, 2015 07:39 am (UTC)
А что не просто и не логично-то?)
Принять, что запятая - это оператор, а не разделитель целой и дробной частей числа?) Так это так во всех языках (про православную 1С не знаю, да)
torin_kr
Dec. 9th, 2015 09:49 am (UTC)
Да при чем тут запятая? Непонятно, зачем при умножении перечисления выбирать именно ПОСЛЕДНИЙ элемент. Что это за магия такая?



То есть
(2, 3, 4)*10 = 40
(3, 7, 4)*10 = 40
а
(3, 4, 7)*10 = 70

И в чем тут великая логика? В том что перечисление равно своему последнему элементу при применении в качества операнда в арифметических операциях? Ну хорошо, пусть так. Но никакой логики я в этом не вижу. А если бы было равно первому элементу, а не последнему -- это было бы менее логично? Почему?

Edited at 2015-12-09 09:50 am (UTC)
alexdj
Dec. 9th, 2015 10:56 am (UTC)
Фух. Вот такая логика в программировании :)
Смотри, разложу по полочкам.

Ты задаешь переменную как некую функцию, состоящую из нескольких элементов (по сути, твоя функция:

var x = (1, 5 - 1) * 10;

выглядит как:

var x = a * b;

где a - также элементарная функция, даже не функция, а просто перечисление)
Если перевести совсем в математический вид, то у тебя будет примерно так:

var a = 1;
var a = 5 - 1;
var b = 10;

var x = a * b;

И именно в таком порядке. Тут же, я думаю, вполне логично будет, что a = 4? Override в действии.



Давай даже на другом примере объясню, на простейшем цикле:

for (int i = 0; i <= 10; i++){
var x = i;
}

ты же получишь в результате, что x = 10 и не будешь учитывать предыдущие значения в общей последовательности [0,1,...,9,10]?

Edited at 2015-12-09 01:34 pm (UTC)
( 20 comments — Leave a comment )

Latest Month

June 2019
S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      
Powered by LiveJournal.com
Designed by Akiko Kurono