powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / чем отличается функция от процедуры (разрушители легенд)
25 сообщений из 55, страница 1 из 3
чем отличается функция от процедуры (разрушители легенд)
    #39893175
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень часто в последнее время на форумах по VBA попадаются скопипащенные ответы на тему "чем отличается функция Function от процедуры Sub". И количество ответов в стиле , дословно "процедура не может возвращать значение" просто зашкаливает.

Так подумать, а что же делали люди без Function то, в обычном Sub , на бейсике ,году этак в 1980м. Правильный ответ - возвращали значения из Sub и не парились))

И также не парились, если надо было из одной процедуры (да и из функции можно) получить 2,3,4,5,N значений на выходе. Без возврата данных в виде массива. Все гораздо проще, просто все уже забыли) В целях проекта "вспомнить всё" можно напомнить как это было))

Как вывести значение из процедуры:

Код: vbnet
1.
2.
3.
Public Sub ВывестиЗначение(byVal Значение1 as Integer, byRef Значение2)
Значение2=Значение1 + 2 ' или ещё какое либо действие
End Sub



Обращение и вывод Значения2 из процедуры Sub (к примеру на кнопку гденить):

Код: vbnet
1.
2.
3.
4.
Private Sub Кнопка1_Click()
call  ВывестиЗначение (10, Значение2)
msgbox Значение2' вот так и вывели и получили число 12. Можно подставить Значение2 куда угодно. Возвратить можно также что угодно, число,текст,объект
End Sub



Если заменить Sub на Function в примере выше, все также прекрасно будет работать.

Просто в какой то момент разработчики слегка проапгрейдили Sub, назвали его Function и дописали к нему возможность вывода значений путем присвоения по ее ссылке на имя, значение выводимой переменной.

Отличие Sub от Function для нас исключительно косметическое. Все можно вернуть, как из функции ,так и из Sub) Просто в функции ради удобства не надо дописывать какую именно переменную мы оттуда хотим вытащить. Можно сразу явно указать ИмяФункции=переменная. И сама функция сделает выбор нужной переменной и передаст по ссылке от своего имени)

И вот таких тем море, на киберфоруме, planetaExcel etc... люди забыли что такое byVal и byRef)
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893177
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

А никто и не парится по этому поводу и даже с массивами, я например, если нужно, вообще использую процедуры и функции без каких либо аргументов, просто использую в их теле глобальные переменные и массивы...
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893179
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

Так вы то еще застали наверное старую школу, c goto Sub и прочими, посмотрите как пишут сейчас, практически никто не использует byVal и byRef в коде)
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893181
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
Отличие Sub от Function для нас исключительно косметическое.
Код: vbnet
1.
FirstWord = Split(Phrase)(0)

А будь Split процедурой - фиг бы оно уложилось в одну строку.

Т.е. как минимум экономия на (локальных) переменных.
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893187
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Сергей Лалов
Отличие Sub от Function для нас исключительно косметическое.
Код: vbnet
1.
FirstWord = Split(Phrase)(0)

А будь Split процедурой - фиг бы оно уложилось в одну строку.

Т.е. как минимум экономия на (локальных) переменных.

Да, + экономия на локальных переменных;
Но Split это встроенная процедура/функция (скорее всего может быть даже отдельный класс, со свойством, вы же обратились потом (0) и вывели первый элемент массива). Кстати вторая тема интересная,что String это по сути массив символов, и по нему также можно пробежаться. Это также народ, который учит VBA не догоняет сначала). И это не примитив типа byte,int.

Перевести текст в массив обычной процедурой тоже можно, но да, код не на одну строку. Придется покружится.
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893188
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
Отличие Sub от Function для нас исключительно косметическое.
Для кого - "нас"? Какой-то неопределённый круг лиц. Для нас - нет.
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893190
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
интересная,что String это по сути массив символов, и по нему также можно пробежаться. Это также народ, который учит VBA не догоняет сначала). И это не примитив типа byte,int.
чушь
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893191
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
закусывать нужно.
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893196
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург
закусывать нужно.


Нифига подобного, текстовая переменная это не примитив.

вы свободно можете сложить два числа к примеру 10+5 и получить 15.
а потом к примеру нам нужно сложить две текстовые переменные "A"+"B".
(Еще один момент из прошлого, раньше конкатенации не было, был один знак плюс)

Порядок сложения простых чисел и сложения текстовых переменных совершенно отличается по способу обработки значений и накоплению информации в стеке.

Не ,String не примитив,точно. Этому на первых занятиях учат на курсах по программированию.

PS. - не пью, от слова совсем))
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893209
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот кстати прекрасный пример у Акина со Split и текстовой переменной.
Панург попробуйте то же самое Split сделать с числом, к примеру Split (100500) (0) ну а потом к примеру Split (100500)(1)) и вы увидите как примитив типа целого числа отличается от текстовой переменной типа String. Стринг это не примитив и по умолчанию проявляет свойства массива.
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893214
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пятница перестает быть скучной.
:)
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893224
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
Но Split это встроенная процедура/функция
Напиши я пользовательскую, пришлось бы расписывать что да куда... а так сразу всё ясно.

Сергей Лалов
String это по сути массив символов, и по нему также можно пробежаться
Оставаясь в рамках VBA, пробежаться как по Byte()? нетривиальная задачка-то...
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893273
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

Жги есчё (просвещай нас), а то скука здеся!
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893314
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
посмотрите как пишут сейчас



Группу профессоров-инженеров пригласили полетать на самолете. После того как они удобно расселись, их
проинформировали, что самолет построили их студенты. Все, кроме одного, рванули к выходу в панике.
Оставшегося профессора, спокойно сидящего на своем месте, спросили: "Почему вы остались? " «Я полностью
уверен в своих студентах. Зная их, могу вас заверить, что этот кусок дерьма даже не взлетит».
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893335
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов

Что исчё новенького открыли для нас в VBA?
(начали рушить "легенды", дык не останавливайтесь )
Ждёмссс!
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893337
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROI,

Уверен, что для тех кто здесь отписался и частый гость ветки access ничего нового не открыл . Потому что все кто отписался, средний стаж в vba 10++. А вот людям , которые задают подобные теме топика вопроса, есть шанс попасть сюда по ссылке и посмотреть как это работает. )
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893342
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS . Недавно показал одному человеку как параллельно из функции можно вывести значения ссылаясь на саму функцию и на аргументы передаваемые по рефу, у него был разрыв шаблона, по типу такого:

Код: vbnet
1.
2.
3.
4.
5.
Public Function MyFunct( znach as Integer,  byref summ, byref mult)
MyFunct= znach
summ=znach+1
mult = znach* 2
End function



И помимо вызова самой функции которая выводит значение сама, можно ещё дёрнуть параллельно по рефу два значения из сигнатуры функции. Шок контент практически. Очень удивился , потом прочитал что то, и стал отмазываться типа это устаревший метод использования итд итп)
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893343
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
PS . Недавно показал одному человеку как параллельно из функции можно вывести значения ссылаясь на саму функцию и на аргументы передаваемые по рефу, у него был разрыв шаблона, по типу такого:

Код: vbnet
1.
2.
3.
4.
5.
Public Function MyFunct( znach as Integer,  byref summ, byref mult)
MyFunct= znach
summ=znach+1
mult = znach* 2
End function




И помимо вызова самой функции которая выводит значение сама, можно ещё дёрнуть параллельно по рефу два значения из сигнатуры функции. Шок контент практически. Очень удивился , потом прочитал что то, и стал отмазываться типа это устаревший метод использования итд итп)

Это мы проходили передача по ссылке и по значению byVal и byRef
ничего нового вы не открыли.
штука в неумелых руках "разрушительная"
по этому по умолчанию и стоит byVal
да и к стати (вы из функции значение не выводите ) вы меняете значение неявной переменной
в куче памяти, ну огребаете потом по полной.
Зы в функции ошибка
MyFunct= znach
Это как?
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893346
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROI


MyFunct= znach
Это как?



В смысле как?)
Это пример функции, где она сама выводит вводимое в нее значение (просто как пример), а также параллельно,уже вызвав её можно еще
дернуть два других из сигнатуры)

К примеру:

Код: vbnet
1.
2.
3.
4.
msgbox MyFunct( 10, summ, mult) выведет просто 10 на экран
'и тут же, из самой функции можно получить еще два других значения по ссылке
msgbox summ
msgbox  mult



То есть она передала значения и в классическом для нее виде и еще 2 передала по ссылке)
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893348
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROI
по этому по умолчанию и стоит byVal
?
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893350
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По умолчанию в VBA по идее вроде должен стоят byRef , потому что он и переменную обычного типа и объект может передать( сослаться имею ввиду)

Панург первым успел))
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893409
ГостьPRST
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов,

То, что осветил тему - молодец, новичкам из твоего первого письма действительно будет полезно освежить знания по теме топика. Уровень знаний (мое субъективное мнение) со временем действительно падает. Может это связано с нашими инновациями в области образвательной системы, или то, что VB не развивается - не знаю, наблюдения именно такие.

Мне больше понравилась такая твоя конструкция, судя по всему она взорвала мозг не только вашему другу, но и глубокоуважаемому ROI, а потом и мне:
Код: vbnet
1.
2.
3.
4.
5.
Public Function MyFunct( znach as Integer,  byref summ, byref mult)
MyFunct= znach
summ=znach+1
mult = znach* 2
End function



Думал, что это ты косякнул,и на выходе выбьет ошибку, но это работает и как вообще это можно =)) . Пришлось перетряхнуть своё понимание function и sub еще разок. Для самоуспокоения.
Работаю уже достаточно давно ,преподом , в т.ч. консультирую по VBA, пару учебных занятий точно перепишу с оглядкой на этот пример. Нашел полезной информацию именно из дискуссий, по первому письму все и так ясно.
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893412
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГостьPRST
...
Работаю уже достаточно давно ,преподом , в т.ч. консультирую по VBA, пару учебных занятий точно перепишу с оглядкой на этот пример. Нашел полезной информацию именно из дискуссий, по первому письму все и так ясно.


ой-ёй-ёй, какой кошмар.
Раньше мир устроен был так, что учили те, кто не умеет работать.
А теперь, оказывается, уже учат те, кто даже приблизительного представления не должен
иметь о том, чему учит...
....
И как сумел мир докатиться до откровений этого топика с первого поста начиная...
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893447
ГостьPRST
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby

ой-ёй-ёй, какой кошмар.
Раньше мир устроен был так, что учили те, кто не умеет работать.
А теперь, оказывается, уже учат те, кто даже приблизительного представления не должен
иметь о том, чему учит...
....
И как сумел мир докатиться до откровений этого топика с первого поста начиная...


Как педагог со стажем, могу предположить, что у Вас в какой то момент в силу жизненных обстоятельств произошла корреляция влево (см. картинку)
...
Рейтинг: 0 / 0
чем отличается функция от процедуры (разрушители легенд)
    #39893449
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГостьPRST,
Педолог ты (в лучшем случае), а не педагог, раз такими картинками сыпешь.

А так ясно, что ты дурачок ты со стажем, раз сам на количество лет напираешь.

Перетряхивай своё понимание.
Да и не надо ни педологу, ни педагогу, лезть в темы в оценками по предметам, в которых у него отсутствует начальное образование.

Проблема не в том, что ты лично себя позоришь.
Показывая на тебя пальцем, люди могут оказаться склонными судить о преподавателях вообще, ссылаясь на твой пример.
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 1 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / чем отличается функция от процедуры (разрушители легенд)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]