powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как, чтобы функция выдавала несколько значений?
11 сообщений из 11, страница 1 из 1
Как, чтобы функция выдавала несколько значений?
    #32413472
Bad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bad
Гость
Как сделать чтобы функция выдавала несколько значений?
Например
a=funkcia(b,s)

function functia(b, s as integer) as integer
dim e
e=b*s
functia=b+s
end functia

А как выдернуть значение переменной - е?
...
Рейтинг: 0 / 0
Как, чтобы функция выдавала несколько значений?
    #32413486
boevik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никак.
Пройдет только такой вариант:
Код: plaintext
1.
2.
3.
4.
5.
sub functia(byval a as integer, byval b as integer, _
                 byref s as integer, byref m as integer)
m=a*b 
s=a+b 
end sub

Вызов выглядит так,
Код: plaintext
functia  1 , 2 , sum, mul 
...
Рейтинг: 0 / 0
Как, чтобы функция выдавала несколько значений?
    #32413623
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно.
Создаем отдельный класс, в нем переменные по количеству возвращемых переменных


Public Var1 as integer
Public Var2 as string


Функция:


Public Function GetData(a as integer, b as integer) as MyClass
dim TempClass As MyClass
set TempClass = NEw MyClass

TempClass.Var1=a*b
TempClass.Var2=a+b

set GetData=TempClass

End Function

На выходе получаем класс и читаем два значения. Пр желании и 10 и 100 и коллекции и что угодно.
dim NewClass as MyClass

set Myclass=GetData(2,4)



Удачи.




Magnus
...
Рейтинг: 0 / 0
Как, чтобы функция выдавала несколько значений?
    #32413641
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Magnus23

Супер!

2 Автору

Я стараюсь делать по другому. Использую глобальные переменные и пишу значения туда. Можно сделать так чтобы твоя функция / процедура возвращала результаты в public переменные. А ты потом эти значения берешь куды нужно.Этот способ поможет избежать многих хлопот.
...
Рейтинг: 0 / 0
Как, чтобы функция выдавала несколько значений?
    #32413650
boevik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну если так, то достатожно и свой тип определить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Type myType
    s as integer
    m as integer
End Type


function functia(b, s as integer) as myType
    functia.m=a*b 
    functia.s=a+b  
end functia 

Вызов выглядит так,
Код: plaintext
1.
2.
3.
4.
dim i as myType

i = functia( 10 , 100 )
debug.print i.m;i.s


--------------------------------------------------
Никогда не говори никогда
...
Рейтинг: 0 / 0
Как, чтобы функция выдавала несколько значений?
    #32413657
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Eternal

Вообще-то, глобальные переменные это плохая практика. В больших проэктах от них все зло и баги. Равно как и передача параметров byref, только если точно знаете что делаете.


Magnus
...
Рейтинг: 0 / 0
Как, чтобы функция выдавала несколько значений?
    #32413688
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не возражаете, укажу на пару ошибок:

Во-первых, если функция публичная то UDT не может быть использован как ее результат, генерится ошибка времени компиляции.
Во-вторых, если функция вынесена в модуль, то и тип должен выть глобальным, к примеру в том же модуле, снова получаем #1.
Для реализации, можно обьявить функцию как Friend , но в этом случае ее не смогут использовать внешние обьекты.

И еще одно: параметр "b" в последнем пример передан как Variant. Если тип не указан, он всегда по умолчанию Variant, декларация через запятую не работает.

Ничего личного, просто мне кажется варинт с использованием класса наиболее верным, так как работает для всего проэкта глобально и без огранчений как для типов, тем более что в этом случае для передаваемых параметров можно определить Property Get/Let и в них проверять значения на соответствие.



Magnus
...
Рейтинг: 0 / 0
Как, чтобы функция выдавала несколько значений?
    #32413745
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Magnus23

Я согласен вообщем то. Но все зависит от ситуации. И использование глобальных переменных или классов надо варьировать.

А вообще ты подсказал мне интереный ход. Спасибо.
...
Рейтинг: 0 / 0
Как, чтобы функция выдавала несколько значений?
    #32413804
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И использование глобальных переменных или классов надо варьировать

Позволю себе не согласится. Представьте себе большой проэкт, порядка 40-50 форм, около сотни классов, пару сотен модулей. Многие классы и модулю имеют схожую функциональность(поддержка форм, к примеру, каждый работает со своим субьектом). Представляете количество переменных в подобном проэкте? Публичных функций, типов и т.д. Естественно что в очень многих случаях нужны глобальные параметры, но для нервного спокойствия кодера, в подобном случае лучше создать отельный публичный класс(GlovalOptions) инициализировать его в начале работы и читать все из него. Преимущества?

Все необходимые параметры в одном месте.
Контроль установки/чтения параметров.
Возможность создать свойтва "только для чтения" - сберегает массу нервных клеток.


Magnus
...
Рейтинг: 0 / 0
Как, чтобы функция выдавала несколько значений?
    #32413823
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты все верно говоришь , классы это хорошо. Но ты же не будешь их лепить для
решения относительно простых вещей, а будешь использовать глобальные.

Если проект здоровый , то это точно. Можно утонуть в этой жиже из переменных. А с другой стороны можно утонуть в классовой жиже.

Иногда проще не писать класс , а использовать доброе процедурное и функциональное программирование.
...
Рейтинг: 0 / 0
Как, чтобы функция выдавала несколько значений?
    #32413883
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты все верно говоришь , классы это хорошо. Но ты же не будешь их лепить для
решения относительно простых вещей, а будешь использовать глобальные.

Для простых вещей да. Для очень простых :).
ООП - рулит. :)

Если проект здоровый , то это точно. Можно утонуть в этой жиже из переменных. А с другой стороны можно утонуть в классовой жиже.
В классовой жиже - сомневаюсь, у меня постоянно подобные проэкты и если не влазишь в него в середине а понимаешь всю структуру и участвуешь в процессе зарождения то никаких проблем нет.



Иногда проще не писать класс , а использовать доброе процедурное и функциональное программирование.
У нас с тобой разные школы :). Я не пишу классы "абы було", если нужен просто набор функций , они прекрасно уживаются в модуле.



Magnus
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как, чтобы функция выдавала несколько значений?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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