TeZetYT 11 Opublikowano 9 lipca 2024 Udostępnij Opublikowano 9 lipca 2024 Witam. Mógłby mi ktoś wytłumaczyć jak działają dokładnie te całe lokalne funkcje? Bo trochę tego widzę w skryptach, i nie wiem do czego to służy Z góry dziękuję. Odnośnik do komentarza https://skript.pl/temat/57822-local-function/ Udostępnij na innych stronach Więcej opcji udostępniania...
1 Kormic 1951 Opublikowano 9 lipca 2024 Udostępnij Opublikowano 9 lipca 2024 24 minuty temu, TeZetYT napisał: Witam. Mógłby mi ktoś wytłumaczyć jak działają dokładnie te całe lokalne funkcje? Bo trochę tego widzę w skryptach, i nie wiem do czego to służy Z góry dziękuję. Funkcje lokalne różnią się od globalnych tym, że jak poniekąd sama nazwa wskazuje, mogą być używane tylko w skrypcie, w którym zostały zdefiniowane. Próba użycia ich poza plikiem, w którym są zdefiniowane, zakończy się błędem zwróconym przez Skripta. Druga różnica to to, że są one ładowane przed funkcjami globalnymi, czyli mają zagwarantowane pierwszeństwo w przypadku kolizji nazw. Można to łatwo pokazać przy pomocy kodu. Dla przykładu stworzymy dwa pliki skryptowe. # plik testfunkcji1.sk local function myFunction(): broadcast "local - Hello world!" command /test: trigger: myFunction() # plik testfunkcji2.sk function myFunction(): broadcast "global - Hello world!" Która funkcja zostanie wywołana przy wykonaniu komendy /test? Odpowiedź brzmi: lokalna funkcja myFunction (ta obecna w pliku testfunkcji1.sk). EDIT: Zapomniałem dopowiedzieć o możliwych zastosowaniach. W mojej ocenie lokalne funkcje są przydatne, ponieważ mamy pewność, iż to właśnie kod naszej funkcji zostanie wykonany. Zresztą, dwie globalne funkcje nie mogą być zdefiniowane jednocześnie, ponieważ Skript zwróci błąd przy przeładowaniu skryptu (bądź skryptów). Poza tym, jeżeli dana funkcja jest używana tylko w danym skrypcie, nie ma sensu udostępniać jej wszystkim skryptom załadowanym na serwerze. Jest to swego rodzaju higiena pracy, coś na zasadzie enkapsulacji w Javie (choć pojęcia funkcji lokalnej i enkapsulacji są dalekie od siebie, ale myślę, że analogia jest widoczna). Mam nadzieję, że wyjaśniłem co nieco. Jeżeli pojawią się jakieś pytania, śmiało. Pozdrawiam. Odnośnik do komentarza https://skript.pl/temat/57822-local-function/#findComment-343651 Udostępnij na innych stronach Więcej opcji udostępniania...
0 TeZetYT 11 Opublikowano 10 lipca 2024 Autor Udostępnij Opublikowano 10 lipca 2024 12 godzin temu, Kormic napisał: Funkcje lokalne różnią się od globalnych tym, że jak poniekąd sama nazwa wskazuje, mogą być używane tylko w skrypcie, w którym zostały zdefiniowane. Próba użycia ich poza plikiem, w którym są zdefiniowane, zakończy się błędem zwróconym przez Skripta. Druga różnica to to, że są one ładowane przed funkcjami globalnymi, czyli mają zagwarantowane pierwszeństwo w przypadku kolizji nazw. Można to łatwo pokazać przy pomocy kodu. Dla przykładu stworzymy dwa pliki skryptowe. # plik testfunkcji1.sk local function myFunction(): broadcast "local - Hello world!" command /test: trigger: myFunction() # plik testfunkcji2.sk function myFunction(): broadcast "global - Hello world!" Która funkcja zostanie wywołana przy wykonaniu komendy /test? Odpowiedź brzmi: lokalna funkcja myFunction (ta obecna w pliku testfunkcji1.sk). EDIT: Zapomniałem dopowiedzieć o możliwych zastosowaniach. W mojej ocenie lokalne funkcje są przydatne, ponieważ mamy pewność, iż to właśnie kod naszej funkcji zostanie wykonany. Zresztą, dwie globalne funkcje nie mogą być zdefiniowane jednocześnie, ponieważ Skript zwróci błąd przy przeładowaniu skryptu (bądź skryptów). Poza tym, jeżeli dana funkcja jest używana tylko w danym skrypcie, nie ma sensu udostępniać jej wszystkim skryptom załadowanym na serwerze. Jest to swego rodzaju higiena pracy, coś na zasadzie enkapsulacji w Javie (choć pojęcia funkcji lokalnej i enkapsulacji są dalekie od siebie, ale myślę, że analogia jest widoczna). Mam nadzieję, że wyjaśniłem co nieco. Jeżeli pojawią się jakieś pytania, śmiało. Pozdrawiam. Czyli jeśli mam kilka plików skryptowych i w każdym z nich zdefiniuje funkcje lokalną o takiej samej nazwie każda robiącą co innego to mogę bez błędów cos takiego uzyskać? Odnośnik do komentarza https://skript.pl/temat/57822-local-function/#findComment-343678 Udostępnij na innych stronach Więcej opcji udostępniania...
0 Kormic 1951 Opublikowano 10 lipca 2024 Udostępnij Opublikowano 10 lipca 2024 W dniu 10.07.2024 o 09:15, TeZetYT napisał: Czyli jeśli mam kilka plików skryptowych i w każdym z nich zdefiniuje funkcje lokalną o takiej samej nazwie każda robiącą co innego to mogę bez błędów cos takiego uzyskać? Jak najbardziej. Tak długo jak są w osobnych plikach, ich lokalność jest gwarancją braku kolizji między skryptami i ich ciała (kod znajdujący się w funkcjach) nie mają żadnego znaczenia. Dziwię się, że Pan tego nie przetestował na własną rękę. Pozdrawiam. Odnośnik do komentarza https://skript.pl/temat/57822-local-function/#findComment-343681 Udostępnij na innych stronach Więcej opcji udostępniania...
0 TeZetYT 11 Opublikowano 10 lipca 2024 Autor Udostępnij Opublikowano 10 lipca 2024 18 minut temu, Kormic napisał: Jak najbardziej. Tak długo jak są w osobnych plikach, ich lokalność jest gwarancją braku kolizji między skryptami i ich ciała (kod znajdujący się w funkcjach) nie ma żadnego znaczenia. Dziwię się, że Pan tego nie przetestował na własną rękę. Pozdrawiam. Nie przetestowałem bo póki co nie mam komputera przy sobie i pisze z telefonu. Ale w każdym razie dziękuję za odpowiedź, do zamknięcia. Kormic 1 Odnośnik do komentarza https://skript.pl/temat/57822-local-function/#findComment-343685 Udostępnij na innych stronach Więcej opcji udostępniania...
0 Kormic 1951 Opublikowano 10 lipca 2024 Udostępnij Opublikowano 10 lipca 2024 Problem został rozwiązany. Odnośnik do komentarza https://skript.pl/temat/57822-local-function/#findComment-343688 Udostępnij na innych stronach Więcej opcji udostępniania...
Pytanie
TeZetYT 11
Witam. Mógłby mi ktoś wytłumaczyć jak działają dokładnie te całe lokalne funkcje? Bo trochę tego widzę w skryptach, i nie wiem do czego to służy
Z góry dziękuję.
Odnośnik do komentarza
https://skript.pl/temat/57822-local-function/Udostępnij na innych stronach
5 odpowiedzi na to pytanie
Rekomendowane odpowiedzi