Skocz do zawartości
  • 0

Local function


TeZetYT

Pytanie

5 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 1
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

  • 0
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

  • 0
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

  • 0
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. 

Odnośnik do komentarza
https://skript.pl/temat/57822-local-function/#findComment-343685
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...