Имя: Пароль:
1C
1C 7.7
v7: Явное или неявное объявление переменной. Что лучше?
0 DJ Anthon
 
28.10.11
10:31
1. Перем А; 80% (4)
2. А = ПолучитьПустоеЗначение(); 20% (1)
3. А = 0; 0% (0)
4. Если 0 = 1 Тогда А = 1; КонецЕсли; 0% (0)
5. Автор тупой 0% (0)
Всего мнений: 5

Вопрос не касается общих переменных глобального модуля.

П. С. вариант 4 нужен, когда неизвестно, существует ли уже глобальная переменная с таким именем.
1 Godofsin
 
28.10.11
10:33
Смысл варианта 4 все равно не понял
2 zak555
 
28.10.11
10:33
(1) синтаксический контроль ?
3 DJ Anthon
 
28.10.11
10:34
Мое мнение. Перекидывая алгоритмы сразу большими пачками, сталкиваешься с мелкой проблемой, что строки объявления переменных (Перем ) должны быть в начале проц или функц.
с вариантом 2 или 3 такой проблемы не возникает.

А = ПолучитьПустоеЗначение();
4 orefkov
 
28.10.11
10:35
Православно даже не париться этим.
5 DJ Anthon
 
28.10.11
10:35
(1) когда подключаешь внешнюю обработку к неизвестной конфигурации, не знаешь, есть там уже проинициализированная переменная или нет. чтобы не вылететь, надо переменную объявить, но так, чтобы она не стала локальной, если она есть уже глобальная, и в то же время, случайно не затереть ее значение
6 DJ Anthon
 
28.10.11
10:37
(4) делаю парсинг кода процедур и функций. просто код приходится сдвигать после последнего объявления переменной, теряется наглядность. мелочи, но все же не понятно, конструкция (2) короче (1). почему бы ее не использовать в типовых?
7 DJ Anthon
 
28.10.11
10:38
(4) я не учу, конечно же, прогеров 1С своему уставу, просто интересно, что я еще не знаю о волшебной строчке Перем А;
8 mikecool
 
28.10.11
10:40
(5) использовать свои префиксы - не по религии?
9 Ёпрст
 
28.10.11
10:40
(5) для этого есть элементарная проверка, но в (0) ни в одном из предоставленных вариантов её нет.
10 DJ Anthon
 
28.10.11
10:43
(9) разве вариант 4 для этого не подходит?
11 DJ Anthon
 
28.10.11
10:43
(8) зачем? мне нужна именно та глобальная переменная. но ее может просто не быть. а сабж вообще не про это )
12 DJ Anthon
 
28.10.11
10:44
(9) какая? шаблон?
13 Ёпрст
 
28.10.11
10:45
(10) нет.
14 qwerty09
 
28.10.11
10:46
(0) Если 0 = 1 Тогда А = 1; КонецЕсли;
эквивалентно
Если Ложь Тогда А = 1; КонецЕсли;
то есть всегда А будет присвоено значение 1
Не понимаю к чему это.
15 zak555
 
28.10.11
10:48
> то есть всегда А будет присвоено значение 1

????
16 DJ Anthon
 
28.10.11
10:49
(14) ложь в 7ке нет. А создастся, если ее нет. но будет не тронута, если есть, что непонятного? сама же миста мне это из книги знаний подсунула!
17 Ёпрст
 
28.10.11
10:49
18 qwerty09
 
28.10.11
10:51
(15), (16) ой, не заметил что о 7-ке речь...пардоньте
19 DJ Anthon
 
28.10.11
10:53
(17) сабж не про это )) про то я все выяснил

вопрос, если я вместо Перем А; буду писать А = ПолучитьПустоеЗначение(); это может вылезти каким-нибудь боком?
20 Voronve
 
28.10.11
10:54
(14) А никогда не получит значения 1
21 orefkov
 
28.10.11
10:56
(19)
Ясен пень будут проблемы.
Если А - переменная модуля, или глобальная, или реквизит формы.
22 DJ Anthon
 
28.10.11
10:56
как я понял, только если нарвусь на уже объявленную где-то выше по течению переменную с названием А (в параметрах, реквизитах, глобальнике или этом же модуле). хорошо, можно ветку закрывать, всем спасибо
23 DJ Anthon
 
28.10.11
10:57
(21) )))))))))))))))))

(20) Кэп?
24 Escander
 
28.10.11
10:58
Какая пятничная ветка!!!

Перем А;
25 orefkov
 
28.10.11
10:59
+(21)
Вернее, если уже есть А - переменная модуля, или глобальная, или реквизит формы.
То есть обычно локально Перем часто юзается как-раз для удобства переноса метода ЦЕЛИКОМ в другое место, чтобы гарантировать, что эта переменная будет локальной полюбому, и никаких глобальных переменных не затронет.
26 orefkov
 
28.10.11
11:01
Так что лучше не использовать китайский способ повторного использования кода (копипастинг), а православно раскладывать все по отдельным методам.
27 Godofsin
 
28.10.11
11:01
(5) Прикольно. Возьму на вооружение.
28 Кириллка
 
28.10.11
11:03
В подавляющем большинстве случаев объявляю переменную, кроме всяких счетчиков типа Н,К,С в циклах.

Кстати, за п.5 я тоже голосую.

Перем А;
29 DJ Anthon
 
28.10.11
11:04
(26) да, я тоже так подумал. просто в семерке не хватает глобальной процедуры ПриПроведении и ПриОтменеПроведения, а перехватчик я не хочу подключать. придется крутиться..
30 Ёпрст
 
28.10.11
11:11
(29) ну и зря - минимум кода, максимум удобства.
31 DJ Anthon
 
28.10.11
11:16
(30) заю, но не только для себя пишу....
32 DJ Anthon
 
28.10.11
11:18
(26) и да, массивы обламываются.. все-таки

Перем А;
33 Cthulhu
 
28.10.11
11:58
"присвоение значения" и "объявление переменной" - две большие разницы. пп.2-4 = п.5.

Перем А;
34 Оболтус
 
28.10.11
12:02
Да чего-то как-то и не парюсь по этому поводу. Префиксы л_, м_ и гл_ спасают.