Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / чем отличается функция от процедуры (разрушители легенд) / 25 сообщений из 55, страница 1 из 3
22.11.2019, 21:36
    #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
22.11.2019, 21:45
    #39893177
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем отличается функция от процедуры (разрушители легенд)
Сергей Лалов,

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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



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

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

Уверен, что для тех кто здесь отписался и частый гость ветки access ничего нового не открыл . Потому что все кто отписался, средний стаж в vba 10++. А вот людям , которые задают подобные теме топика вопроса, есть шанс попасть сюда по ссылке и посмотреть как это работает. )
...
Рейтинг: 0 / 0
23.11.2019, 14:33
    #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
23.11.2019, 14:48
    #39893343
ROI
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
23.11.2019, 15:06
    #39893346
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем отличается функция от процедуры (разрушители легенд)
ROI


MyFunct= znach
Это как?



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

К примеру:

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



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

Панург первым успел))
...
Рейтинг: 0 / 0
23.11.2019, 19:17
    #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
23.11.2019, 19:29
    #39893412
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чем отличается функция от процедуры (разрушители легенд)
ГостьPRST
...
Работаю уже достаточно давно ,преподом , в т.ч. консультирую по VBA, пару учебных занятий точно перепишу с оглядкой на этот пример. Нашел полезной информацию именно из дискуссий, по первому письму все и так ясно.


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

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


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

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

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

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


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