Имя: Пароль:
1C
1С v8
Почему можно не ставить разделитель строк, если одна строка?
0 1с-кин
 
19.01.12
16:55
Почему можно не ставить точку с запятой (";"), если строка одна?

Если Флаг Тогда
   Загрузить()
КонецЕсли;

ведь, по идее, если у ж есть разделитель строки - должен стоять.
1 mikecool
 
19.01.12
16:56
ставь
2 mikecool
 
19.01.12
16:56
+1 сам приучился после косяка с директивами
3 1с-кин
 
19.01.12
17:00
(2) в том и дело, что чревато. А 1С разрешает....
4 mikecool
 
19.01.12
17:02
(3) почитай описание директив языка чтоли
ничем, кроме ошибок при компиляции(в случае использования #Если и прочая) не чревато
и то - если криво расставишь директивы
5 Feanor
 
19.01.12
17:02
(3) а чем чревато?
6 mikecool
 
19.01.12
17:02
и кстате - в цикле так тоже можно делать
7 1с-кин
 
19.01.12
17:09
(4) вообще, конец строки ставится для компилятора. Почему здесь не ставится - загадка 1с.
(6) да везде, где по одной строке можно воткнуть
8 Живой Ископаемый
 
19.01.12
17:10
точка с запятой - это не разделитель строк, а разделитель операторов.. если оператор один, то можно не ставить
9 Живой Ископаемый
 
19.01.12
17:11
"Почему здесь не ставится - загадка 1с. " это не загадка 1С это теория компиляторов. в Паскале было тоже самое.
10 NS
 
19.01.12
17:12
(7) Не поверишь, но так не только в 1С, но например и в Делфи и т.д.
ибо ";" это не разделитель строк, а (8)
11 Живой Ископаемый
 
19.01.12
17:13
и только не нужно говорить что КонецЕсли  - оператор.. это не оператор, а операторная скобка оператора ЕСЛИ, при чем закрывающая скобка.. внутри этих операторных скобок аж один оператор, было бы их два, пришлось бы разделять точкой с запятой.
12 Живой Ископаемый
 
19.01.12
17:19
вообще забавный народ 1Сники...
берется какая-то предпосылка, не проверяется на истинность(точка с запятой - это разделитель строк в языке), на ее основе строятся выводы(нужно в конце каждой строки ставить точку с запятой), ну и случается так, что эти выводы до поры работают(везде более одного оператора, и в конце каждого стоит точка с запятой - аккуратные люди писали, не ленились в конце последней тоже ставить точку с запятой). Что конечно уверяет 1Сника в том что предпосылка была истинной даже без необходимости ее проверки(а верно ли что точка с запятой - разделитель строк?). Потом случается событие, когда вывод не работает (мы видим строку без точки с запятой, и этот код работает) и в этом месте взять бы и проверить изначальную предпосылку, которая конечно ложна - но нет, мы объявляем что это все остальные дураки и не приучены к порядку.
13 1с-кин
 
19.01.12
17:25
(12) вообще, если это разделитель операторов - зачем? компиляцию можно успешно проводить по анализу листинга.
14 Fish
 
19.01.12
17:26
(12) Всё гораздо проще. Просто есть программисты, у которых таких вопросов не возникают, а есть куча народу, которые максимум прослушали курсы 1С, и мнят себя при этом настоящими программистами, и пытаются умничать, не понимая даже, какую ересь несут :)))
15 1с-кин
 
19.01.12
17:29
мну себя прослушавшим курсы "о просто программистах".
куда копать?
16 Fish
 
19.01.12
17:29
(13) Как бы, на это даже нечего ответить. :))) Может прежде чем задавать такие вопросы, почитаешь про компиляторы, трансляторы, интерпретаторы и про то, где и как они используются?
17 1с-кин
 
19.01.12
17:30
(16) они вроде везде используются логично во всем - и с документацией? нет? :)
18 Живой Ископаемый
 
19.01.12
17:31
2(16) это как раз можно и не читать, если не собираешься быть.. но вот почитать букварь от 1С и убедиться что там написано (8)
19 Fish
 
19.01.12
17:31
(17) А ты вообще представляешь себе, как компьютер переводит твои нетленки из (0) в машинные коды, и что, а главное ПОЧЕМУ, при этом происходит?
20 Fish
 
19.01.12
17:32
(18) Там не написано ПОЧЕМУ это так, а ТС это видимо и интересует :))
21 Живой Ископаемый
 
19.01.12
17:34
а... ну может
22 1с-кин
 
19.01.12
17:34
(20) собственно, да :)
(19) как 1с переводит мои нетленки? боюсь даже представить.... там, наверняка, целая Матрица задействована... между делом...
23 Fish
 
19.01.12
17:37
(22) Да, в двух словах не расскажешь :)))
24 Feanor
 
19.01.12
18:14
(23) тсссс... на самом деле компиляторы и интерпретаторы на деревьях растут ))) а потом, когда созревают, отрываются и падают в руки разработчикам, те их компилируют, и вуаля - релиз готов!
25 1с-кин
 
19.01.12
18:15
(24) че, 1с именно так и сделал?!
26 Feanor
 
19.01.12
18:16
(25) конечно
27 Эмбеддер
 
19.01.12
18:18
(0) Зато обидно, что после конецфункции надо обязательно ставить
28 Эмбеддер
 
19.01.12
18:18
т.е наоборот :)
29 1с-кин
 
20.01.12
00:03
(27) меня это тоже раздражает :)
тут ставь, тут не ставь, а где логика-то? :)
30 1с-кин
 
20.01.12
00:04
(26) созревший компилятор - в студию! хотим знать, почему там ставь, а тут не ставь!
31 BOZKURT
 
20.01.12
00:11
мля, как заип.али энти троли..
32 BOZKURT
 
20.01.12
00:16
33 Сияющий Асинхраль
 
20.01.12
00:49
(0) не поверишь, даже если строк внутри условия десять, перед "конецесли" точку с запятой можно не ставить
34 Очкарик
 
20.01.12
00:53
(0) это традиция, перенесенная из 7.7
35 Очкарик
 
20.01.12
00:54
(0) потому, что это есть ОДНА исполняемая команда оператора

Если Флаг Тогда Загрузить() Иначе НеЗагружать() КонецЕсли;
36 DJ Anthon
 
20.01.12
05:56
ставь всегда. без вариантов
37 1с-кин
 
20.01.12
09:25
(36) раздражает и отвлекает бессмысленная "многовариантность".
там, где нужно - ничего сделать нельзя, а где с дерева сорвали - так целый куст одного и того же :)
38 DJ Anthon
 
20.01.12
09:37
(37) точка с запятой позволяется синтаксисом 1С. но чисто для удобства ДАЛЬНЕЙШЕГО редактирования текста (мало ли сколько ты потом еще операторов допишешь) лучше ее ставить и приучить себя. так многое что многовариантно. например, пресловутые метки, которые использовать не рекомендуется только из-за того, что безошибочный код сразу написать невозможно, а дальнейшую правку они усложняют. но ведь они есть ;)
39 Эмбеддер
 
20.01.12
10:57
(34) Это еще с паскаля идет, а тот еще откуда-то наверняка взял
40 ANikV
 
20.01.12
11:01
А книжку почитать по "теории языков программирования" слабо? Например про семантические диаграммы...
41 1с-кин
 
20.01.12
11:07
(39) а как 1с привязана к паскалю??
(40) а про теорию программирования слабо почитать? хотя бы?
и сравнить, насколько в 1с реализован накопленный опыт языков?
42 Jaffar
 
20.01.12
18:30
(37) никто не говорит, что в (0) НУЖНО ставить или не ставить точку с запятой.
МОЖНО ставить, а МОЖНО и не ставить. Выбирать вам.
Но "накопленный опыт" (не языков, а предшественников) однозначно говорит, что легче поставить - так проще будет при необходимости дописывать составной оператор внутри операторных скобок Если...КонецЕсли.
43 aleks-id
 
20.01.12
18:36
в большинстве ЯП после последнего оператора можно не ставить разделитель операторов.
44 vmv
 
20.01.12
18:37
давайте уже про лексемы говорить - начнем а азов сборки кода, надо ж добиться, чтобы 1С-к - это звучало гордо)
45 vmv
 
20.01.12
18:38
(43) а почему, просветишь?)
46 aleks-id
 
20.01.12
19:05
(45) могу только предположить, что сделано это ради экономии. ведь раньше данные писались на перфокарты и прочие маловместительные накопители, где каждый байт был на вес золота...
47 EvgeniuXP
 
20.01.12
19:59
мне вот тоже интересно, почему в 7.7 после найти значения в реквизите справочника надо писать в условии сравнения .ТекущийЭлемент(), вот в восьмере так не пишут, т.к. от текущего элемента вообще отказались:

Результат=ОКИН.НайтиПоРеквизиту("Пол","Женский");

Если Результат=0 Тогда
Возврат;
КонецЕсли;

Если Сотрудник.Пол=ОКИН.ТекущийЭлемент() Тогда // Сотрудник.Пол=ОКИН - не работает
  Сообщить("Это Женщина!");
КонецЕсли;
48 EvgeniuXP
 
20.01.12
20:03
(47) хотя если в отладчике смотреть, что ОКИН, что ОКИН.ТекущийЭлемент() одинаково выдадут наименование, т.е. это ссылка... но во втором случае получается что позиционируемся на ссылке, а в первом случае - нет, хотя данные можем достать через точку и код и наименование - странно!
49 EvgeniuXP
 
20.01.12
20:18
(46) а что толку, если один оператор и после него точка запятой, ну стоит, ну не стоит - компилятор всё равно заканчивает анализ выбранной области... это тоже самое, что ;;;;;;;;;;;;;;;;;; установили, а в итоге всё-равно на выходе получили один оператор.
50 Фокусник
 
20.01.12
20:30
(0) нужно ставить обязательно, а то потом следующий программист, чтобы добавить строку после этой, вынужден дорабатывать и эту "недоделанную" :)
51 DJ Anthon
 
20.01.12
21:46
(47) потому что клюшках переменная со значением ссылка на объект не есть ссылка на объект. и функция ПустоеЗначение на такой переменной вполне может выдать 1, хотя значение заполнено. если преобразовать в строку, то видно, что у переменной не все заполнено в отличие от ссылки на объект.
(50) ага, и копипаста уже может не сработать.
52 DJ Anthon
 
20.01.12
21:47
+(47) зато в восьмере пишут .ПолучитьОбъект()   ;)
53 aleks-id
 
21.01.12
10:49
(49) я имел ввиду исходные тексты модулей. ты пишешь программу в 100к строк. в ней куча процедур и функций. посчитай теперь экономию.
54 Jaffar
 
21.01.12
13:45
(46) не совсем так. раньше исходные тексты действительно готовились на перфокартах, и тогда на одной строке (перфокарте) располагался только один оператор (Assembler, Cobol, даже Фокад), что, кстати, при необходимости легко позволяло менять последовательность операторов либо добавлять между ними новые. Да и в Бейсике тоже было принято располагать на 1 строке 1 оператор. Только с появлением C, Pascal тенденция изменилась.
55 1с-кин
 
23.01.12
13:54
(43) в большинстве ЯП все-таки есть номер строки...