Имя: Пароль:
LIFE
Юмор
OFF: Пошел программист за покупками
0 Ненавижу 1С
 
гуру
12.08.11
09:43
1. 11 33% (22)
2. 1 27% (18)
3. 10 27% (18)
4. -1 9% (6)
5. 3% (2)
Всего мнений: 66

Жена посылает мужа-программиста в магазин. Даёт ценные указания:
-Купи палку колбасы. Если будут яйца, купи десяток.
Приходит счастливый муж, протягивает десять палок колбасы.
Жена:-???
Муж:
-Яйца были!

Сколько колбасы должен был купить программист?
1 Квиджибо
 
12.08.11
09:43
над этим я смеялся еще в школе...
2 Stepa86
 
12.08.11
09:44
Это не программист, а быдлокодер какой то

1
3 butterbean
 
12.08.11
09:44
(1) ты не в теме :-)

10
4 Sakura
 
12.08.11
09:44
ну гармонь же, и та рваная.

1
5 Ненавижу 1С
 
гуру
12.08.11
09:44
я за

11
6 Sakura
 
12.08.11
09:45
+ (4) 1 - точки зрения бытовой логики.
если с кодерской, то да, 10.
7 Ненавижу 1С
 
гуру
12.08.11
09:45
(4) начало тут Пятница
8 Дарт Вейдер
 
12.08.11
09:45
Если следовать ТЗ, то

Перем Колбаса;
...
КупитьОдну(Колбаса);
Если Будут_Яйца = Истина тогда
   КупитьДесять(Колбаса);
КонецЕсли;

11
9 Defender aka LINN
 
12.08.11
09:45
Ибо.

10
10 Ненавижу 1С
 
гуру
12.08.11
09:45
продублирую свое мнение тут:

Перем КупитьЧтото;
...
КупитьЧтото = Колбаса;
Купить(КупитьЧтото);
Если Будут_Яйца тогда
 Для й=1 по 10 Цикл
   Купить(КупитьЧтото); //переменная все еще равна Колбаса!
 КонецЦикла;
КонецЕсли;
11 Дикообразко
 
12.08.11
09:45
(0)
КолВоКолбаса = 10 - 9*Число(ЕстьЯйца);
12 1Сергей
 
12.08.11
09:46
Я семерошник.

Покупки = СоздатьОбъект("ТаблицаЗначений");
Покупки.НоваяКолонка("Товар");
Покупки.НоваяКолонка("Количество");

Рег = СоздатьОбъект("Регистр.ТоварыВНаличии");

СпрТовары = СоздатьОбъект("Справочник.Товары");
СпрТовары.НайтиПоНаименованию("Колбаса");
Колбаса = СпрТовары.ТекущийЭлемент();
СпрТовары.НайтиПоНаименованию("Яйца");
Яйца = СпрТовары.ТекущийЭлемент();

Покупки.НоваяСтрока();
Покупки.Товар = Колбаса;
Покупки.Количество = 1;

Если Рег.СводныйОстаток(Яйца,"Количество")>0 Тогда
   Покупки.Количество = 10;
КонецЕсли;
13 Wobland
 
12.08.11
09:46
повторюсь
Колбаса=0; //ну кончилась в доме
КупитьКолбасы(палка); //очевидно, имелась в виду одна; колбаса=колбаса+1; колбаса теперь равна 1
Если БудутЯйца() Тогда
 КупитьДесяток(); //пойми этих женщин, несколько червонцев или палок; колбаса=колбаса+10; колбаса уже 11
КонецЕсли;
Вывод;

11
14 MetaDon
 
12.08.11
09:46
(8) без = Истина

-1
15 Defender aka LINN
 
12.08.11
09:46
(8) Это если индусским кодом :Р

Колбаса.Количество = 1;
Если ЕстьЯйца Тогда
   Колбаса.Количество = 10;
КонецЕсли;

Колбаса.Купить();
16 wade25
 
12.08.11
09:46
(0) 10 ибо яйца были =)

10
17 aleks-id
 
12.08.11
09:47
вариантов собсно 2

КоличествоКолбасы = Купить(1);
Если БудутЯйца Тогда
КоличествоКолбасы = Купить(10)
КонецЕсли;


КоличествоКолбасы = Купить(1);
Если БудутЯйца Тогда
КоличествоКолбасы =КоличествоКолбасы + Купить(10)
КонецЕсли;
18 Дикообразко
 
12.08.11
09:47
(15) см (11)
19 Sakura
 
12.08.11
09:47
(7) я пятничные давно не читаю.
20 Sedoy
 
12.08.11
09:47
(0) Это не программист, а быдлокодер..
21 butterbean
 
12.08.11
09:48
СколькоНадоКупить= 1;
Если ЕстьЯйца Тогда
  СколькоНадоКупить= 10;
КонецЕсли;
Купить(СколькоНадоКупить);
22 miki
 
12.08.11
09:50
изначально в ТЗ от жены было "<...>, а если будут яйца<...>"

10
23 Ненавижу 1С
 
гуру
12.08.11
09:51
а почему не отображается пункт 4? в итогах голосовалки?
24 Дикообразко
 
12.08.11
09:51
тест

25 Stepa86
 
12.08.11
09:52
(23) Не ЗначениеЗаполнено() потому что
26 Ненавижу 1С
 
гуру
12.08.11
09:52
(24) видимо ноль у Волшебника с 7.7 осталось пустым значением ))
27 Масянька
 
12.08.11
09:52
Адназначно.
Купи палку колбасы (Колбаса=1)
Если (будут яца) Тогда
 Купи Десяток (10+1 =11)
КонецЕсли;

PS А яйца были....

11
28 Ненавижу 1С
 
гуру
12.08.11
09:52
(25) надо было написать "неопределено" ))
29 butterbean
 
12.08.11
09:53
(28) а как же null??
30 Aleksey
 
12.08.11
09:53
(6) Ловко ты Ненавижу 1С не программистом обозвала
31 Ненавижу 1С
 
гуру
12.08.11
09:53
(29) это святое
32 Ненавижу 1С
 
гуру
12.08.11
09:53
(30) она женщина, ей прощается
33 Масянька
 
12.08.11
09:53
А почему Волшебник не проголосовал?
34 SeraFim
 
12.08.11
09:54
будет

11
35 Сергей Д
 
12.08.11
09:54
Процедура КупитьКолбасу(Количество)
...
КонецПроцедуры;

КупитьКолбасу(1);
Если Будут_Яйца тогда
   КупитьКолбасу(10);
КонецЕсли;

11
36 Сергей Д
 
12.08.11
09:54
(29) А еще Неопределено есть...
37 Stepa86
 
12.08.11
09:54
(31) HolyNull ???
38 dmpl
 
12.08.11
10:02
Для исполнения операции недостаточно данных:
1) не указано, где должны быть яйца и когда
2) неопределенность с "десяток": непонятно, числительное это или существительное, а если числительное - то не указано чего именно купить.

-1
39 Alexandr Puzakov
 
12.08.11
10:02
Неправильный программист. Правильный будет считать так:
0 палка колбасы;
1 палка колбасы;
...
10 палка колбасы.

11
40 dimaldinho
 
12.08.11
10:04
(0) В русском языке такая синтаксическая конструкция может приводить к результатам 1, 10, 11. Без домысливания в известных мне ЯП такая синтаксическая конструкция некорректна.
41 1Сергей
 
12.08.11
10:05
(40) что такое ЯП?
42 dimaldinho
 
12.08.11
10:05
языки программирования
43 Grusswelle
 
12.08.11
10:07
.

11
44 Alexandr Puzakov
 
12.08.11
10:08
(41) :) а мне вот более интересно, что такое "синтаксическая конструкция в русском языке"
45 1Сергей
 
12.08.11
10:10
да, блин, он пива не все взял
46 Я не курил
 
12.08.11
10:11
Купи палку колбасы. (А) Если будут яйца, купи десяток

10
47 Я не курил
 
12.08.11
10:11
Купи палку колбасы. Если будут яйца, купи (ещё) десяток

11
48 Я не курил
 
12.08.11
10:11
Купи палку колбасы. Если будут яйца, купи десяток (яиц)

1
49 PR
 
12.08.11
10:11
"Купи палку колбасы." и "Если будут яйца, купи десяток." - это разные процедуры и соответственно контекст у них разный, потому одну палку.
А программист из примера быдлокодер, согласен с (2).
Кроме того, совсем дурной какой-то. Если уж совсем по-тупому по инструкции действовать, то нужно было сначала палку купить, а потом уж дальше смотреть инструкцию.
Вагоны разгружать такого короче :))

1
50 Ворон
 
12.08.11
10:13
:)

11
51 Alexandr Puzakov
 
12.08.11
10:14
(47) не-а.

Купи палку колбасы. Если будут яйца, [то] купи десяток [палок колбасы].
52 ptiz
 
12.08.11
10:15
"десяток яиц" - устойчивое выражение, поэтому услышав "десяток" можно понять, что речь про яйца.

1
53 dmpl
 
12.08.11
10:18
(45) Необходимость покупки пива добавляется при создании класса "Поход в магазин" и реализована как закрытый член класса ;)

(51) Последний использованный объект - яйца, поэтому "десяток" должен относится к ним при трактовке "десяток" как числительное.
54 Сергей Д
 
12.08.11
10:18
(52) Есть понят ие "по умолчанию". Если "десяток" по умолчанию - это "десяток яиц", то яйца. а если по умолчанию берется предыдущее значение, то это "десяток палок колбасы". :)
55 1Сергей
 
12.08.11
10:18
Надо предложить этот вопрос одинесовцам - включить в экзамен на профа
56 Wobland
 
12.08.11
10:18
(52) а можно и не понять. ключевое слово "жена"
57 Жан Пердежон
 
12.08.11
10:18
(0) и где ты такие баяны откапываешь?
58 Сергей Д
 
12.08.11
10:19
(53) Но последний КУПЛЕННЫЙ объект - колбаса.
59 Сергей Д
 
12.08.11
10:19
(56) Да куда ж тебе 10 жен. :)
60 dmpl
 
12.08.11
10:20
(58) И что? А если у нас SMP система, где 2 покупки могут произойти одновременно?
61 Alexandr Puzakov
 
12.08.11
10:20
(53) так в том-то и дело, что программист яйца использовал не как объект, а как флаг ;)
62 zGainer
 
12.08.11
10:21
Если ЕстьЯйца = Истина Тогда
КупитьКолбасу(10)
Иначе
КупитьКолбасу(1)
КонецЕсли

10
63 dmpl
 
12.08.11
10:21
(61) В EAX он их загрузил - они там и остались ;) И передались в процедуру покупки ;)
64 Ненавижу 1С
 
гуру
12.08.11
10:21
да задолбали вы писать в стиле
"Если ЕстьЯйца = Истина Тогда "
65 Steel_Wheel
 
12.08.11
10:22
Если следовать ТЗ, то

Перем Продукт;

Продукт= "Колбаса";
ПоложитьВКорзину(Продукт);

Продукт= "Яйца";
Если ЕстьВНаличии(Продукт) Тогда
# IF ЯЙЦА_РАЗУПАКОВАНЫ
Для сч = 1 По 10 Цикл
ПоложитьВКорзину(Продукт);

КонецЦикла;

# ELSE
ПоложитьВКорзину(Продукт);
#ENDIF

1
66 forforumandspam
 
12.08.11
10:23
Программист неправильный - при неоднозначности ТЗ надо было уточнять.
67 Сергей Д
 
12.08.11
10:23
(64) Отрывать яйца за "Если ЕстьЯйца = Истина Тогда"
68 dmpl
 
12.08.11
10:24
(64) Ага, а то яйца в истину превратятся ;)
69 Сергей Д
 
12.08.11
10:25
(66) И составлять новое ТЗ. А лчше сразу требовать список:
Номенклатура - Количество
70 forforumandspam
 
12.08.11
10:25
(67) Тоже бесит.
71 andrewks
 
12.08.11
10:27
72 dmpl
 
12.08.11
10:27
(69) А вот это может привести к тожу, что свойство жены ГоловаБолит надолго установится в значение ИСТИНА :)
73 Alexandr Puzakov
 
12.08.11
10:30
Продукт = "Колбаса";
Купить(Продукт, 1);
Если ЕстьЯйца Тогда
  Купить(Продукт, 10);
КонецЕсли;

Теперь 1Сникам ясно, какой логикой пользовался их коллега из анекдота?
74 Любопытная
 
12.08.11
10:30
Не указано же явно чего десяток. Может десяток это вообще не количество, а отдельная вещь
Имхо

1
75 andrewks
 
12.08.11
10:34
(74) отдельная вещь - это десятка, а не десяток
76 _Atilla
 
12.08.11
10:35
(74) Согласен.

Может имелось ввиду десяток коробок. :-)

-1
77 Эльниньо
 
12.08.11
10:35
Если ЕстьЯйца = 0 Тогда
Если Кастрирован = 0 Тогда
Если ТакИБыло= 1 Тогда
78 DarkWater
 
12.08.11
10:35
Я из тех соображений, что чем больше в доме колбасы, тем лучше.

11
79 Alexandr Puzakov
 
12.08.11
10:35
Даже вернее будет так:

Продукт = "Колбаса";
Если ЕстьЯйца Тогда
   Купить(Продукт, 10);
Иначе
   Купить(Продукт, 1);
КонецЕсли;
80 Jolly Roger
 
12.08.11
10:36
колПалокКолбасы = ?(Магазин.ЕстьВНаличии(Магазин.Ассортимент.Колбаса), 10, 1);
для й = 1 по колПалокКолбасы цикл
   Корзина.Добавить(Магазин.Ассортимент.Колбаса);
конецЦикла


как-то так...
81 Jolly Roger
 
12.08.11
10:37
и завершающий штрих:

Магазин.Оплатить(Корзина);
82 Эльниньо
 
12.08.11
10:38
(79) Садись - Два.

Спр = СоздатьОбъект("Справочник.Продукты");
Спр.НайтиПоНаименованию("Колбаса");
83 Jolly Roger
 
12.08.11
10:38
э... патч к (80):

колПалокКолбасы = ?(Магазин.ЕстьВНаличии(Магазин.Ассортимент.Яйцо), 10, 1);
84 Масянька
 
12.08.11
10:39
По поставленной задаче = 11.
А уточнения - какой продукт (яйца или колбаса) надо было делать дома :) И задача звучала бы по-другому.

PS А вообще - список.  И с подписью. Тогда жена не отвертится...
85 butterbean
 
12.08.11
10:39
интересно, до 100 ветка дотянет??
86 luckyluke
 
12.08.11
10:40
Купить(ПалкаКолбасы, 1);

Если ЕстьЯйца() Тогда
  Купить(Десяток, НЕОПРЕДЕЛЕНО);
КонецЕсли;

1
87 Сергей Д
 
12.08.11
10:40
(79) Неа. 1 палка колбасы идет ВНЕ словия. Ибо: "Купи палку колбасы." и только потом "Если"
88 БалбесВ1с
 
12.08.11
10:41
Все ощиблись.Он должен был купить несколько ВАЗ-2110 и палку колбасы.
89 SeraFim
 
12.08.11
10:41
"Купи палку колбасы" - означает:
КупитьКолбасы(1); // - ВСЁ! процедура выполнена, транзакция зафиксирована, ОДНА палка у него уже есть!
90 БалбесВ1с
 
12.08.11
10:41
*ошиблись
91 Alexandr Puzakov
 
12.08.11
10:42
(83) ахтунг! Тяжелочитаемый код!
92 Xapac
 
12.08.11
10:42
(86)+100500

1
93 Ненавижу 1С
 
гуру
12.08.11
10:42
(89) фигня, транзакция завершится на кассе, вдруг он денег не взял
94 Jolly Roger
 
12.08.11
10:42
(91) сочувствую. развивай мозговую мышцу...
95 Asmody
 
12.08.11
10:44
что такое [десяток]? нет такого товара в справочнике
96 SeraFim
 
12.08.11
10:44
(93) в таком случае все зависит от того, что представляет из себя процедурка "Купить":
а. Поместить в корзину
б. полный набор: поместить в корзину, донести до кассы, оплатить
97 Xapac
 
12.08.11
10:45
(96)Он не в перекрестке а "магазин с прилавком" покупал.
98 Ненавижу 1С
 
гуру
12.08.11
10:45
(97) предупреждать надо
99 Stepa86
 
12.08.11
10:45
(94) если у тебя тяжело читается элементарный код, что же творится там, где что то серьезное???
100 Ненавижу 1С
 
гуру
12.08.11
10:45
100 палок колбасы
101 Asmody
 
12.08.11
10:45
1--
102 Xapac
 
12.08.11
10:46
Колбасная нынче пятница(я жрать чета захотел)
103 luckyluke
 
12.08.11
10:46
(95) в твоём нет, а в справочнике жены есть.
104 Jolly Roger
 
12.08.11
10:46
(99) что именно тяжело читается?
105 Xapac
 
12.08.11
10:47
(103)Обмены плохо проходили
106 Alexandr Puzakov
 
12.08.11
10:47
(94) а может лучше текст подстраивать под мозг, а не мозг под текст? :)
107 Ненавижу 1С
 
гуру
12.08.11
10:47
(91) а так? я иногда люблю сделать
Количество = Запрос.Выполнить().Выгрузить()[0].Количество;
108 Asmody
 
12.08.11
10:47
реализация метода Купить() нас не должна волновать, ибо инкапсуляция
109 mkostya
 
12.08.11
10:47
и точка...

11
110 Asmody
 
12.08.11
10:48
(108)+ и вообще, Купить() входит во фреймворк от стороннего поставщика
111 Ненавижу 1С
 
гуру
12.08.11
10:48
(110) внешняя компонента?
112 Jolly Roger
 
12.08.11
10:49
(106) мой мозх вполне справляется :-)
113 luckyluke
 
12.08.11
10:49
(105) тогда по всей видимости переменная Десяток будет пустая ссылка или Неопределено :)))
Ненавижу 1С будет доволен :)
114 marty0701
 
12.08.11
10:49
Можно также разбить исходные данные на подзадачи, в итоге
1)Купи палку колбасы. //ПалкаКолбасы = 1
2)Если будут яйца, купи десяток.// В данной подзадаче нет ни слова про колбасу, в условии исключительно яйца => необходимо купить десяток яиц.
ПалокКолбасы = 1;
Яиц = 10, при условии наличия товара в магазине, иначе 0;
Все.
115 _Atilla
 
12.08.11
10:49
В моем случае, 1 колбаса и 10 лотков яиц...

т.к. яйца только лотками покупаем...

-1
116 marty0701
 
12.08.11
10:50
+(114) ПалкаКолбасы=>ПалокКолбасы
117 marty0701
 
12.08.11
10:52
Голосую.

1
118 Stepa86
 
12.08.11
10:53
(104) приходится активно двигать глазами, чтобы понять какое именно условие проверяется и что и куда приходит при различных вариантах. Не сразу видно, есть там что то хитрое или это прямолинейный код. и когда знаков в одной строке много, можно очепятатся легко, особенно при модифицировании.

(107) сильно зависит от контекста, по умолчанию неплохо было б проверять на количество строк еще, и выбрать() нарно пошустрее... так что лучше это обернуть в отдельную функцию Количество = ПолучитьКоличество(тадам)
119 bahus
 
12.08.11
10:54
И спорить тут не о чем, идите работать.

10
120 Alexandr Puzakov
 
12.08.11
10:55
(99) у меня-то с кодом как раз все нормально, я стараюсь писать код так, чтобы текст кода сам рассказывал о проделываемых действиях ;)
121 Stepa86
 
12.08.11
10:56
(120) я те слова не сказал
122 Попытка1С
 
12.08.11
10:56
Вы все тут ипанулись.

-1
123 dmpl
 
12.08.11
10:57
(94) Ну да, ну да... вместо того, чтобы сделать что-то полезное будешь потом через полгода вспоминать - как же это работает. Олимпиады по информатике такую дурь выбивают, потому что с ней первые места не светят в принципе.
124 Ненавижу 1С
 
гуру
12.08.11
10:57
(118) ты прав оно обернуто, и с контекстом ты угадал: выборка точно дает результат, причем всегда одну строку
125 Stepa86
 
12.08.11
10:58
(124) в первый раз на этом форуме мне сказали, что я прав... делаю вывод, что ты стебешся
126 dmpl
 
12.08.11
10:59
(123) А то я в первый раз вообще задвинул конструкцию типа
   
колПалокКолбасы = ?(Магазин.ЕстьВНаличии(Магазин.Ассортимент.Яйцо), 10, 1); для й = 1 по колПалокКолбасы цикл Корзина.Добавить(Магазин.Ассортимент.Колбаса); конецЦикла

И аргументация была - так интерпретатор выполнял код быстрее.
127 Jolly Roger
 
12.08.11
11:00
(118) шутишь? там выражение написано почти человеческим языком. мож, легкость чтения таких выражений от натренированности мосха зависит?  :-)
128 dmpl
 
12.08.11
11:01
(124) Более-менее общее правило: 1 строка - 1 действие. Сравнение - тоже действие.

(127) Вот именно, читать надо. А не так что взглянул - и уже структура программы видна.
129 Ненавижу 1С
 
гуру
12.08.11
11:01
(125) да почему же?

Функция  СуммаКОтгрузкеПрежняя()
   
   ТекстЗапроса =
   "ВЫБРАТЬ
   |    ЕСТЬNULL(СУММА(ЗаказыПокупателей.КОтгрузке * ЗаказыПокупателей.СуммаВзаиморасчетов / ЗаказыПокупателей.Количество), 0) КАК СуммаОтгрузки
   |ИЗ
   |    РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей
   |ГДЕ
   |    ЗаказыПокупателей.Регистратор = &Регистратор
   |    И ЗаказыПокупателей.Количество <> 0"    ;
   Запрос = Новый Запрос(ТекстЗапроса);
   Запрос.УстановитьПараметр("Регистратор",Ссылка);
   Возврат Окр(Запрос.Выполнить().Выгрузить()[0].СуммаОтгрузки,2);
   
КонецФункции
130 SeraFim
 
12.08.11
11:02
(108) раз уж инкапсуляция, то значит она делает все: товар в корзину, пройти к кассе, оплатить.
В таком случае - алгоритм жены - не оптимизирован ;)
131 Сергей Д
 
12.08.11
11:03
Берем колбасу, поднимаем яйца - и на обед!
132 Jolly Roger
 
12.08.11
11:03
(128) блин, не пойму в чем сложность: одно условие и два значения результата...
133 Сергей Д
 
12.08.11
11:03
К колбасе еще хлеба неплохо бы.
134 Смешной 1С
 
12.08.11
11:04
Процедура Купить(Номенклатура)

КонецПроцедуры;

Купить(Справочнкии.Номенклатура.НайтиПоНаименованию("Колбасы"));

Если Будут(Яйца) Тогда
   Купить(Справочнкии.Номенклатура.НайтиПоНаименованию("Десяток"))
КонецЕсли;

1
135 Мистадонт
 
12.08.11
11:05
Купи палку колбасы.
Если будут яйца, купи десяток.
Если будет растительное масло, купи литр.
Если будут носки, купи пару.

1
136 dmpl
 
12.08.11
11:07
(132) Условие должно быть четко видно, без чтения всего текста. В данном случае надо было, как минимум, вынести выражение вычисления ЕстьЯйца в отдельную стоку:

ЕстьЯйца = Магазин.ЕстьВНаличии(Магазин.Ассортимент.Яйцо);
колПалокКолбасы = ?(ЕстьЯйца, 10, 1);
137 Stepa86
 
12.08.11
11:07
(132) именно в этом коде сложности мало, это мы тут придираемся, но 1) ты сам умудрился ошибиться в коде, быть может как раз изза немного более сложного чтения 2) при усложнении условия (например проверить наличия колбасы) сложность увеличится 3) При изменении логики работы с количеством (нужно не десяток, а что то более вычисляемое) нужно будет или переписывать через Если Тогда или писать вызов функции с передачей параметров 4) лично я ненавижу оператор ?( после си
138 Stepa86
 
12.08.11
11:08
(136) еще лучше писать

Если ЕстьЯйца() Тогда

это даже жена прочитать сможет
139 Asmody
 
12.08.11
11:08
А если так:

Купить(Колбаса);
КупитьЕслиБудетВНаличии(Яйцо, 10);
140 Asmody
 
12.08.11
11:09
(138) жена и проверить может, если чё
141 dmpl
 
12.08.11
11:10
(137) А еще некошерно передавать результат одной функции как параметр другой без промежуточной переменной, потому что при отладке это значение фиг увидишь. И если вычисление выражения изменяет внутреннее состояние программы, то это сообще ахтунг... а в C++ такое сплошь и рядом, особенно если сложная иерархия классов...
142 Сергей Д
 
12.08.11
11:11
(141) С++ это зло
143 Asmody
 
12.08.11
11:12
(141) [А еще некошерно передавать результат одной функции как параметр другой без промежуточной переменной] — ага, функциональщикам это расскажи
144 Ненавижу 1С
 
гуру
12.08.11
11:13
(137) зря
смотри как удобнее было бы в запросе вместо
ВЫБОР
 КОГДА А=1 ТОГДА Б
 КОГДА А=2 ТОГДА В
 ИНАЧЕ 0
КОНЕЦ КАК П

писать:
А=1?Б:А=2?В:0 КАК П
145 Ненавижу 1С
 
гуру
12.08.11
11:13
(141) нормально все, надо не лениться писать const почаще
146 Jolly Roger
 
12.08.11
11:14
(137) а ну понятно. а то уж я испугался :-)
147 Stepa86
 
12.08.11
11:14
(141) тут мнения расходятся, видел рекомендации по убиению промежуточных переменных (то ли у Фаулера, то ли у Макконнелла) и видел рекомендации по их использованию (у Мартина).

Если функция меняет состояние системы и из ее имени это не очевидно (или делает кроме основной операции еще чо нить), то надо оторвать несколько яиц программисту
148 Xapac
 
12.08.11
11:14
(141)мда
149 Stepa86
 
12.08.11
11:16
(144) я не уверен, что даже после минутной медитации правильно понял второй вариант
150 Адинэснег
 
12.08.11
11:16
151 Дикообразко
 
12.08.11
11:18
(80) патч был в (11)
152 Jolly Roger
 
12.08.11
11:18
(141) кстати да. в этом случае вполне согласен. проверка остатка, в принципе, трудоемкая процедура, поэтому ее лучше было бы вынести в отдельную строку...
153 Jolly Roger
 
12.08.11
11:18
+(152) в смысле, ресурсоемкая
154 Ненавижу 1С
 
гуру
12.08.11
11:19
155 dmpl
 
12.08.11
11:23
(142) C++ - это инструмент. Опасный в использовании, зато позволяющий сделать почти все. Вплоть до указания, какие инструкции процессора использовать.

(147) 1. Все лишние переменные компилятор уберет сам. Так что при грамотном использовании нет даже проблем с повышенным расходом памяти (эти переменные либо имеют регистровый тип, либо точно так же временно создаются и потом уничтожаются).

2. Программист может об этом и не знать - взял базовый класс, немного поменял и... попал. Я видел в одном драйвере 3 раза перегруженный оператор =, который в итоге писал значение не только в переменную, но и в PCI-устройство...
156 KishMish
 
12.08.11
11:24
(0) Кто сказал что надо купить колбасы там же написано "десяток". Может это название такое Молоко "Десяток"... может надо было принести несколько купюр по 10 рублей.
Задача поставлена не корректно
157 Сергей Д
 
12.08.11
11:24
(152) Ну тогда ассемблер еще лучше. Вообще никаких ограничений.
158 Сергей Д
 
12.08.11
11:26
(156) Нечеткая логика, однако (есть такой раздел математики)
159 Stepa86
 
12.08.11
11:26
(155) 1. там загвозка не в экономии памяти, а в удобстве для рефакторинга и/или для чтения
2. это примерно то же самое, что не проезжать перекресток на зеленый, потому что есть идиоты, гоняющие на красный
160 luckyluke
 
12.08.11
11:26
(156) да, эту ситуацию мы уже рассмотрели.
161 байт
 
12.08.11
11:26
ПалкаКолбасы = 0;
Если БудутЯйца Тогда
  ПалкаКолбасы = 10;
Иначе
  ПалкаКолбасы = 1;
КонецЕсли;

БудутЯйца = Истина;
ПалкаКолбасы =

10
162 байт
 
12.08.11
11:28
Посмотрел ветку там оказывается уже все накодили)))))))))))
163 Сергей Д
 
12.08.11
11:28
(161) Еще раз. Кто вам сказал, что словие поставлено именно так. В задаче сказано: купи палку колбасы. БЕЗУСЛОВНО. И потом: ЕСЛИ ... ТО ... Так что 1 палку надо купить обязательно.
164 Dismk
 
12.08.11
11:28
Если не накручивать, то 11

11
165 VasiL-V
 
12.08.11
11:31
не иначе

11
166 Erhov_egor
 
12.08.11
11:34
точно

10
167 Сергей Д
 
12.08.11
11:35
Активность спала. Все едят колбасу.
168 dmpl
 
12.08.11
11:39
(157) К сожалению, уже есть ограничения. Например, самомодифицирующийся код в лучшем случае исполняется медленно, в худшем - глючит.

(159) 1. Ну, тут не надо бросаться в крайности. Если промежуточная переменная улучшит читаемость кода - она должна быть создана.

2. Тот драйвер, похоже, писал истинный адепт ООП... что недалеко от идиота. Я бы понял 1 перегрузку - действительно удобно использовать оператор = для записи в PCI-устройство и чтения из него. Но 3 раза перегружать - это уже слишком.

Тут ведь основная проблема в том, что при использовании чужого кода все равно нельзя точно предсказать, когда меняется состояние в чужом коде, а когда нет... и когда оно вдруг начнет меняться. А отдельная переменная исключает подобную неоднозначность, и становится как-то пофиг - меняется там что-то или нет.
169 zGainer
 
12.08.11
11:40
Попросили запостить :)

колбаса=0 (по умолчанию)
колбаса=колбаса+1
если есть яйца
      колбаса=колбаса+10

11
170 MaxS
 
12.08.11
11:48
(2) Наверное хороший программист, если есть карманные деньги на 10 палок колбасы.

Сейчас если подумать, то 11. Но давно, когда это был не (бо... муз. инструмент), все считали, что 10.

10
171 Xapac
 
12.08.11
11:50
у кого 11 те не правильные программисты
172 Xapac
 
12.08.11
11:50
(171)Верней у кого 10-ть.
173 Stepa86
 
12.08.11
11:52
(172) а у кого 1?
174 MaxS
 
12.08.11
11:53
(173) значит это ещё не программист.
175 Xapac
 
12.08.11
11:54
(173)
Поулчается код:

УсловиеНачатьИначе
 КпитьКолбасы(1)
Если естьЯйца Тогда
 КупитьКолбасы(10)
УсловиеКонец;
176 MaxS
 
12.08.11
12:05
По моему, чтобы жену не обидеть, он должен не 11, а 10 купить. Т.к. они всегда вначале одно говорят, потом другое. ;)
Сидя на заднем сиденье авто показывает рукой направо и говорит поворачивай вон туда, налево.
177 Xapac
 
12.08.11
12:07
(176)Тогда он вообще дурак)
А вообще это не программист должен был так купить, а сисадмин, который четко выполнял по мануалу.
178 Aprobator
 
12.08.11
13:13
пятницо так пятницо

Процедура КупитьКолбасы()
    Если ЕстьЯйца() Тогда
        КупитьДесяток()
    Иначе
        КупитьПалку()
    КонецЕсли;
КонецПроцедуры

10
179 Jofa
 
12.08.11
13:33
Товар = Справочник.Номенклатура.НайтиПоНазванию("Колбаса");

Купить(Товар, 1);

Если ЕстьЯйца() Тогда
   Купить(Товар, 10);
КонецЕсли;

11
180 n0ther
 
12.08.11
13:34
люблю колбасу

11
181 Lenka_Boo
 
12.08.11
13:34
В ТЗ недостаточно информации.
"-Купи палку колбасы. Если будут яйца, купи десяток. "
Отсутствует И/ИЛИ
Если  "И" по-умолчанию, то 11 палок. "ИЛИ" - 10.
182 Jofa
 
12.08.11
13:36
(181)Нам что дали то и перепутали . .
183 Seeker
 
12.08.11
13:43
11
сначала 1 потом +10.

11
184 БалбесВ1с
 
12.08.11
13:47
Кто возьмется написать конфу 1С:Яйцо или колбаса?
Наработки есть,см.ветку.
185 Сергей Д
 
12.08.11
14:14
(184) Колбасу уже давно съели.
186 ТатьянаТВ
 
12.08.11
15:48
Это какая больница?)
187 Дикообразко
 
12.08.11
15:48
(186) это программерская пятницо
188 opty
 
12.08.11
16:01
ТЗ не соответсвует стандартам и допускает двоякое толкование исполнения задачи . На дороаботку
189 zender
 
12.08.11
16:30
очевидно

10
190 Stim213
 
12.08.11
16:35
сделаю за 8500р
191 wertyu
 
12.08.11
16:37
Здесь голосовалку прикрутили, чтобы утвердить решение демократическим путём?

Есть предложение открыть голосовалку по числу Пи:
1. 3.1415...
2. 3
3. 4
4. 10^100
5. 10^(10^100)
192 n0ther
 
12.08.11
16:39
(191)

over 9000
193 wertyu
 
12.08.11
16:40
(192) первым в поиске по сайту стоит гугл, а лурка там вообще нет
194 Vladimirr
 
12.08.11
16:40
11 никак не получается. Жена должна была сказать "купи ещё десяток" для этого.

//Функция возвращает число колбас для покупки, тип возвращаемого значения - число
//Параметры: ЕстьЯйца - тип Булево
Функция ВернутьКолбасу(ЕстьЯйца)
    Возврат ?(ЕстьЯйца,10,1);
КонецФункции

10
195 zavsom
 
12.08.11
16:41
Вылить шампунь в руку , намылить голову, повторить.
196 wertyu
 
12.08.11
16:43
(195) тогда прогу придёься ещё и за шампунем идти, если конечно сможет из цикла выйти
197 DJ Anthon
 
12.08.11
16:54
для подчеркивания идиотизма программистов

11
198 DJ Anthon
 
12.08.11
16:54
но по смыслу

10
199 DJ Anthon
 
12.08.11
16:56
она описывает тех задание, а не алгоритм, если чо...
200 luckyluke
 
12.08.11
16:58
(200)
201 MaxS
 
12.08.11
16:58
(188) тут главнее результат, т.е. продукт. Когда он есть, можно обсудить  детали и скорректировать будущее ТЗ.
202 ТатьянаТВ
 
12.08.11
16:59
Домой!!!!!!!!!! Выходные!!!!!!!!!!!

Траляляляляля
203 kutshai
 
12.08.11
17:30
я муж. и мне жалко нервов.

1
204 Stim213
 
12.08.11
17:32
(202)обрадуй нас, что у тебя дома нет интернета
205 marvak
 
12.08.11
17:34
(0)
это точно тупой и нетворческий и тупой быдлокодер.
так что...
двойка

10
206 salvator
 
12.08.11
17:35
Настоящий мужик берет прозапас.

11
207 marvak
 
12.08.11
17:36
(206)
десять палок, этот перебор, однозначно.
хотя... если он был импотентом, то мог взять замену своим супружеским обязанностям
208 kittystark
 
12.08.11
18:46
не!
на самом деле все было так не так, муж воспользовался рекурсией:

//-- код жены --
Перем Жена;
Перем Корзина;

Процедура Купить( кто, что, корзина = 0 ) Далее
// муж условно-постоянная величина, не надо заморачиваться со справочником
// в качестве параметра "кто" лучше использовать Перечисление.РодственныеОтношения.Муж

СписокПокупок = СоздатьОбъект("СписокЗначений");
СписокПокупок .ДобавитьЗначение(1,"Колбаса(палка)");
СписокПокупок .ДобавитьЗначение(10,"Яйцо");


//-- код мужа --
Функция ЕстьЯйца( икс ) далее

Процедура Купить( кто, что, корзина = 0 )
   Если ПустоеЗначение(корзина) = 1 Тогда
       Корзина = СоздатьОбъект("СписокЗначений");
   КонецЕсли;

   товар = "";
   количество = что.ПолучитьЗначение(1,товар);
   Корзина.ДобавитьЗначение(
           Мин( количество, Регистр.ПартииНаличие.СводныйОстаток(,товар,,,,"Количество")),
           товар);
   Если ЕстьЯйца(кто) = 1 Тогда
       Купить( кто, что.УстановитьЗначение(1,10), корзина );
   КонецЕсли;
КонецПроцедуры

Функция ЕстьЯйца( икс )
   возврат ?( икс = Перечисление.РодственныеОтношения.Муж,1,0);
КонецФукции

////уболтать жену не удалось,
////+переменная Жена не проинициализирована
//Купить(Жена, СписокПокупок, Корзина);

Я = Перечисление.РодственныеОтношения.Муж;
Купить(Я, СписокПокупок, Корзина);
Корзина.Выгрузить(Жена);


поэтому есть еще варианты:
-у него закончатся деньги,
-скупит всю колбасу,
-при огромных объемах колбасы и денег вылетит по переполнению стека/памяти
209 Asirius
 
12.08.11
19:41
Ответ три палки колбасы уже предлагали? Для совсем тру-прогов..
210 Escander
 
12.08.11
20:50
Кривая постановка допускающая многовариантную трактовку приводит к тому что у задачи несколько различных правильных ответов: 1, 10, 11.
211 Креатив
 
12.08.11
20:51
(0)Правда непонятно, что такое десяток?

1
212 VasilyKushnir
 
12.08.11
21:15
(210) Да  нет... не "Кривая постановка допускающая многовариантную трактовку" А "Кривая постановка допускающая лишь частичное решение задачи"
Смотрим;
"-Купи палку колбасы. " - отлично! купил палку.
"Если будут яйца, купи десяток." - купить десяток ЧЕГО? дальше решниия нет.

1
213 Escander
 
12.08.11
21:21
(212)ну типа каждый сам что ему будет удобнее то и поймёт.
214 VasilyKushnir
 
12.08.11
21:32
(213) :-)))))))) Ага:
жена говорит
- сходи в магазин - купи бутылку масла
муж приносит бутылку водку:
- бутылку взял, а на масло не хватило.
215 Escander
 
12.08.11
21:41
(214) не у вас чётко "бутылка масла", а вот было-бы так:
-Сходи купи бутылк масла, если будет оливковое - купи 2 бутылки.
Оливковое было в магазине, поэтому кроме бутылки подсолнечного купил 2 бутылки по 1л водки
216 VasilyKushnir
 
12.08.11
21:49
(215) Наверное только унас 2 бутылки == 2 бутылки водки (как само собой разумеющееся).
Сколько будет 0.5+0.5 любой иностранец скажет один. И только русский скажет литр.
217 Escander
 
12.08.11
21:53
(216) ну типа мы такие! На самом деле видел некоторых иностранцев.... в северных старнах с холодным климатом (Дания, норвегия, Финляндия) принято пить точно так-же как и у нас. Единственнгое там порядку поболее в мозгах у челов и например бухие за руль авто не полезут!
218 marty0701
 
12.08.11
22:11
Так то она ничего не описывает, жена - бух, выдала пару строчек... тут, кстати зависит от того как понял прог, ведь жена не говорила где точка или еще что, тупо выпалила весь текст, так что.... если прог понял как запятую, то 10, если осознал, что точка, то 1, если моск замылился, купил 10+1
219 Zaid
 
23.08.11
15:09
Функция ПокупкаКолбасы()
  Количество = 1;
  Если ЕстьЯйца() Тогда
     Количество = 10;
  КонецЕсли;
  Возврат Количество;
Конецфункции

10
220 nbIx
 
23.08.11
15:12
(219)+1

10
221 Mikeware
 
23.08.11
15:16
Программист из банка не вышел на работу. Через день начальство заволновалось (ну, конфиденциальность, безопасность и все такое...), вызвали Службу безопасности. Те поехали к нему домой. Звонят - никто не открывает. Но вроде какие-то звуки есть. Решили ломать дверь. Взломали дверь – а программист сидит в ванне, вода холодная, сам – синий, в руках почти пустой тюбик шампуня. На тюбике написано- "Выдавить шампунь, намылить голову, смыть, повторить..."
222 Lyekka
 
23.08.11
15:21
Замечание про десяток относилось к яйцам.
а не к колбасе.

1
223 Rovan
 
гуру
23.08.11
15:22
(217) пить они может и пьют только врядли у них это так сильно вошло в фольклор!
наверно иностранный официант не везде поймет что вы заказали если просите "Для начала мне просто 100 грамм"
224 Humandra
 
23.08.11
15:29
На самом деле, программист была и жена. Но начинающий видимо.

Она спросила:
если будут яйца, купи десяток.

Не-программист попросит: купи 1 колбасу и 10 яиц.
А она позаботилась о том, чтобы метод:
КупитьЯйца
не вывалился с эксепшионом при попытке купить несуществующие объекты :))))

-1
225 vesh
 
23.08.11
15:29
Разные предложения. Задания умете читать. Программист оно и задания должен уметь понимать.
Жена сказала ей надо "Зашибись", а остальное не важно

1
226 Humandra
 
23.08.11
15:32
(225) Но программистом была начинающим и невнимательным.
Потому что упустила обработку исключительных ситуаций при покупке 1 колбасы.
И не учла, что покупаемый во второй процедуре объект надо явно объявлять по типу (или язык был нетипизированный?)
227 Aprobator
 
23.08.11
15:45
внимание вопрос - решение подобной проблемы у 1С ника занимает уже 11 дней - какова эффективность данного работника?
228 Leeloo
 
23.08.11
16:25
Купить(ПалкаКолбасы);
   Если ТипЗначенияСтр(Десяток)="Число" Тогда
        Для Н=1 по Десяток Цикл
             Купить(ПалкаКолбасы);
        КонецЦикла;
   ИначеЕсли ТипЗначенияСтр(Десяток)="Яйцо" Тогда
        Для Н=1 по Десяток Цикл
             Купить(Яйцо);
        КонецЦикла;
   Иначе
        Купить(Десяток);
   КонецЕсли;

11
229 Leeloo
 
23.08.11
16:27
Купить(ПалкаКолбасы);
Если ЕстьЯйца()=1 Тогда
  Если ТипЗначенияСтр(Десяток)="Число" Тогда
       Для Н=1 по Десяток Цикл
            Купить(ПалкаКолбасы);
       КонецЦикла;
  ИначеЕсли ТипЗначенияСтр(Десяток)="Яйцо" Тогда
       Для Н=1 по Десяток Цикл
            Купить(Яйцо);
       КонецЦикла;
  Иначе
       Купить(Десяток);
КонецЕсли;

  КонецЕсли;

1
230 Aprobator
 
23.08.11
16:40
*с тоской вздыхая* не видать программисту нормальной яичницы с колбасой.
231 Armin
 
23.08.11
16:46
(228) Такой раздутый алгоритм приводит к тому, что программист начинает тупить когда его посылают в магазин за колбасой. =)
Вот оптимизированный ваниант:

КупитьКолбасы(?(ЕстьЯйца=Истина,10,1));
232 Sj
 
23.08.11
16:54
ПалкаКолбасы = 10 & ЕстьЯйца + 1
233 Megas
 
23.08.11
16:58
10 - 11 в зависимости от того на чём он программист.
К примеру в C счёт с 0 а в pascal с 1

10
234 Jaffar
 
23.08.11
17:49
кстати, в оригинале http://community.otseti.ru/comment/reply/7/747.htm - "Дорогой, купи, пожалуйста, палку колбасы, И (однозначно И!!! - никаких ИЛИ!!!) если будут яйца, то купи десяток."
(219) функция называется не ПокупкаКолбасы(), а ПокупкаВМагазине(), а процедура КупитьКолбасу() там идет до всяких Если. Поэтому -

11
235 Ненавижу 1С
 
гуру
23.08.11
21:41
Смотрю тема затронула за живое, а я только из отпуска вернулся ))
236 Megas
 
24.08.11
09:44
(235) О да я на автора не обратил внимание -)
Тогда ответ :
0 или Null или Неопределено:  вообще всё зависит от того что он увидел по дороге. =)

PS Он одинесником был =)

237 окси
 
24.08.11
09:46
Умора.
238 miki
 
24.08.11
09:57
(234)в оригинале было ", а если...".
Иначе теряется вся соль и появляются бредовые инсинуации типа сабжа.
Да и сама фраза с "И" режет слух - не инструктируют так бабы мужиков.
239 Повелитель
 
24.08.11
10:04
(238)
Правильно, настоящие жены программистов 1с, пишут инструкцию для покупок, только 1с-совместимо :))
240 MaxS
 
24.08.11
13:29
Если бы в 1С функции учитывали жизненный опыт, опыт поколений, тогда программист купил бы палку колбасы и 10 яиц.

Но до искусственного интеллекта в персональных компах ещё далеко.
241 Jaffar
 
24.08.11
23:38
(238) да, я слышал именно такую версию, но гугль не смог ее найти - пришлось довольствоваться союзом "И".
(240) "Но до искусственного интеллекта в персональных компах ещё далеко."
а в одинэсниках? :-)