Witam z powrotem.
W tym wykładzie chcę porozmawiać o zmiennych lokalnych i globalnych.
To jest naprawdę pojęcie funkcji zakres lub ogólny zakres programu.
Ma to związek z tym, kiedy możesz używać zmiennych i kiedy
nie możesz ich używać.
Wiemy, jakie są funkcje.
Więc teraz chcę porozmawiać o zmiennych lokalnych.
Zmienne lokalne naprawdę muszą zrobić z czymś więcej niż tylko funkcjami.
Zmienne lokalne mają do czynienia z wszystko, co zawiera blok kodu.
Więc zmienne zdefiniowane wewnątrz funkcji są znane jako
automatyczne zmienne lokalne.
Więc w tej funkcji, pomiędzy te nawiasy początkowe
i końcowe, jeśli deklarujesz zmienną, to zmienna jest zmienną lokalną.
Zostanie utworzony automatycznie za każdym razem, gdy wywoływana jest funkcja.
Ponadto wszelkie wartości w dostęp do tej zmiennej jest tylko
lokalny dla funkcji.
Nie możesz uzyskać dostępu do tej zmiennej poza tą funkcją.
Dlatego nie można uzyskać dostępu do zmiennej w innych funkcjach, jeśli jest
lokalny dla określonej funkcji.
Jest dostępny tylko skąd jest to zdefiniowane.
Jeśli podano wartość początkową do zmiennej wewnątrz funkcji,
ta wartość początkowa to przypisywane do zmiennej za każdym razem, gdy
funkcja jest wywoływana.
Jeśli chcesz zachować wartość w zmienna przy każdym kolejnym wywołaniu, właściwie
można to zrobić w c nazywa się to
zmienną statyczną wewnątrz funkcji.
To znowu bardziej zaawansowane koncepcja nie w klasie dla
początkujących, ale jest to sposób, w jaki możesz w rzeczywistości mają różne
dane za każdym razem, gdy wywołujesz funkcje.
Więc jeśli chcesz na przykład zachować licznik tego, ile razy funkcja została wywołana,
zadeklarowałbyś a zmienna lokalna wewnątrz tej funkcji o nazwie
static, ze słowem kluczowym static.
Ale bez zwykłego zmienne lokalne będą za każdym
razem miały nowe wartości.
Możesz wcześniej użyć słowa kluczowego auto typ danych, ale nie jest to konieczne.
To sprawia, że jest to trochę bardziej precyzyjne.
Kompilator doda go przez domyślnie, jeśli go nie uwzględnisz.
Ale jeśli to uwzględnisz, to jest chcę
tylko uczynić to bardziej precyzyjnym, nie jest to konieczne.
Więc to się nazywa automatyczna zmienna lokalna.
W c jest słowo kluczowe o nazwie auto, ale nie musisz
podawać go domyślnie i dlatego nie widzisz tego w wielu przykładach,
w których definiowane są zmienne i zadeklarowane wewnątrz funkcji.
Zmienne lokalne mają również zastosowanie do dowolny kod, w którym zmienna jest tworzona
w bloku, pętlach lub instrukcjach if.
Ponownie, jeśli masz instrukcję if w pliku czym jest blok dla instrukcji if, to
właśnie tam zaczynają się nawiasy.
Nazywa się to blokiem.
Bloki mogą być w funkcjach, bloki mogą być instrukcjami if,
bloki mogą być pętlami.
Bloki mogą być w dowolnym miejscu zasadniczo są nawiasy.
Wszędzie tam, gdzie są nawiasy i tworzysz tę zmienną.
Deklaracja utworzenia zmiennej i być może przypisując mu wartości.
Ale jeśli zadeklarujesz tę zmienną, tworzysz tę zmienną
wewnątrz bloku, której możesz używać tylko ta zmienna wewnątrz bloku.
Jeśli spróbujesz uzyskać do tego dostęp zmienna poza blokiem, nie
będzie używana.
Więc jeśli masz oświadczenie if, wewnątrz instrukcji if
deklarujesz zmienną, do której masz dostęp ta zmienna poza blokiem instrukcji
if, to samo z pętlami.
To bardzo ważne aby to zrozumieć.
Kompilator będzie narzekał i wyświetla błąd, jeśli spróbujesz uzyskać do
niego dostęp w innym miejscu.
A to oznacza, że wartości w danych mają zastosowanie
tylko do tego bloku.
Nie udostępniasz żadnych danych.
Zmienne globalne to przeciwieństwo zmiennej lokalnej.
Można uzyskać dostęp do zmiennych globalnych przez dowolną funkcję w programie.
Sposób, w jaki tworzysz plik globalny zmienna to po prostu umieszczasz ją
na górze poza dowolną funkcją.
Dlatego deklarowane są zmienne globalne poza funkcją i nie należą
do żadnej funkcji.
Pamiętaj, główne słowo kluczowe główna jest funkcją.
Więc wszystkie zmienne zdefiniowane w funkcja główna jest dostępna
tylko w funkcji głównej.
Więc zmienne w głównym funkcje nie są dostępne w
żadnych innych funkcjach.
Jeśli chcesz mieć zmienną, to jest używane przez wszystkie funkcje, umieszczasz zmienną
poza funkcją, zwykle na górze pliku źródłowego i
zwykle oznacz go jako mówiąc, że jest to zmienna globalna.
Zmienna globalna to kłamstwo całości programu od momentu rozpoczęcia do kiedy
zatrzymuje się, ta zmienna globalna zostanie umieszczona
w pamięci.
Dowolna funkcja w programie może zmieniają wartość tej zmiennej globalnej, ponieważ mają mieć do niego dostęp,
mogą go modyfikować.
Więc powinieneś zacząć myśleć o wow, które wydaje się trochę niebezpieczne, ponieważ teraz masz kod, który może
uzyskać dostęp do tych samych danych w dowolnym
miejscu, ale do tego dojdziemy.
Jeśli jest zadeklarowana zmienna lokalna w
funkcji o takiej samej nazwie jak zmienna globalna, to funkcja użyje zmiennej lokalnej,
zamaskuje zmienną globalną.
Więc jeśli masz zmienną globalną o nazwie x i masz
lokalną zmienną o nazwie x wewnątrz funkcji, lokalną zmienna będzie miała pierwszeństwo.
To się nie zmieni dane zmiennych globalnych.
Jeśli przypiszesz do tego zmienna, będzie
modyfikować tylko zmienną lokalną.
Więc zmienna globalna nie jest dostępne, gdy masz taką samą nazwę,
i faktycznie nie będzie być dostępne w ramach tej funkcji lokalnej, więc
nie używaj tego samego nazwy po prostu dlatego, że
będzie to mylące.
Dla osób, które zaprogramowały wielu zaawansowanych programistów od
razu to zauważyło.
Powiedzą hej, po prostu Działa tylko modyfikuje zmienną
lokalną, nawet jeśli widzą plik czasownik globalny o tej samej nazwie.
Ale dla początkujących tak nie zawsze jest bardzo jasne.
Dam ci przykład.
Tutaj, w tym przykładzie, jesteśmy tworzenie zmiennej globalnej na
samej górze przed funkcją główną.
I sposób, w jaki chcesz się zorganizować Twój program zazwyczaj
zawiera instrukcje u góry, po niektórych może komentarze, a potem możesz mieć jakieś zdefiniowane
stałe, a potem ty miałby twoje zmienne globalne.
Zmienne globalne wyglądają po prostu jak normalne zmienne.
Po prostu tam są faktycznie zadeklarowane.
Jeśli są zadeklarowane poza domeną funkcja, wtedy są globalne.
W tym przykładzie mamy plik zmienna globalna o nazwie my global.
Inicjalizujemy go na 0.
Możemy je również zainicjować zmienne globalne w dowolnym miejscu.
Możemy je zainicjować, kiedy deklarujemy je lub możemy je
zainicjalizować w dowolnej funkcji.
To jest liczba całkowita.
Mamy też dwie funkcje, główna funkcja w funkcji
o nazwie moja funkcja.
Wewnątrz mamy lokalny zmienne, które są dostępne tylko
wewnątrz tych funkcji.
W głównej funkcji mamy mój lokalny główny.
Możesz uzyskać dostęp tylko do mojego lokalnego main wewnątrz głównej funkcji.
Ale ponieważ mój globalny jest zmienną to jest globalne, możesz również uzyskać do niego
dostęp w głównej funkcji.
Więc główny może uzyskać dostęp do dwóch zmienne, lokalne i globalne.
A moja funkcja ma zmienną lokalną nazwany x, ponieważ jest zadeklarowany w
nawiasach kwadratowych w treści funkcji i faktycznie mamy dostęp do zmiennej globalnej, która
jest moją globalną.
Możemy również uzyskać dostęp do x, ale nie możemy uzyskać dostępu do mojego lokalnego.
Powinienem powiedzieć, że moja lokalna główna.
Ponieważ moja lokalna główna jest tylko wewnątrz funkcji głównej.
Nie mamy do tego dostępu.
Jeśli spróbujemy napisać lub przeczytać moje lokalna zmienna główna wewnątrz
funkcji my, kompilator to dam ci błąd.
Musisz to zrozumieć koncepcja lokalności versus globalność.
Lokalne znajdują się wewnątrz bloków kodu.
Kiedy zostaną zadeklarowane, możesz używaj ich tylko w bloku.
Jeśli zmienna znajduje się poza blokiem i jest tylko w funkcji lub w samym
programie, możesz uzyskać do niego dostęp w dowolnej funkcji.
Należy unikać zmiennych globalnych.
Zmienne globalne to coś w rodzaju zła.
Powód ich globalnego zmienne są złe i dlatego należy ich
unikać, ponieważ tak jest promuje sprzężenie między funkcjami.
Co oznacza połączenie?
Sprzężenie oznacza zależności.
Jeśli masz zmienną globalną i jest używany przez
cztery funkcje, to znaczy każdą z tych funkcji może zależeć
od drugiej funkcji.
Co jest złego w zależności?
Zależność powoduje, że program jest znacznie trudniejsze do debugowania i znajdowania błędów.
Jeśli masz błąd w swoim programie i używasz zmiennej globalnej, a
zmienna globalna powoduje błąd, teraz ten błąd może znajdować się w dowolnym
miejscu w dowolnej funkcji używając tej zmiennej globalnej.
To komplikuje sprawę gdy masz dane globalne.
Mógłbyś mieć zmienną globalną być zmodyfikowanym w funkcji pierwsza, funkcja druga,
funkcja trzecia, funkcja czwarta.
Nie ograniczasz do tego dostępu. Jest to również bardzo trudne, gdy znajdziesz
błąd i izolujesz to, może być bardzo
trudno to naprawić.
Ponieważ teraz, kiedy to naprawisz, możesz powodują problemy w innych funkcjach
z powodu tych zależności.
Zmienne globalne powinny być unikane w jak największym stopniu
z powodu tego sprzężenia, z powodu tych zależności.
Są chwile, kiedy możesz potrzebować go używać, ale należy go unikać.
I o czym należy pamiętać przede wszystkim nowoczesne języki w większości języków
obiektowych, takich jak c ++ i java, nie mają nawet
pojęcia zmiennej globalnej.
Mają zmienne statyczne, które mogą być zmiennymi klasowymi, ale nadal
są zamknięte w klasie.
Ponieważ takie są dane globalne złe, nowe języki
faktycznie próbują zakazać.
I powinieneś starać się tego unikać to dlatego, że po
prostu komplikuje twój program i czyni go trudniej znaleźć i debugować błędy.
Zamiast używać global dane, przekazywanie danych do funkcji.
Jeśli funkcja wymaga dostępu do jakichś danych, przekaż je do niego.
Jeśli - jeśli to dużo danych, a ty nie chcesz mieć dużo
parametrów, teoretycznie nigdy nie powinieneś mają więcej niż pięć parametrów.
Jest tam świetna książka pt. „Called” Czysty kod, który mówi o jakości
kodu i rzeczach, których należy unikać rzeczy, których należy unikać, takie jak zmienne globalne.
Mówi również o tym, jak wiele parametrów, które powinieneś
mieć w swoich funkcjach.
Jeśli funkcja ma 20 parametrów, to wskazanie, że coś jest nie tak,
głównie z powodu tej funkcji prawdopodobnie robi za dużo.
Ale funkcja może mieć dostęp do danych po prostu przekazując do niego dane i możesz
ograniczyć użycie danych globalnych.
I dla funkcji, która zajmuje dużo czasu danych, możesz użyć
czegoś, co nazywa się strukturą, o której nie rozmawialiśmy ale to inny sposób na zrobienie tego.
Więc nie używaj tak dużo danych globalnych w miarę możliwości tylko wtedy, gdy jest to konieczne.
Upewnij się, że rozumiesz kod.
Upewnij się, że dokumentujesz to naprawdę, naprawdę dobrze.
Żeby ktoś inny szukał w kodzie od razu
wie, że używasz danych globalnych i wie, jak wszystko działa.
To jest koncepcja zakresu funkcji.
Powinieneś to zrozumieć, więc zwróć uwagę na wszystkie te slajdy.
Będziemy też używać niektórych dane globalne i niektóre dane lokalne
w naszym następnym wyzwaniu. Dziękuję Ci.