Имя: Пароль:
1C
1С v8
Можно ли в условии сделать присваивание в 8-ке?
0 Stagor
 
06.03.12
13:58
Например так:

if (k = f(5))>0
{
// k=5
}
1 демотиватор
 
06.03.12
13:59
(0)зачем?
2 vmv
 
06.03.12
13:59
проверь сообщи о результатах - скажем нет лени!
3 Рэйв
 
06.03.12
13:59
Можно
4 Stagor
 
06.03.12
13:59
(1) это уже 2-й вопрос, принципиально можно или нет?
5 Wobland
 
06.03.12
13:59
(1) ради академического интереса и из приверженности к сишному стилю делал на днях пустой цикл
6 andrewks
 
06.03.12
14:00
(0) можно
7 Stagor
 
06.03.12
14:00
(3) пример?
8 mikecool
 
06.03.12
14:00
(3) это не будет двойным сравнением?
9 Wobland
 
06.03.12
14:00
Перем НовоеНаименование;

   Пока НЕ Справочники.Картинки.НайтиПоНаименованию(ПолучитьНовоеНаименование(Наим)).Пустая() Цикл
   КонецЦикла;
10 НЕА123
 
06.03.12
14:01
func ass(a,b)
a = b;
ret a
endfunc

if (ass(k, f(5)))>0
{
// k=5

}
11 Reset
 
06.03.12
14:01
(0) Нельзя.
Только если из**уться и пасанит функцию

Функция Присвоить(А,Б)
А=Б;
Возврат А;
КонецФункции

и писать потом
if Присвоить(k,f(5))>0
{
// k=5

}
12 Wobland
 
06.03.12
14:01
+(9)
Функция ПолучитьНовоеНаименование(СтароеНаименование)
   ГСЧ=Новый ГенераторСлучайныхЧисел;
   НовоеНаименование=СтароеНаименование+"_"+Формат(ГСЧ.СлучайноеЧисло(0, 99999999), "ЧЦ=8; ЧВН=; ЧГ=0")+".jpg";
   Возврат НовоеНаименование;
КонецФункции
13 Reset
 
06.03.12
14:01
(11) *написать ;D
14 Рэйв
 
06.03.12
14:02
к=ф(5);
Если к>0 Тогда
  к=5;
КонецЕсли;
15 ShoGUN
 
06.03.12
14:02
Вообще-то в (0) двойное сравнение. В Си-подобных языках(да и не только) синтаксис равенства и присвоения отличается.  1С - нет, так что равенство или сравнение - определяется контекстом.
16 Рэйв
 
06.03.12
14:02
(14)-(7)
17 vmv
 
06.03.12
14:02
(1) да это просто атавизм почитателей си и срр, пытающихся в один оператор запихнуть влет и посадку ракеты.

иногда полезно не спорю, но часто доходид до маразма с пустым аргументом - это минимизирует коплиляцию кода, просто некоторые еще не выросли из штанишек дос-1.0 и все еще думают, что компяция минимального объектного кода здорово повысит производительность, дикий народ
18 Stagor
 
06.03.12
14:02
Вот, как на v8 сделать такой код без применения функций:

if ((k=5)>0) {}

в условии k получает значение 5
19 Рэйв
 
06.03.12
14:02
+(14)
Или

Если ф(5)>0 Тогда
 к=5;
КонецЕсли;
20 Stagor
 
06.03.12
14:03
(15) см. (18)
21 ShoGUN
 
06.03.12
14:03
(15) равенство или сравнение => равенство или присвоение.
22 Рэйв
 
06.03.12
14:03
(18)  подойдет (19) ?
23 Stagor
 
06.03.12
14:04
(22) нет, так как в (19) использование функции
24 Рэйв
 
06.03.12
14:04
(18) 5 всегда > 0
В чем смысл?
25 Stagor
 
06.03.12
14:05
(24) это только пример, хорошо
так лучше?

f ((k=n*p)>0) {}
26 Stagor
 
06.03.12
14:06
if ((k=n*p)>0) {}
27 Stagor
 
06.03.12
14:06
(26) это выражение на языке 1С8 реально написать в условном операторе или нет?
28 Рэйв
 
06.03.12
14:06
(25)
Если n*p> 0 Тогда
   к=5;
КонецЕсли;


Так?
29 ShoGUN
 
06.03.12
14:07
(24) Ты сегодня за компилятор и за КО одновременно? :) Это пример же, не имеющий практического смысла.
(26) Нельзя так сделать, увы. Родом это из бейсика(а может и ещё раньше). Возможно, сознательно избегали побочных эффектов, инкрементов-то тоже нет.
30 Stagor
 
06.03.12
14:08
(28) нет, именно присваивание должно быть в условии, как тут
if ((k=n*p)>0) {}
31 Ненавижу 1С
 
гуру
06.03.12
14:09
к = ф(5);
Если к>0 Тогда
//к=ф(5)
КонецЕсли;
32 Stagor
 
06.03.12
14:09
(29) "Нельзя так сделать, увы" - все понятно. Так и думал!
33 Reset
 
06.03.12
14:09
(30) НЕ МОЖЕТ одиэсный оператор присваивания использоваться в выражениях
34 Рэйв
 
06.03.12
14:09
(30) в 1С нет различия между "=" и "=="  так что это будет сравнение если его вставить в условие и его можно только с булево сравнить.

Не получится так
35 Ненавижу 1С
 
гуру
06.03.12
14:10
(30) в 1С такого нет, тут вам не Си-подобный язык
36 Stagor
 
06.03.12
14:10
(33) В документации не нашел, что НЕ МОЖЕТ, но скорее всего так и есть!
37 ShoGUN
 
06.03.12
14:11
(32) По-моему это очевидно из того, что для присваивания и сравнения используется одна и та же лексема.
38 Stagor
 
06.03.12
14:11
(35) Где то написал, что в 1С8 что то взяли из C#, но очевидно не это.
"для каждого" наверно :)
39 Ненавижу 1С
 
гуру
06.03.12
14:12
(38) ага, еще "Новый"
40 zyto
 
06.03.12
14:13
(36)А потом эти люди суют кошек в микроволновку, и говорят что в инструкции не написано что нельзя...
41 Песец
 
06.03.12
14:13
(0) Кроме функции никак. В Си такая фишка возможна потому, что оператор "=" в нем возвращает значение.
(18) В твоем примере будет вычислено к=5, возвратит булево, булево будет приведено к числу, которое и будет сравнено с 0.
42 Stagor
 
06.03.12
14:21
(39) Наивно было бы полагать, что будет, что то из Си.
Си для системщиков,  1С для прикладников (бывших бухгалтеров) :)
43 Ненавижу 1С
 
гуру
06.03.12
14:43
(42) C# для кого?
44 Рэйв
 
06.03.12
14:44
(42)  >бывших бухгалтеров

Аха...Сам ноль полный в 1С, а ту да же...Пальцы гнуть. И ярлыки вешать.
45 Wobland
 
06.03.12
14:50
(44) Интересы: тренинги личностного роста.
всё нормально
46 Рэйв
 
06.03.12
14:54
(45)Ну да:-)  Растет над собой. Прям на глазах:-) Еще пару таких же тем поднимет и вообще  с земли не видать будет!
47 ShoGUN
 
06.03.12
14:55
(43) Не для кого, а для чего - для низкого порога вхождения :)
48 sergeante
 
06.03.12
15:13
ТС не 86... увы. А то бы заклевали.
49 Ненавижу 1С
 
гуру
06.03.12
15:18
(47) интересное кино, значит на одни вопросы мы отвечаем в одном ключе, а на другие в другом?
50 Stagor
 
06.03.12
18:27
(44) "Сам ноль полный в 1С" - ничего, за пол года поднимишся!
51 n koretsky
 
06.03.12
19:42
Если (К = Функ(5)) > 0 Тогда
    Сообщить("Вот только кому сдалось такое?");
КонецЕсли;
52 n koretsky
 
06.03.12
19:48
Процедура КнопкаВыполнитьНажатие(Кнопка)
   К = 0;
   Попытка
       Если (К = Функ(5)) > 0 Тогда
           Сообщить("Вот только кому сдалось такое?");
           Сообщить("" + Строка(К));
       Иначе
           Сообщить("Или вот такое");
           Сообщить("" + Строка(К));
       КонецЕсли;
   Исключение
       Сообщить("Них оно не работает");
       Сообщить("" + Строка(К));
   Конецпопытки;
КонецПроцедуры

Функция Функ(м_Число)
   Возврат м_Число + 8;
КонецФункции


//потому, что в данном случае "=" трактуется не как присваивание а как проверка на равенство.
//всегда будем получать "Иначе"