Temat: Ciekawy blog edukacyjny
A ja postaram się odpowiedzieć merytorycznie, wulgaryzmy wykasuję :)
Maciek G.:
Pani podstawówce mówiła na matematyce: funkcja dostaje argumenty (może ich być dowolna
ilość), ale zawsze ZWRACA JEDNĄ WARTOŚĆ.
W zdecydowanej większości przypadków tak jest, ale są sytuacje, że funkcja może zwracać tablicę wyników. Ja np. bardzo często używam funkcji VBA, która na wejściu pobiera zakres komórek, zaś w wyniku zwraca tablicę unikatowych wartości z niego.
A mam wrażenie że lameria wykorzystuje funkcje na pińcet różnych sposobów, tylko nie na ten
jeden, właściwy. Otóż mamy tak:
Może nie do końca rozumieją różnice między procedurami typu Sub i Function? Na pozór jest to bardzo proste: Sub wykonuje jakieś zmiany w pliku, wprowadza zmiany w obiektach, ale nie zwraca niczego w wyniku. Function natomiast zawsze musi zwrócić wynik tego działania. Ale to nie oznacza, że Function ma dokonywać tylko wyliczeń - można np. w treści funkcji wyświetlić okienko dialogowe do zaznaczenia pliku z dysku i w wyniku podać pełną ścieżkę do tego pliku (pusty ciąg gdy user nie wybrał pliku). Sytuacja robi się też bardziej zagmatwana gdy zaczynamy tworzyć metody dla własnych obieków (klasy). Zakłada się, że metoda to czasownik, a właściwość to rzeczownik. Ale nie do końca. Bo metodą może być procedura Sub (nie zwraca wyniku) i procedura Function (zwraca wynik). No i często tak też jest, że ludziom się wydaje, że tylko Function może posiadać argumenty, rzadziej się spotyka Suby posiadające argumenty.
funkcja która zmienia stan jakiegoś obiektu (koloruje komórki na różowo np.) i nie zwraca żadnej > referencji -> no przecież to jest sub a nie function
Tak, to typowy Sub.
funkcja która zmienia stan jakiegoś obiektu i zwraca do niego referencje -> na c***j? Przecież to
sub, j.w.
Tak. Jak widzę funkcję, która zwraca w wyniku obiekt to też mi się scyzoryk w kieszeni otwiera. Funkcje generalnie tworzy się w dwóch celach: po to aby przypisać zmienną do wyniku funkcji i po to aby wykorzystać ją w arkuszu, jak inne funkcje Excelowe. Funkcji, która zwraca w wyniku obiekt nie da się wykorzystać w arkuszu!
funkcja która tworzy jakiś obiekt (dodaje arkusz np.), ale nie zwraca do niego referencji, a zamiast > tego zwraca jakiegoś gównianego booleana który mówi o tym czy się udało utworzyć (na c**j?) a > potem referencje do niego musisz wykombinować na około (np. odwołując się do aktywnego)
To są właśnie metody utworzone przez Function. One często zwracają w wyniku Boolean. Moim zdaniem to nie jest aż takie głupie. Można przypisać zmienną Boolean do wyniku działania takiej funkcji aby sprawdzić czy udało się np. zaimportować jakieś dane z zewnątrz. Zależnie od tego czy się udało czy nie (IF) można przejść w swojej aplikacji dalej lub nie.
funkcja która wylicza jakąś wartość albo tworzy obiekt, ale zamiast normalnie zwrócić to co
stworzyła, to nic nie zwraca, albo zwraca coś z dupy, a tą wyliczoną wartość przekazuje byRef
Z takim czymś się jeszcze nie spotkałem. Może tutaj wchodzić w grę jakiś brak wizji na starcie pisania funkcji tzn. user nie wie jakie argumenty ma pobrać funkcja i co zwrócić w wyniku.
funkcja która coś niby zwraca, ale dodatkowo coś innego przekazuje byRef, czyli df. zwraca dwie
różne wartości
Moim zdaniem, jak wyżej. Pisanie kodu bez przemyślenia.
Mnie zastanawia tylko jedna rzecz - jeżeli lamusy wykorzystują "funkcje" na takie właśnie
niedorobione sposoby, to na jakiej właściwie podstawie decydują, która procedura jest subem a
która funkcją?
Może robią to na wyczucie?
Ten post został edytowany przez Autora dnia 02.10.17 o godzinie 10:25