|
OFF: Зачем нужны Процедуры, если есть Функции | ☑ | ||
---|---|---|---|---|
0
Сергиус
27.10.11
✎
12:26
|
Интересует не вообще в программировании, а именно в 1с. Почему сделали и то и то, хотя таже функция вполне может ничего не возвращать(по сути быть процедурой)?
|
|||
1
Маленький Вопросик
27.10.11
✎
12:27
|
(0) тупой вопрос... удалите
|
|||
2
Megas
27.10.11
✎
12:28
|
Для логического разделения.
|
|||
3
jsmith82
27.10.11
✎
12:29
|
||||
4
DrShad
27.10.11
✎
12:29
|
(1) вот сейчас согласен с тобой
|
|||
5
trambalda
27.10.11
✎
12:30
|
||||
6
Ненавижу 1С
гуру
27.10.11
✎
12:30
|
(0) в 1С функция не может ничего не возвращать, по-умолчанию Неопределено вернет
|
|||
7
Сергиус
27.10.11
✎
12:30
|
(1) интересно..чем он тупой?) Вы делаете заявление, но не обосновываете его)
|
|||
8
Ненавижу 1С
гуру
27.10.11
✎
12:31
|
(7) они тут такие, тупые и жадные... дятлы одним словом
|
|||
9
mm_84
27.10.11
✎
12:33
|
(7) иди учи основы программирования
|
|||
10
Сергиус
27.10.11
✎
12:33
|
Вот, в (6) человек ответил четко и лаконично. Респект!)
|
|||
11
Сергиус
27.10.11
✎
12:34
|
(9)здесь вопросы могут задавать только гуру программирования, которые знают всё, всё?)
|
|||
12
Ненавижу 1С
гуру
27.10.11
✎
12:35
|
(9) я фигею...
|
|||
13
izekia
27.10.11
✎
12:35
|
(0) а процедура может возвращать значения, причем с точки зрения реализации работать аналогично функции
|
|||
14
DrShad
27.10.11
✎
12:36
|
(11) любой человек может задавать вопрос, но ты сам не написал почему тебя это так волнует и что по этому поводу тебе сказал БГ?
|
|||
15
DJ Anthon
27.10.11
✎
12:36
|
(0) мне уже объяснили. а тебе еще нет... каждый чел на этом форуме рано или поздно задает этот вопрос.
|
|||
16
izekia
27.10.11
✎
12:36
|
(!5) я не задавал и не буду
|
|||
17
Phace
27.10.11
✎
12:37
|
(11) Просто твой вопрос - древнейший баянище. Эта тема уже обсуждалась неоднократно. Каждый сишник считает своим долгом поинтересоваться.
|
|||
18
Сергиус
27.10.11
✎
12:38
|
(13)хм..интересно, и как же она может непосредственно что-то возвращать?
|
|||
19
aka AMIGO
27.10.11
✎
12:39
|
(13) - только возвращать в виде параметров
а вообще - имхо - надо не заморачиваться "что и для чего есть в языке" - надо применять.. а что применять - сообразить самому. |
|||
20
VladZ
27.10.11
✎
12:40
|
(0) У нас свободная страна! Не нужны тебе процедуры - не используй! Никто не заставляет.
|
|||
21
НЕА123
27.10.11
✎
12:41
|
(0)
в частности, из-за отсутствия типизированности. функция типа void = процедура. |
|||
22
ДенисЧ
27.10.11
✎
12:41
|
(20) Хочу к вам в страну...
|
|||
23
Nallama
27.10.11
✎
12:41
|
(0) не мешай 1С притворяться нормальной средой разработки.
|
|||
24
aka AMIGO
27.10.11
✎
12:41
|
+19
НоваяПеременная = МояКрутаяФункция(пар1, пар2...); согласны? а вот процедуру так использовать нельзя :) |
|||
25
Сергиус
27.10.11
✎
12:43
|
(21)это применительно к си говоришь? в 1с то это как мешает?
|
|||
26
Сергиус
27.10.11
✎
12:43
|
(24) согласен)
|
|||
27
mm_84
27.10.11
✎
12:43
|
(24) но результат получить можно)
МояКрутаяПроцедура(пар1, пар2...,НоваяПеременная) куда и засунешь результат) |
|||
28
mm_84
27.10.11
✎
12:44
|
(27) правда надо инициализировать заранее)
|
|||
29
izekia
27.10.11
✎
12:44
|
да, причем так же все через стек передастся
|
|||
30
aka AMIGO
27.10.11
✎
12:45
|
(28) вот, и видишь наглядно разницу :)
|
|||
31
izekia
27.10.11
✎
12:45
|
вот если бы у 1С были бы зачатки функционального программирования, тогда бы не возникало таких вопросов, и с функциями можно было бы столько сделать
|
|||
32
izekia
27.10.11
✎
12:45
|
(30) в случае с функцией создание переменной откладывается до возвращения из нее
|
|||
33
izekia
27.10.11
✎
12:46
|
надо признать, что в 1С понятие различия между функциями и процедурами практически стерты
|
|||
34
Сергиус
27.10.11
✎
12:47
|
(32) и что это дает в плане выигрыша?..
|
|||
35
Сергиус
27.10.11
✎
12:48
|
+(34) если только память не сразу занимается..но это скорее плюс функции, чем процедуре.
|
|||
36
НЕА123
27.10.11
✎
12:49
|
(25)
эээ... >это применительно к си говоришь? только синтаксис сишный употребил. >в 1с то это как мешает? мешает что? если про отсутствии типизации то да, зачастую сильно. непонятно с чем работаешь, непонятно, что можно давать в качестве фактического параметра. |
|||
37
izekia
27.10.11
✎
12:49
|
(зато функция под возврат место в стеке занимает, когда можно параметром обойтись ... в общем по сути это одно и то же если откинуть идеологические соображения
|
|||
38
Ненавижу 1С
гуру
27.10.11
✎
12:50
|
чему равно А?
Функция Тест(А) А = А+1; Возврат 2*А; КонецФункции А = 5; А = Тест(А); |
|||
39
izekia
27.10.11
✎
12:51
|
12 вроде ... 1С же все по ссылке передает
|
|||
40
izekia
27.10.11
✎
12:51
|
а не 6
|
|||
41
izekia
27.10.11
✎
12:51
|
нет 12
|
|||
42
Рэйв
27.10.11
✎
12:51
|
(12)
|
|||
43
Рэйв
27.10.11
✎
12:51
|
(38)12
|
|||
44
Рэйв
27.10.11
✎
12:52
|
(39)А так?
Функция Тест(Знач А) А = А+1; Возврат 2*А; КонецФункции А = 5; А = Тест(А); |
|||
45
Рэйв
27.10.11
✎
12:53
|
Или так
Функция Тест(Знач А) А = А+1; Возврат 2*А; КонецФункции А = 5; В = Тест(А); |
|||
46
Ненавижу 1С
гуру
27.10.11
✎
12:53
|
(44) 12
|
|||
47
GROOVY
27.10.11
✎
12:53
|
(30) Все переменные "создаются" на этапе инициализации модуля, даже те что неявно объявлены в модуле.
|
|||
48
НЕА123
27.10.11
✎
12:54
|
Функция Тест(Знач А)
А = А+1; Возврат 2*А; КонецФункции А = ИСТИНА; А = Тест(А); |
|||
49
izekia
27.10.11
✎
12:54
|
(47) ты имел в виду объвлены в методах или в модуле?
|
|||
50
izekia
27.10.11
✎
12:55
|
(48)4
|
|||
51
Рэйв
27.10.11
✎
12:56
|
(19)
Перем А; - явное объявление А=1 - неявное объявление |
|||
52
GROOVY
27.10.11
✎
12:56
|
Объявлены в методах это как?
|
|||
53
Рэйв
27.10.11
✎
12:56
|
(51)->(49)
|
|||
54
izekia
27.10.11
✎
12:57
|
есть переменные модуля, есть метода
|
|||
55
izekia
27.10.11
✎
12:58
|
(53) и что?
|
|||
56
GROOVY
27.10.11
✎
12:58
|
(54) Пример приведи.
|
|||
57
izekia
27.10.11
✎
12:58
|
+ (49) что понимается под словом "создаются"?
|
|||
58
GROOVY
27.10.11
✎
13:00
|
(57) То же что в (32)
|
|||
59
izekia
27.10.11
✎
13:00
|
(56)
Перем ПеременнаяМодуля; Процедура Процедура1() Перем ПеременнаяМетода; КонецПроцедуры |
|||
60
GROOVY
27.10.11
✎
13:01
|
(59) Понятно. Терминология у нас разная. Сути это не меняет. Ответ на (49) все.
|
|||
61
izekia
27.10.11
✎
13:02
|
(58) то есть введение некоего имени ссылающегося на Неопределено?
|
|||
62
izekia
27.10.11
✎
13:02
|
(60) ясно
|
|||
63
dmpl
27.10.11
✎
13:03
|
(29) Нифига, результат возвращается в EAX/RAX или в ST(0), а не в стэк.
(37) Садись, 2. Ничего она не занимает под возврат. Результат возвращается в регистре. |
|||
64
НЕА123
27.10.11
✎
13:03
|
(61)
речь об этом, что-ли. Функция Тест(А) Если Ложь Тогда В="ё12ё123ё1"; КонецЕсли; Сообщить("авправп"+В); КонецФункции |
|||
65
izekia
27.10.11
✎
13:06
|
(63) в 1С результат возвращается в регистре? как ссылка?
|
|||
66
Ненавижу 1С
гуру
27.10.11
✎
13:09
|
вот 1С и заморочила своими терминами, контекст понятия слова "ссылка"
|
|||
67
Волесвет
27.10.11
✎
13:12
|
всех одеть в шапки-ушанки, телогрейки, ватные штаны и валенки
|
|||
68
dmpl
27.10.11
✎
13:22
|
(65) Результат возврата любой функции содержится в регистре (это определяется компилятором). 1С тут не властна ни над чем. Просто если результат не умещается в регистре, то возвращается указатель на объект, переданный в качестве неявного параметра (т.е. в стек помещается только указатель, а не весь объект). Место в стеке под неявный параметр указателя на область памяти для результата возврата выделяется только если функция возвращает объект, не умещающийся в регистре. Т.е., если возвращается объект размером больше 4(8) байт, а не указатель на него. Для возврата простых типов (целые/дробные числа и т.п.) результат требует только регистр.
Насчет того, как возвращает результат 1С. Вот, возьмем пример: возврат структуры или таблицы значений. Чтобы функции вернуть объект (а не указатель), она должна получить от вызывающей стороны указатель на область памяти под этот объект (в качестве неявного параметра в стеке). Чтобы дать такой указатель, вызывающий должен знать РАЗМЕР ВОЗВРАЩАЕМОГО ОБЪЕКТА. Очевидно, что для структуры и таблицы значений размер объекта в момент вызова неизвестен. Поэтому функция должна выделять память под такой объект сама и возвращать указатель на него. Т.е., можно сделать вывод, что результат возврата функции либо значение простого типа, либо указатель на объект. |
|||
69
izekia
27.10.11
✎
13:31
|
(68) ну в 1С все возвращается по ссылке, соответственно я мог бы согласиться с тобой, но 1С не компилирует код, а за интерпретатор я бы не стал так определенно утвержать
|
|||
70
izekia
27.10.11
✎
13:33
|
(68) если посмотреть нетовский IL, то там для возврата используется стек как раз
может потом уже для конкретной реализации хранение в стеке заменяется на регистры это просто как пример |
|||
71
dmpl
27.10.11
✎
13:37
|
(69) Про интерпретатор что-то конкретное можно сказать только проанализировав его код. Но он явно напрямую со стеком не работает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |