Klauzula NOCOPY

Klauzulę NOCOPY możemy stosować przy parametrach OUT oraz IN OUT. Sprawia ona że wartość przekazana przez parametr nie jest kopiowana (jak to się dzieje domyślnie) a przekazywana jest referencja. To oznacza, że przekazywany jest wskaźnik do obszaru pamięci, a nie wartość jako taka. Efekt jest taki, że zarówno procedura z parametrem jak i blok (lub inna procedura czy funkcja) ją wywołujący działają na TYCH SAMYCH danych, bo chodzi o tą samą przestrzeń w pamięci operacyjnej.

Z jednej strony stosowanie klauzuli NOCOPY może nam pomóc – zwłaszcza przy przekazywaniu przez parametr typu OUT dużych wartości np. długich tablic albo dużych obiektów. Z drugiej strony, jeśli np. w procedurze nastąpi jakiś wyjątek, to w naszej przekazanej zmiennej może znaleźć się coś innego niż byśmy się spodziewali. Poniżej przedstawiam przykład takiej sytuacji:

 

Jak widzimy, w wyniku wywołanego wyjątku, przetwarzanie w procedurze nie dobiegło do końca. W efekcie w zmiennej y bloku wywołującego znalazł się tekst „W trakcie przetwarzania” zamiast „Oryginalny oryginał”

Ten artykuł jest elementem poniższych kursów: