1 00:00:06,650 --> 00:00:09,390 [Powered by Google Translate] JOE MCCORMICK: Så nå skal vi snakke om variabler. 2 00:00:09,390 --> 00:00:13,270 Variabler i informatikk er en måte å lagre en verdi. 3 00:00:13,270 --> 00:00:14,980 Nå, hva og hvordan vi lagrer denne 4 00:00:14,980 --> 00:00:16,210 Verdien er ikke så viktig. 5 00:00:16,210 --> 00:00:19,780 Vi kan ha en verdi som er et ord, som kunne 6 00:00:19,780 --> 00:00:21,170 lagres som en streng. 7 00:00:21,170 --> 00:00:23,160 Eller vi kunne ha noe som er et tegn, 8 00:00:23,160 --> 00:00:24,110 som bokstaven a. 9 00:00:24,110 --> 00:00:26,420 Og det vil bli lagret som en røye. 10 00:00:26,420 --> 00:00:29,660 Vi kunne ha en rekke, som en eller 12, som ville være 11 00:00:29,660 --> 00:00:32,310 lagret som et heltall eller en int. 12 00:00:32,310 --> 00:00:35,940 Da har vi forskjellige ting som en dupp, som kan lagre 13 00:00:35,940 --> 00:00:41,700 ting som 1.01 eller 111,13. 14 00:00:41,700 --> 00:00:43,530 Disse verdiene er alltid kalt foranderlig. 15 00:00:43,530 --> 00:00:46,490 Noe som betyr at hvis vi lagret nummer én i et heltall ved 16 00:00:46,490 --> 00:00:49,490 toppen av et program senere, kan vi endre dette nummeret til 17 00:00:49,490 --> 00:00:51,460 være tre eller sju. 18 00:00:51,460 --> 00:00:53,890 Nå er en lokal variabel hva du vanligvis møter, 19 00:00:53,890 --> 00:00:55,250 når utføre en funksjon. 20 00:00:55,250 --> 00:00:57,260 Så la oss si at du i din viktigste funksjon. 21 00:00:57,260 --> 00:00:59,910 Og du ønsker å opprette en variabel kalt num. 22 00:00:59,910 --> 00:01:01,240 Og vi vil lagre et heltall i den. 23 00:01:01,240 --> 00:01:04,680 Så vi kan si noe sånt som int num = 3. 24 00:01:04,680 --> 00:01:05,319 Nå er det du går. 25 00:01:05,319 --> 00:01:06,830 Du har en lokal variabel. 26 00:01:06,830 --> 00:01:09,670 Nå kan denne variabelen endres senere i hoved 27 00:01:09,670 --> 00:01:13,700 funksjon, ved å si noe sånt som num = 6 eller num = 7. 28 00:01:13,700 --> 00:01:15,940 Men variabelen er fast i 29 00:01:15,940 --> 00:01:18,320 omfanget av denne funksjonen. 30 00:01:18,320 --> 00:01:21,690 Og omfanget starter typisk med krøllete spenne på 31 00:01:21,690 --> 00:01:23,990 begynnelsen av hoved-og slutter med den krøllete seler som 32 00:01:23,990 --> 00:01:26,230 stenger ute den viktigste funksjonen. 33 00:01:26,230 --> 00:01:29,610 Og denne lokale variabelen er nå fast i dette området. 34 00:01:29,610 --> 00:01:32,200 Så det kan ikke lenger nås i en annen funksjon, 35 00:01:32,200 --> 00:01:33,950 utenfor den viktigste funksjonen. 36 00:01:33,950 --> 00:01:36,230 Og når den viktigste funksjonen fullfører gjennomføring og 37 00:01:36,230 --> 00:01:40,460 avkastning, er denne lokale variabel kalt num borte. 38 00:01:40,460 --> 00:01:42,760 Så i motsetning til lokale variabler, har vi noe 39 00:01:42,760 --> 00:01:43,970 kalt globale variabler. 40 00:01:43,970 --> 00:01:46,890 Nå er en global variabel deklarert på toppen av 41 00:01:46,890 --> 00:01:49,860 program og kan nås hvor som helst i programmet. 42 00:01:49,860 --> 00:01:51,805 Så la oss si at du erklært en global variabel på toppen av 43 00:01:51,805 --> 00:01:53,200 programmet, kalt test. 44 00:01:53,200 --> 00:01:54,990 Nå kan denne variabelen nås 45 00:01:54,990 --> 00:01:56,000 hvor som helst i programmet. 46 00:01:56,000 --> 00:01:58,230 Du kan få tilgang til den i din viktigste funksjon eller en funksjon 47 00:01:58,230 --> 00:01:59,300 under det. 48 00:01:59,300 --> 00:02:02,210 Men hvis du noen gang prøvd å lage en lokal variabel i en av 49 00:02:02,210 --> 00:02:04,170 disse funksjoner, med samme navn som 50 00:02:04,170 --> 00:02:05,880 test, det er en konflikt. 51 00:02:05,880 --> 00:02:07,720 Fordi du ikke vet hvilken variabel du vil bruke. 52 00:02:07,720 --> 00:02:09,039 Ønsker du å bruke den globale test, 53 00:02:09,039 --> 00:02:10,910 erklærte øverst programmet? 54 00:02:10,910 --> 00:02:12,495 Eller ønsker du å bruke den lokale variabelen test som 55 00:02:12,495 --> 00:02:14,920 du prøver å skape i denne funksjonen? 56 00:02:14,920 --> 00:02:16,700 Nå er dette en av grunnene til at vi ikke ønsker å 57 00:02:16,700 --> 00:02:18,960 bare bruke globale variabler fritt. 58 00:02:18,960 --> 00:02:21,570 Det er noe som heter cluttering navnerommet. 59 00:02:21,570 --> 00:02:23,940 Selv om du ikke mener å, kan du ved et uhell lager et 60 00:02:23,940 --> 00:02:26,270 lokal variabel, senere i programmet, med samme 61 00:02:26,270 --> 00:02:28,140 navn som den globale variabelen. 62 00:02:28,140 --> 00:02:30,130 Og dette ikke utgjør et stort problem når du arbeider i 63 00:02:30,130 --> 00:02:33,120 10 små, 20, 30-linjers programmer. 64 00:02:33,120 --> 00:02:35,520 Når du har opp til flere tusen linjer med kode, vil du ikke 65 00:02:35,520 --> 00:02:38,740 huske nøyaktig hva du har lagret for global variabel. 66 00:02:38,740 --> 00:02:41,000 Så én ting å vurdere, når du bruker lokal og global 67 00:02:41,000 --> 00:02:43,570 variabler er å tenke på sitt omfang. 68 00:02:43,570 --> 00:02:47,270 Nå, refererer omfang til hvor disse variablene kan brukes i 69 00:02:47,270 --> 00:02:48,500 programmet. 70 00:02:48,500 --> 00:02:51,080 Så en global variabel har det som kalles global omfang, 71 00:02:51,080 --> 00:02:53,820 noe som betyr at det kan brukes hvor som helst i programmet. 72 00:02:53,820 --> 00:02:56,860 Når du initialisere den variabelen, kan den brukes i 73 00:02:56,860 --> 00:03:00,530 noen funksjon, enten det er den viktigste funksjonen eller 74 00:03:00,530 --> 00:03:03,780 funksjon 10 funksjoner ned, kalt foo10. 75 00:03:03,780 --> 00:03:05,160 Det spiller ingen rolle hvor du bruker den. 76 00:03:05,160 --> 00:03:07,490 Men en lokal variabel har bestemt omfang. 77 00:03:07,490 --> 00:03:09,800 Og omfanget av den lokale variable bestemmes av 78 00:03:09,800 --> 00:03:11,030 hvor det blir initialisert. 79 00:03:11,030 --> 00:03:13,680 Nå, er omfanget typisk bestemt av åpningen 80 00:03:13,680 --> 00:03:16,540 spenne av funksjonen at variabelen er deklarert inn, til 81 00:03:16,540 --> 00:03:18,300 lukking spenne av den funksjonen. 82 00:03:18,300 --> 00:03:19,730 Så la oss si at du er i den viktigste funksjonen. 83 00:03:19,730 --> 00:03:21,410 Og du oppretter en variabel. 84 00:03:21,410 --> 00:03:23,110 Men nå, i denne hovedfunksjon, kaller vi en annen 85 00:03:23,110 --> 00:03:24,640 fungere foo. 86 00:03:24,640 --> 00:03:27,070 I funksjonen foo, kan vi ikke kalle variabelen vi bare 87 00:03:27,070 --> 00:03:29,940 opprettet i den viktigste funksjonen, fordi det ikke er i omfang. 88 00:03:29,940 --> 00:03:33,410 Variabelen er bare i omfang innen den viktigste funksjonen. 89 00:03:33,410 --> 00:03:36,540 Så vi kunne bruke det videre, innenfor den viktigste funksjonen, men 90 00:03:36,540 --> 00:03:40,650 ikke innenfor en funksjon som kalles fra den viktigste funksjonen. 91 00:03:40,650 --> 00:03:43,390 Så som bunken og haugen, globale variabler er 92 00:03:43,390 --> 00:03:45,580 lagret i en bestemt del av minnet. 93 00:03:45,580 --> 00:03:47,665 Nå avhenger denne delen av minnet på systemet som 94 00:03:47,665 --> 00:03:48,490 du bruker. 95 00:03:48,490 --> 00:03:50,840 De globale variabler har to separate flekker som de er 96 00:03:50,840 --> 00:03:54,570 lagret, en for initialisert globale variabler, for eksempel hvis 97 00:03:54,570 --> 00:03:58,130 du hadde erklært int test = 5, på toppen av programmet. 98 00:03:58,130 --> 00:04:01,010 Og det andre området er for unitialized globale variabler, 99 00:04:01,010 --> 00:04:03,190 Hvis du nettopp sa, int test, på toppen av programmet og 100 00:04:03,190 --> 00:04:05,040 skulle sette de testvariablene 101 00:04:05,040 --> 00:04:07,626 senere i programmet. 102 00:04:07,626 --> 00:04:10,140 Så nå er jeg kommer til å snakke om noe som kalles # define, 103 00:04:10,140 --> 00:04:13,380 som er en måte å gi en symbolsk navn til en konstant. 104 00:04:13,380 --> 00:04:17,420 Og her har vi et eksempel på et C-program som beregner 105 00:04:17,420 --> 00:04:19,470 arealet av en sirkel. 106 00:04:19,470 --> 00:04:21,690 Og på toppen av programmet vil vi gjøre noe som sier 107 00:04:21,690 --> 00:04:25,830 # Define pi 3.14159. 108 00:04:25,830 --> 00:04:29,330 # Define ikke teknisk skape en global variabel. 109 00:04:29,330 --> 00:04:31,590 Snarere, forteller den kompilatorens preprosessor til 110 00:04:31,590 --> 00:04:34,350 finne og erstatte alle forekomster av pi med 111 00:04:34,350 --> 00:04:37,540 3,14159 før kompilering. 112 00:04:37,540 --> 00:04:39,830 Likevel blir det en nyttig teknikk for å erklære 113 00:04:39,830 --> 00:04:41,510 konstanter, for bruk i hele programmet. 114 00:04:41,510 --> 00:04:44,540 Nå, se på området funksjonen, tar det i en flottør 115 00:04:44,540 --> 00:04:48,150 rad og bare returnerer arealet av en sirkel med at 116 00:04:48,150 --> 00:04:52,920 radius eller pi r squared, eller pi ganger rad ganger rad. 117 00:04:52,920 --> 00:04:56,040 Og det er her # define spiller en viktig rolle. 118 00:04:56,040 --> 00:04:59,270 Fordi kompilatoren vil i utgangspunktet erstatte den pi 119 00:04:59,270 --> 00:05:02,780 symbol med antall 3,14159. 120 00:05:02,780 --> 00:05:05,560 Og så vi ikke trenger å skrive det om og om igjen. 121 00:05:05,560 --> 00:05:08,900 Og senere, hvis vi bestemmer oss for å bruke en mer sifrene pi, la oss 122 00:05:08,900 --> 00:05:12,800 sier 3.1415926, kunne vi bare legge det til toppen av 123 00:05:12,800 --> 00:05:14,330 program og ville ikke trenger å endre det, 124 00:05:14,330 --> 00:05:16,160 senere i programmet. 125 00:05:16,160 --> 00:05:18,240 Dette er en god bruk av # define. 126 00:05:18,240 --> 00:05:20,520 Vi ønsker ikke å lagre pi som en global variabel fordi det 127 00:05:20,520 --> 00:05:21,780 kan endre senere i programmet. 128 00:05:21,780 --> 00:05:23,430 Og vi vet pi endres ikke. 129 00:05:23,430 --> 00:05:25,650 Det er en konstant. 130 00:05:25,650 --> 00:05:28,120 Så dette brytes opp vår temaet globale variabler. 131 00:05:28,120 --> 00:05:29,930 Så i dag snakket vi om forskjellen mellom lokale og 132 00:05:29,930 --> 00:05:32,490 globale variabler, når du bruker dem, avhengig av deres 133 00:05:32,490 --> 00:05:36,660 omfang, og hvorfor ikke bruke globale variabler på vilje 134 00:05:36,660 --> 00:05:39,360 på grunn av rot i navnerommet. 135 00:05:39,360 --> 00:05:40,270 Jeg er Joe McCormick. 136 00:05:40,270 --> 00:05:42,290 Og dette er CS50.