[Recenzja: Quiz 1] [Ali Nahm, Oreoluwa Barbarinsa Lucas Freitas, Rob Bowden] [Harvard University] [To jest CS50.] [CS50.TV] [Lucas Freitas] Witam wszystkich. To jest ocena za quiz 1. Podobnie jak zrzeczenie się, to jest - mam na myśli, będziemy starać się pokryć tak dużo materiału jak to jest możliwe, ale nie oznacza to, że jedziemy na pokrycie wszystkich rzeczy, które mogą być w quizie 1. Więc upewnij się, że również spojrzeć na wykładzie, sekcje, wszystko, co można. Quiz 1 będzie w środę następną środę. Więc należy się uczyć. To będzie, dość dużo, jak w pierwszym quizie dotyczące jego format, ale to prawdopodobnie będzie o wiele trudniejsze. Przynajmniej w zeszłym roku, kiedy wziął 50, myślałem, że to o wiele trudniejsze. Więc studiować wiele. Idę na pokrycie struktur danych i kodowania Huffmana. To jest coś, że wiele osób, że jest złożona, ale mam zamiar spróbować zrobić to tak proste, jak to tylko możliwe. Przede wszystkim to, co chcemy wam wiedzieć o quizie 1 jest zrozumieć koncepcyjne opisy każdej ze struktur danych, które mam zamiar przedstawić. To oznacza, że ​​nie masz do rzeczywistości wdrożenie tabeli mieszania w quizie 1. Nie chcemy, aby wdrożyć cały tabeli mieszania, może spróbujemy aby wdrożyć niektóre funkcje, najczęstsze operacje, ale my nie będziemy was wdrażać wszystko. Dlatego tak ważne jest, aby zrozumieć pojęcia za każdym struktury danych a także, że są w stanie kodować w C, tylko najczęstsze operacje mają dla każdej struktury danych. , A także być w stanie dokonać przeglądu wskaźników i przypisać struktury, ponieważ pojawiają się dużo w tych strukturach. Po pierwsze, związane list. Połączone listy są rzeczywiście bardzo podobne do tablic, ale różnica między połączonej listy i tablicy, Przede wszystkim jest związany lista jest bardzo elastyczny wielkości, natomiast w tablicach trzeba wybrać albo bardzo duży rozmiar tablicy, więc wiesz, że masz zamiar być w stanie przechowywać wszystkie dane w tej tablicy, czy trzeba użyć malloc mieć elastyczną długość tablicy. W połączonych listach jest to bardzo łatwe do po prostu więcej elementów, umieścić więcej elementów w połączonej listy lub usunąć elementy. I rzeczywiście, jeśli nie chcesz, połączonej listy mają być sortowane, można wyszukać i usunąć elementy w czasie stałym, więc O (1) czasu, więc jest to bardzo wygodne. Po prostu trzeba być ostrożnym, aby zawsze pamiętać, aby malloc i wolne węzły, tylko dlatego, że jeśli tego nie zrobisz, będziesz miał wycieki pamięci. Tak połączone listy - definicja węzła jest jak to, co mamy tutaj. Włożyłem int n, ale można przechowywać dane. Więc jeśli chcesz zapisać ciąg, to w porządku. Jeśli chcesz zapisać struct, jest w porządku, podwójne, co chcesz. I po prostu umieścić int n dla tutejszych przykładów. I masz wskaźnik do kolejnego węzła. Tak więc, w zasadzie, powiązana lista zawiera niektóre dane, a następnie zwraca się do kolejnego węzła. Jeśli jest to ostatni element w połączonej listy, to będzie wskazywać na NULL. Tak więc jest na przykład połączony listy. Dobra, teraz zobaczymy, co powinniśmy zrobić, jeśli chcę, aby wstawić element w połączonej listy. Po pierwsze, funkcja będzie wkładka typu void ponieważ nie chcę, aby powrócić niczego. I mam zamiar podjąć int jako argument, bo chcę wiedzieć, co chcę wstawić. Więc co jest pierwszą rzeczą, jaką należy zrobić? Cóż, mam malloc na newnode, tak, to jest pierwsza linia. Jestem po prostu tworząc nowy węzeł do wprowadzenia w połączonej listy. Więc co można zrobić? Dobrze wiemy, że w naszych wdrożeń związanych list w klasie, zawsze stawiamy głowicę w zmiennej globalnej. Więc co możemy zrobić, to zmienić głowę. Mogę zrobić to nowy węzeł będzie nowy szef, i to będzie punkt do poprzedniego szefa. W jaki sposób możemy to zrobić? Pierwszą rzeczą, którą musisz zrobić, to zmienić 'n' w nowym węźle do wartości, , który został przekazany do funkcji. Następnie newnode dalej będzie głowa. Głowica będzie newnode. Więc jest to całkiem proste. Na usunięcie węzła, możemy zrobić to jak - Jeden sposób możemy zrobić to znaczy, w porządku, gdybym chciał usunąć, na przykład, 3, co mogę zrobić, to po prostu punkt poprzedni węzeł do następnego węzła 3. Więc chciałbym po prostu zrobić coś takiego. Ale to, co jest problem z robić? Mam wyciek pamięci, więc nie mam dostępu do numeru 3 więcej. Problem z tym jest to, że nie będę w stanie uwolnić ten węzeł. Zamierzam mieć wyciek pamięci i (niezrozumiałe) będzie mnie nienawidzić. Więc zamiast robić, że powinienem chyba mieć chwilowy wskaźnik. Włożyłem więc temp. To będzie wskazywać na węźle, który chcę usunąć. A następnie można przejść poprzednie węzły do ​​punktu do następnego węzła węzła, który chcę usunąć. I wreszcie mogę uwolnić wskaźnik. Czy muszę zwolnić wskaźnik, który stworzyłem właśnie tam? I nie trzeba, tylko dlatego, że - Różnica polega na tym, że węzeł został stworzony za pomocą malloc, więc jest to w kupie, a ten właśnie ogłosił jako przełącznik NULL w stosie. Więc nie trzeba go uwolnić. Ok. Teraz porozmawiajmy o stosach. Stosy są całkiem proste. Zrobiliśmy Stosy i kolejki w klasie tylko za pomocą tablic, ale należy znać - po prostu być świadomi że można to zrobić również w kolejkach z wykorzystaniem stosów list, jak również związane. Więc jeśli masz tablicę, co byłoby stos? Stosu, po pierwsze, musi mieć wielkość. Trzeba zapisać to, co jest rozmiar stosu, że masz teraz. A także można mieć tablicę, w tym przypadku liczb, ale jeśli chcesz, może to być tablica ciągów, tablica struktury, wszystko, co chcesz zachować. O stosie: różnica między stos i połączonej listy jest to, że w stosie masz tylko dostęp do ostatniego elementu, który został wprowadzony w stosie. Nazywa się ostatnio, pierwsze wyszło. Tak jak masz stos tac, jeśli umieścić zasobnik na wierzchu stosu trzeba najpierw usunąć to tacy mają dostęp do innych podajników. To samo ze stosów. Więc jeśli chcesz, na przykład, dodać element do stosu, co powinienem zrobić? To się nazywa przeć, i to jest całkiem proste. Pierwszą rzeczą, którą musisz zrobić, to sprawdzić, czy rozmiar stosu nie jest większa lub równa zdolności stosu. Bo jeśli jesteś już na pełnych obrotach, nie można jeszcze coś dodać. A jeśli nie, to po prostu trzeba dodać element do stosu. I wreszcie, zwiększyć rozmiar. Więc jest to całkiem proste. Więc po prostu dodać numer 2. A jeśli chcę pop, co oznacza, że ​​chcę, aby usunąć Ostatnim elementem, który został dodany i zwrócić wartość elementu, Pierwszą rzeczą, którą trzeba sprawdzić to, że stos nie jest pusty. Bo jeśli jest pusty, nic nie mogę wrócić. W tym przypadku, wracam -1. W przeciwnym razie, mam zamiar zmniejszyć rozmiar specyfikacji, i powrót numerów (s.size). Dlaczego zmniejszyć rozmiar, a następnie powrót s.size? To dlatego, że w tym przypadku, spec ma rozmiar 4, i chcę wrócić do czwartego elementu, tak? Jednak, co jest indeksem czwartego elementu? Trzy. Ponieważ mam rozmiar - będzie 3, może po prostu wrócić s.numbers (s.size) bo to 3. Więc jest to tylko wskaźnik. Teraz kolejek. Kolejki są prawie to samo. Jedyną różnicą jest to, że zamiast ostatniego, pierwsze wyszło, masz pierwsze weszło, pierwsze wyszło. Prawdopodobnie, jeśli czekasz iść na koncert, nie byłby zadowolony, gdybyś miał stos zamiast kolejki. Będąc ostatnią osobą, która się będzie pierwszą osobą, aby wprowadzić koncert. Prawdopodobnie nie będzie zadowolony. W kolejce, pierwszy człowiek, aby w to również pierwszy człowiek się wydostać. Tak więc w definicji kolejki, poza tym, że rozmiar w tablicy trzeba też mieć głowę, co jest indeks na głowę stosu. Tak więc pierwszym elementem w tej chwili. Enqueue to samo co naciśnięcie na stosach. Jeśli jesteś bardzo naiwny, by po prostu powiedzieć, Cóż, mogę tylko zrobić dokładnie to samo co ja za naciśnięciem. Można po prostu sprawdzić, czy nie jest to poza możliwości. Jeśli jest, to zwraca false, w przeciwnym razie można po prostu wyeksportować nową wartość a następnie zwiększyć rozmiar. Ale dlaczego to jest złe? Chcę zobaczyć ten przykład. Próbuję enqueue kilka rzeczy, a potem idę do usuwania z kolejki i enqueue. Jest wiele komend, ale jest to bardzo proste. Zamierzam enqueue 5, więc dodać 5, a następnie 7, 1, 4, 6, a następnie chcę usunie z niej coś, co oznacza, że ​​mam zamiar usunąć pierwszy element. Więc mam zamiar usunąć numer 3, tak? Pierwszy element. Ok. Teraz gdy próbuję enqueue coś innego, co będzie się działo? Według mojej realizacji, Miałem zamiar umieścić następny numer w q.size indeksu. W takim przypadku, wielkość jest 8 więc wskaźnik 8 będzie tu na ostatniej pozycji. Jeśli próbuję enqueue 1 tu, będę zastępując ostatnią pozycję na numer 1, która jest całkowicie błędne. Co chcę zrobić, to owinąć wokół i przejść do pierwszej pozycji. Może to po prostu powiedzieć, dobrze, muszę tylko sprawdzić jeśli faktycznie mogę umieścić coś tam. Jeśli nie, po prostu powiedzieć, o, nowy pełną zdolność jest faktycznie pojemność - 1, i nie można umieścić tam element. Ale jaki jest problem? Problemem jest to, że jeśli tylko usunie z niej wszystko, co tutaj i staram się dodać coś innego, to po prostu powiedzieć, dobrze, byłeś na pełnych obrotach, co jest 0. Więc kolejki nie ma. Trzeba owinąć wokół i sposobem pakowania wokół że ludzie nauczyli się w wizjonerskich i innych psets używał mod. Możesz spróbować w domu, aby zrozumieć, dlaczego chcesz zrobić q.size + q.head mod pojemność, ale jeśli sprawdzić tutaj, widzimy, że to działa. Tak więc w ostatnim przykładzie q.size wynosiła 8 i głowa była 1, ponieważ była to pozycja o tablicy. Tak będzie 8 + 1, 9. Pojemność mod 9 będzie 0. Byłoby to z indeksem 0. Będziemy w odpowiedniej pozycji. A następnie spróbuj kolejkę w domu. Kilka ważnych rzeczy: spróbować zrozumieć różnicę między stosu i kolejki. W domu, staramy się bardzo znane z wdrażania enqueue, Dequeue, pchnięcie i pop. , A także zrozumieć, kiedy należy użyć każdego z nich. Więc odpocząć przez 10 sekund z bandą stworki. A teraz wróćmy do struktur danych. Hash tabel. Wiele osób bali tabel hash. w Problem zestaw 6, sprawdzanie pisowni. Hash tabele i stara, wiele osób się bać z nich. Myślą, że są one tak trudne do zrozumienia. Tak? [Rob Bowden] Problem zestaw 5. Problem zestaw 5, tak. Dzięki Rob. Tak. Sześć był Huff n 'Puff, tak. Problem zestaw 5 została Sprawdzanie pisowni, i trzeba było użyć tabeli mieszania lub spróbować. Wiele osób uważało, że były one bardzo trudne do zrozumienia, ale to naprawdę bardzo proste. Co to jest tabela hash, w zasadzie? Tabela mieszania jest tablica połączonych listach. Jedyna różnica między tablicą i tabeli mieszania jest to, że w tabeli mieszania masz coś o nazwie funkcja skrótu. Co to jest funkcja skrótu? Nie wiem, czy macie może przeczytać tutaj. To jest przykład tabeli mieszania. Więc widać, że masz tablicę z 31 elementów. I to, co robimy w tabeli mieszania jest mieć funkcji skrótu że zamierza tłumaczyć klucz, każdy int do indeksu. Jeśli, na przykład, jeśli chcesz wybrać dla B. Harrison Chciałbym umieścić B. Harrison w moich funkcji skrótu, i funkcja skrótu wróci 24. Tak, wiem, że chcesz przechowywać B. Harrison w 24. Tak, że jest różnica między tylko o tablicę i posiadające tabeli mieszania. W tabeli mieszania będziesz mieć funkcję, która jest ci powiedzieć gdzie do przechowywania danych, które chcesz przechowywać. Dla funkcji skrótu, chcesz wyglądać na funkcji skrótu że jest deterministyczny i dobrze rozmieszczone. Jak widać tutaj, widać, że wiele danych, które chciałem sklepie faktycznie 19 zamiast korzystać z 31 i 30 i 29, które były za darmo. Więc funkcja skrótu, że kiedyś nie było bardzo dobrze rozmieszczone. Kiedy mówimy, dobrze rozdzielone, to znaczy, że chcemy mieć, w przybliżeniu, co najmniej 1 lub 2 dla każdego - podobne, różnica 1 lub 2 dla każdego z indeksów w tablicach. Chcesz mieć z grubsza taką samą liczbę elementów w każdej połączonej listy w tablicy. I jest to łatwe do sprawdzenia, czy jest to ważne w tabeli mieszania, zobaczyć jak tabele mieszania. Wtedy drzewa. To jest drzewo. Drzewa w informatyce są do góry nogami z jakiegoś powodu. Więc tu masz korzeń drzewa, a następnie liście. Należy tylko wiedzieć, nomenklaturę dla rodziców i dziecka. Każdy węzeł ma swoje dzieci, które są węzły, które są poniżej dominującej. Tak więc, na przykład, 2 ma być dominująca na 3 i na inne dziecko tam, natomiast 3 będzie rodzicem dla 1 i inne dzieci, które są tam. I 1 będzie 3 na dziecko i tak dalej. Mamy coś dużo bardziej interesujące, zwany wyszukiwanie binarne drzewo, , w którym wszystkie wartości po prawej stronie węzła będą na prawo, tutaj - po prawej stronie, będą większe niż element korzenia. Więc jeśli mam numer 5 tutaj, wszystkie elementy po prawej stronie będą większe niż 5, a po lewej Wszystkie elementy będą mniej niż 5. Dlaczego jest to przydatne? Cóż, jeśli chcesz sprawdzić, czy numer 7 jest tutaj, na przykład, Po prostu idź do 5 pierwszy i mam zamiar zobaczyć, jest 7 większa lub mniejsza niż 5? To jest większy, więc wiem, że będzie musiał być po prawej stronie drzewa. Więc mam dużo mniej rzeczy do obejrzenia. W realizacji wyszukiwania binarnego drzewa, węzeł, jestem po prostu będzie mieć dane, tak int n; można również ciąg lub cokolwiek chcesz. Musisz tylko uważać na określenie tego, co jest większe, co jest mniej. Więc jeśli miał łańcuchy, na przykład, można zdefiniować że wszystkie te rzeczy, po prawej stronie będziemy mieć większą długość, lewej będziemy mieć niższe długości, więc jest to naprawdę zależy od ciebie. W jaki sposób można wdrożyć znaleźć dla BST? Pierwszą rzeczą, jaką musimy zrobić, to sprawdzić, czy korzeń jest NULL. Jeżeli jest to wartość NULL, to znaczy, że coś tam nie ma dlatego, że nie mają nawet drzewa, prawda? Więc return false. W przeciwnym razie, mam zamiar sprawdzić, czy liczba jest większa niż wartość w korzeniu. Zamierzam spróbować znaleźć element na prawo drzewa. Widać, że używam tu rekursji. A następnie, jeśli jest to mniej, będę patrzeć w lewo. I wreszcie, w przeciwnym razie, jeśli nie jest mniejsza czy większa, oznacza to, że jest to wartość sama w sobie. Więc po prostu wrócić prawdziwe. Widać tutaj, że kiedyś, jeśli, jeśli, jeśli. I pamiętaj, że w quizie 0, mieliśmy problem, który miał, jeśli, jeśli, jeśli, i miałeś znaleźć nieefektywność, i nieefektywność, że użyłeś jeśli. Nie powinno być stosowane w przypadku, if, else if i else. Tak więc, należy użyć innego, jeśli i else if i jeszcze tutaj? Czy ktoś - tak? [Mówiąc Student, niesłyszalne] To jest doskonałe. Tak, ona mówi, że to nie ma znaczenia, tylko dlatego, nieefektywność, że mieliśmy przed było to, że, ponieważ, być może, jeśli jakiś warunek został spełniony, Więc trzeba przeprowadzić akcję, ale potem jechaliśmy do sprawdzenia wszystkich innych warunkach. Ale w tym przypadku, to wrócił od razu, więc to nie ma znaczenia. Więc nie trzeba używać if. I wreszcie, porozmawiajmy o próbach który jest najbardziej lubianym. Try to drzewo z tablic. Jest bardzo szybki, aby sprawdzić wartości, ale używa dużo pamięci. I to zazwyczaj filtrować słowa, więc kiedy chcą wprowadzić, na przykład, nie wiem, jak z książki telefonicznej w telefonie i chcesz być w stanie typu B i tylko nazwiska osób, które mają B. To jest bardzo łatwe do wykonania, że ​​za pomocą spróbować, na przykład. Jak zdefiniować węzeł w próbie? Po prostu trzeba mieć bool, który ma być is_word. Stanowi, że wykorzystując wszystkie znaki przed tego węzła, jesteś w stanie utworzyć słowo, i wtedy będziesz miał tablicę wskaźników do węzłów. Widać, że mamy tablicę węzłów nadrzędnych, więc węzeł * tablicę? Tak? Zobaczmy więc, jak to będzie działać. Do sprawdzania pisowni, mamy tablicę 27 elementów, bo mamy wszystkie litery i apostrof. Zanim tu mam zamiar użyć 2, bo chcę, aby móc pisać na forum. Ok. Jest to więc przykład razem. Jeśli po prostu zdefiniować pierwszy węzeł, będę musiał tablicę 2 elementy że są 2 wskaźniki na NULL, więc po prostu umieścić "a" i "b". I mam zamiar mieć bool, który mówi is_word. To będzie false dla pierwszego, tylko dlatego, że wcześniej nie ma żadnych znaków. Tak puste słowo nie jest słowem. Więc to jest fałszywe. Jeśli chcę dodać 'A' do tego słownika, co mam zrobić? Chciałbym po prostu malloc nowy węzeł na 'a', , a następnie dodać swoje słowo na true. Więc to po prostu oznacza, że ​​po "a" będzie prawdą. Ma sens? Następnie, jeśli chcę dodać "BA", będę musiał malloc 1 dla "b", i mam zamiar ustawić wartość logiczną false, bo "b" sam w sobie nie jest słowo. Potem idę do malloc koszu na 'a', więc 'ba', i mam zamiar założyć, że jest to słowo na true. Ponieważ 'ba' to słowo. A potem, jeśli chcę zobaczyć, czy "b" jest w tym słowniku, Mogę pójść do pierwszego, 'b'. Idę w dół, i patrzę na to słowo, i to mówi fałszywe. Więc to nie jest słowo. Jeśli chcę sprawdzić "BA", Chodzę do pierwszej, "b", a następnie przejdź do "a", i widzę, prawda, tak to jest słowo. Ma sens? Wielu ludzi się mylić próbach. Nie? Wreszcie kodowania Huffmana. Huffman kodowanie jest bardzo przydatna aby zaoszczędzić pamięć i kompresja plików tekstowych, tylko dlatego, że wiele razy użyć "a" i "e", na przykład, w dokumentach, ale nie wiem, czy wam używać "q" lub "Z" jak najwięcej. Mając tylko 1 bajt dla każdego znaku, każdy - 256 znaków, że mamy w tabeli ASCII nie jest bardzo optymalna, tylko dlatego, że są pewne znaki, które używają dużo więcej, więc powinieneś użyć mniej pamięci dla tych. Jak używać kodu Huffmana? Musimy zrobić Huffman drzewo.  Drzewo ma węzły Huffman które mają symbol, który ma być w stylu: "a", "b", "c", pisma, co litera masz, częstotliwość, że częstotliwość jest słowo, które pojawia się w tekście, że podczas tworzenia drzewa Huffmana dla, i węzeł będzie wskazywać na lewo drzewa Huffmana oraz inny węzeł, który ma wskazywać na prawo. Więc jak drzewo. Jak zbudować Huffman drzewo? Masz zamiar wybrać 2 węzły, które mają najniższe częstotliwości. Jeśli masz krawat masz zamiar wybrać 2 węzłów , które mają najniższe wartości ASCII, jak również. Potem idziesz do tworzenia nowego drzewa z tych 2 węzłów który będzie miał łączną częstotliwość w węźle nadrzędnym. A potem idziesz do usunięcia 2 dzieci z lasu i zastąpienie ich rodzica. I masz zamiar to powtórzyć, aż masz tylko 1 drzewo w lesie. Zobaczmy więc, jak można zrobić drzewo Huffmana dla ZAMYLA. Widać tutaj, że wszystkie litery mają częstotliwość 1, z wyjątkiem "A", który ma częstotliwość 2. Stworzyłem więc węzły dla wszystkich liter i umieszczone w kolejności wartości ASCII i częstotliwości. Więc jeśli chcę, aby utworzyć pierwszy drzewa, to będzie "L" i "M". Więc to jest tutaj. Częstotliwość pary będzie 2 ponieważ jest to 1 + 1, to następne 2 z najniższych częstotliwości są "Y" i "Z". A potem mam wszystkie z nich są - mają częstotliwość 2. Więc, które z nich są te, które mają najniższą wartość ASCII dla następnej? "A" i "L". Więc utworzyć nowy węzeł, i na koniec, jest 4 do 2, w 2 będzie znajdować się na lewo. I to jest drzewo Huffman. Następnie, jeśli chcę napisać jakiś tekst, jak w systemie binarnym do konwersji do tekstu, za pomocą drzewa Huffmana jest bardzo proste. Na przykład, jeśli powiem, że porusza się po lewej stronie jest 0 i przesunięcie w prawo jest 1, Co to jest, że będzie reprezentował? Tak jak 1, 1, tak, dobrze, dobrze, , a następnie 0, czyli w lewo będzie L, a następnie dodano 1, 0, 0. Tak, 1, 0, więc po prostu 1, 0, ''. , A następnie 0, 1, czyli "Z". , A następnie 1, 0, 0 - nie. 0, 0 będzie "Y", tak leniwy. Więc to wszystko dla mnie, Rob zamiar przejąć. [Rob Bowden] Więc, tydzień 7 rzeczy. Mamy wiele do przejść bardzo szybko. Operatory bitowe, przepełnienie bufora, Biblioteka CS50, to HTML, HTTP, CSS. Wszystko w jak 15 do 20 minut. Operatory bitowe. Istnieje 6 z nich, że trzeba wiedzieć. Bitowe i bitowe lub, XOR, przesunięcie w lewo, w prawo zmiany, i nie. Prawy shift i nie ledwo widział w wykładzie w ogóle. Pojedziemy na niej szybko, ale to dobrze wiedzieć, że są to 6, że istnieje. Pamiętaj, że operatory bitowe są jak gdy zrobisz 3 + 4. Nie masz do czynienia z pliku binarnego z 3 i 4. Z operatorów bitowe są faktycznie do czynienia z poszczególnych bitów liczb 3 i 4. Więc pierwszy, że powiemy to bitowe nie, i wszystko co robi to odwrócić wszystkie bity. Więc tutaj, jeśli piszesz to w C, możesz napisać to nie jak ~ 11011 lub cokolwiek, by napisać, że lubię ~ 4, a potem to odwrócić reprezentacja binarna 4. Więc tutaj, ~ z pewnej liczby binarnej 1101101 zamierza dokładnie przerzucić wszystkie 1 do 0 i wszystkie 0 do 1 roku. Jak mówię nie, częste korzystanie z tego, i zobaczymy go w kawałku, to jak chcemy wymyślić jakiś numer gdzie wszystkie bity są 1, z wyjątkiem jednego z nich. Tak to zwykle łatwiejsze do wyrażenia numeru gdzie tylko, że jeden bit jest ustawiony, a następnie podjąć ~ go, więc co drugi bit jest ustawiony, z wyjątkiem tego jednego. Więc to, co mamy zamiar używać więcej za chwilę. Bitowe lub. Oto 2 binarne numery, a te 2 numery są bardzo reprezentatywne, ponieważ stanowią one co możliwe Kombinacja bitów można trzeba operować. Tutaj, kiedy or'd każdy bit, jesteśmy po prostu będzie porównać prosto w dół. Tak więc na lewym boku mamy 1 i 1. Kiedy bitowym | tych, co ja mam dostać? Jeden. Następnie bitowym | 0 i 1 ma dać mi? Jeden. Bitowe 1 i 0 to będzie to samo, jeden. Bitowe 0 | 0 ma dać mi 0. Tak tylko wówczas, gdy pojawia się w 0 0 | 0 sprawa. A może myślisz, że tak samo, jak logiczne RNO. Więc jeśli uważasz, że z 1 i 0 jako prawdziwe, jak fałszywe, to samo odnosi się tutaj. Więc prawda, czy prawda jest prawdą, prawda czy fałsz, jest prawdą. Fałszywe lub prawdziwe jest prawdziwe, nieprawdziwe lub fałszywe jest jedyną rzeczą, która jest w rzeczywistości fałszywa. Oto przykład, który należy wiedzieć jako całkiem dobry przykład, gdy używane są Operatory bitowe. Tutaj, jeśli kapitał lub "A" z OX20, i będziemy patrzeć na to w sekundę, mamy coś. A jeśli my lub małe "a" z OX20, mamy coś. Warto więc wyciągnąć tabeli ASCII. Ok. Tutaj widzimy, że "A" jest - tutaj mamy "A" jest dziesiętnym 65. Ale pójdę z system szesnastkowy, który jest Ox41. Całkiem pewien, że widział go w klasie. Myślę, że widzieliśmy go w klasie , że jest to dość łatwe do konwersji z postaci szesnastkowej na dwójkową. Więc, jeśli chcesz umieścić 4 do binarnego, że po prostu będzie 0100. To jest 1 w miejsce, miejsce 2, w miejsce 4, więc jest to 4. Wtedy mogę gp 1 do binarnego, który jest będzie 0001. I tak to będzie przedstawienie "A" w formacie binarnym. Biorąc małe litery "a", to teraz dzieje się Ox61, gdzie podział się one w jego binarny, więc 6 - Niech rzeczywiście to zrobić - to nie ma gumkę? Gumka. Ox61. Więc podział 6 do binarnego będzie 0 + 4 + 2 + 0. I podział 1 będzie 0001. Patrząc na różnicę między tymi 2, widzimy, że jedyna różnica między małymi literami oraz kapitałowym "A" to jest jeden bit. Więc wracając do tego - w porządku. Wracając do tego, jeśli spojrzymy na to, co jest nieco OX20, więc podział OX20 w jego binarny, jest 0010, 0000. OX20, tylko nieco, że jest ustawiony to nieco, że mamy do czynienia z, z przełączaniem między kapitałem i małe litery "A". Jeśli ja lub "A", która to jest jeden, '', jeśli ja lub "A" z OX20, co ja mam dostać? [Student, niesłyszalne] małe litery 'a', bo to będzie odwrócić ten bit na 1. I gdybym lub "a" z OX20, co ja mam dostać? Małe litery, bo po prostu oring '' z OX20, Jestem po prostu będzie oring ten jeden bit na 1, jest to już 1, więc to nie ma znaczenia. Więc mamy "A" i "a". I bitowe. Ponownie, możemy myśleć o tym, jak nasz logiczny i odpowiednika. Po lewej stronie mamy prawdziwe i prawdziwe. To będzie prawdziwe, i dla wszystkich przypadków, prawdziwe lub fałszywe i prawdziwe i fałszywe, czy fałszywe i fałsz, żadna z tych rzeczy nie jest prawdą. Tak więc to, co w końcu się od 1000. Więc teraz, tutaj, tutaj, gdzie Użyłem wierny bitowe nie, gdzie mieliśmy OX20. Więc to jest OX20. Teraz to, co chcę zrobić, bitowe ~ z OX20. Że zamierza odwrócić wszystkie bity. Więc mam 1101, 1111. I tak '"anded z ~ OX20 zamierza dać mi, co? Tylko nieco naprawdę musimy myśleć o tym jednym, gdyż jeśli wszystkie z tych bitów jest ustawiony na 1, wtedy dostaniesz dokładnie to, co "było, z wyjątkiem, być może, co to trochę jest. Bo jeśli to było 1, teraz to będzie ustawiony na 0, bo co to jest, anded z tym będzie 0. Tak więc to, co jest '' & ~ OX20 zamiar dać mi? [Studenci odpowiedzieć, niesłyszalne] A co to jest "" i - to jest "A". I to, co jest '' & ~ OX20 zamiar dać mi? "A." Ponieważ jest aktualnie 1. Anding z tym 0 zamierza zrobić to 0, i teraz mamy zamiar dostać 'A'. Obie są "," i ostatni, ale nie najmniej tego typu, mamy XOR. Jest to bardzo podobne, lub chyba oznacza to wyłącznie lub. To jak to, co zwykle uważamy za lub w rzeczywistym świecie. Tak zrobić albo "x" lub "y", ale nie obu. Tutaj 1 ^ 1 będzie 0. Bo prawda, to jest - to nie działa, jak również z logiczną true i false jako bitowe & oraz czy, ale prawdziwe ^ prawda jest fałszywa. Bo my tylko chcemy powrócić true, jeśli tylko jeden z nich jest prawdziwa. Więc 1 ^ 1 jest 0. Co o 0 ^ 1? Jest 1. 1 ^ 0 ma wartość 1, 0 ^ 0 0.. Tak, w każdych okolicznościach, 0 bitowe coś 0 będzie 0. 1 0 bitowe coś bitowe 1 lub 0, czy to | lub ^, to będzie 1, a jeśli jest to i to będzie 0. I tylko wówczas, gdy 1 bitowe 1 nie jest 1 to z wyłącznym lub. To jest 0110. Więc teraz, za pomocą XOR - tak, jesteśmy z powrotem w 20. '' ^ OX20 jest te 2 bity mamy porównanie. Więc 1 ^ 0 zamierza dać mi co? Jeden. '' ^ OX20 zamierza dać mi? Małe litery. '' ^ OX20 zamierza dać mi? A. Kapitał Bo co to robi, to XORing z OX20 Rzut co skutecznie ten bit jest. Jeśli jest to 0, to teraz stanie się 1. Ponieważ jest 1, 1 ^ 1 0.. Tak więc nasz "" stała się "A", a nasz "" stała się "". Więc XOR jest naprawdę wygodny sposób po prostu przerzucanie sprawę. Chcesz po prostu iteracyjne nad ciąg liter i zastępców przypadek każdego pojedynczego znaku, po prostu XOR wszystko z OX20. Teraz mamy lewy SHIFT. Przesunięcie w lewo jest po prostu będzie, w zasadzie, wcisnąć wszystkie numery w, lub w lewo, a następnie włóż 0 za nimi stoi. Więc tutaj mamy 00.001.101. Jedziemy do pchania 3 0 w od prawej, i otrzymujemy 01101000. W zakresie nonbinary, widzimy, że tak naprawdę do czynienia 13 przesuwany w lewo o 3, co daje nam 104. Więc przesunięcie w lewo, widzimy tutaj, x << y jest zasadniczo x * 2 ^ r. 13 * 2 ^ 3, 2 ^ 3 to 8 tak 13 * 8 104. Jeśli po prostu myśleć o dwójkowy Ogólnie, jak każdej cyfry, jeśli zaczniemy od prawej, to jest miejsce na 1, to miejsce na 2, a następnie miejsce na 4 za. Tak, popychając w 0-tych z prawej, jesteśmy po prostu pcha rzeczy, które były w miejscu, do tego 4 na 8 miejscu, w i rzeczy, które były na miejscu przez 8 do 16 w miejscu. Każda zmiana tylko mnoży przez 2. Tak? [Student] Co się stanie, jeśli przesunięty o 5? [Bowden] Jeśli przesunięty o 5 to po prostu stracić cyfr. Nieuchronnie, jest to samo. Jak liczby całkowite są tylko 32 bity, więc jeśli dodać 2 bardzo duże liczby całkowite, to po prostu nie mieści się w postaci liczby całkowitej. Więc to samo tutaj. Jeśli przesunięty o 5, my po prostu stracić tego. A to niby co mam na myśli przez "mniej więcej" gdzie jeśli przesunięcie zbyt daleko, można stracić bitów. Prawy shift będzie odwrotnie, gdzie mamy zamiar wpakować 0-tych od końca, i dla naszych celów, wypełnij 0-tych z lewej. Tak to robi, my po prostu odwrócenie tego, co już zrobione. I widzimy, że trzy 0 jest na prawo właśnie spadł, i popchnęły 1101 całą drogę w prawo. Ten sposób 104 3, który jest w praktyce, x / 2 ^ y. Więc teraz, tutaj, to podobny pomysł. Dlaczego jest to tak mniej więcej x / 2 ^ r, a nie faktycznie x / 2 ^ r? Bo gdybym przesunął się o 4, bym stracił 1. Zasadniczo, co myślisz, myśl tylko o podziale całkowitej w ogóle. Tak więc, tak jak 5/2 wynosi 2. To nie jest 2.5. To ten sam pomysł tutaj. Kiedy dzielimy przez 2, możemy stracić nieparzyste bity po drodze. Więc teraz - to jest to dla bitowe. To wszystko, co trzeba wiedzieć. Zapamiętaj przypadków użycia widzieliśmy w klasie, jak maska ​​bitów jest użyteczne dla operatorów bitowe, lub użyć ich do masek bitowych. Litery i małe litery, konwersja jest dość prototypowy przykład. Dobra, przepełnienia bufora. Każdy, kto pamięta, co było nie tak z tej funkcji? Zauważ, zadeklarowaliśmy tablicę 12 bajtów, 12 znaków, a następnie kopiujemy do naszego bufora 12 znaków cała kreskowych ciąg. Więc jaki jest problem? Magiczna liczba 12 powinna prawie natychmiast wyskoczy jak - dlaczego 12? Co zrobić, jeśli dzieje się bar więcej niż 12 znaków? Co zrobić, jeśli bar jest miliony znaków? Tutaj problem jest memcpy. Jeśli pasek jest wystarczająco długi, to po prostu całkowicie - "c", "c" nie obchodzi mnie, że to było tylko 12 znaków; "C" nie obchodzi mnie, że to nie może się zmieścić, że wiele bajtów. To po prostu całkowicie zastąpić char, 12 bajtów mamy przeznaczone na to, a wszystko to w pamięci przeszłość, że w rzeczywistości nie należą do tego bufora z tym, co bar ciąg jest. Więc to był obraz widzieliśmy w klasie gdzie mamy nasz stos dorastania. Należy stosować się do tych zdjęć i zapoznania się z nimi ponownie. Mamy nasz stos dorastanie, adresy pamięci zaczynają się od 0 w górę i rośnie w dół, aby jak 4000000000 na dole. Mamy tablicy 'c' gdzieś w pamięci, następnie mamy wskaźnik do zablokowania tuż pod nim, a potem mamy to zapisane w naszej wskaźniki ramki i stosu adres powrotu rutyny w naszej macierzystej. Pamiętaj, co adres zwrotny jest? To jest, gdy głównym wywołuje funkcję foo, bar wywołuje funkcję, nieuchronnie, bar zyski. Więc kiedy wraca bar, muszą wiedzieć, że wraca do foo, że nazwie go. Więc adres zwrotny jest adres funkcji, że ma wrócić do po opuszczeniu funkcji. Dlatego, że jest ważne dla atakami przepełnienia bufora, ponieważ, wygodnie, hakerzy to zmienić adres zwrotny. Zamiast iść do foo, mam zamiar wrócić tam, gdzie haker chce mi wracać. I wygodnie, gdzie haker często chce wrócić do jest początek bufora, który pierwotnie miał. Więc zauważyć, ponownie, little Indian. Urządzenie jest przykładem Mała systemu indyjskiego, więc całkowitą lub wskaźnik jest przechowywany z bajtów odwróconych. Więc tutaj widzimy - to jest? Tak. Widzimy Ox80, OxC0, Ox35, OxO8. Zapamiętaj cyfry w systemie szesnastkowym? Nie odwracać cyfr szesnastkowych w Little Indian, bo 2 cyfry szesnastkowe składają się na jeden bajt, a my odwrócenia bajtów. Dlatego nie należy przechowywać, jak, 80530CO8. We przechowywania natomiast każdą parę 2 cyfr, zaczynając od prawej strony. Adres ten oznacza na adres początku naszego bufora, że ​​faktycznie chcieliśmy kopiować do w pierwszej kolejności. Dlatego, że jest przydatna, ponieważ, co oznacza, że ​​napastnik się stało, zamiast ciąg, który był po prostu nieszkodliwe ciąg jak ich nazwę czy coś, co, jeśli zamiast tego, że łańcuch to tylko niektóre dowolnego kodu że zrobił to, co chcieli zrobić? Więc może - nie mogę myśleć o jakiejkolwiek chłodnym kodu. To może być cokolwiek, choć. Każdy kod katastrofalne. Gdyby chcieli, mogliby po prostu zrobić coś na segmenty błędów, ale to nie miałoby sensu. Zwykle zrobić włamać się systemu. Ok. Biblioteka CS50. To jest, w zasadzie, getInt, getString, że wszystkie te funkcje przewidziane dla Ciebie. Więc mamy char * napis, i to jest abstrakcja, że ​​zmiótł w pewnym momencie w trakcie semestru. Pamiętaj, że łańcuch jest tylko tablica znaków. Więc tutaj widzimy skróconą wersję GetString. Należy spojrzeć wstecz na to, aby pamiętać, jak to jest w rzeczywistości realizowana. Kluczowe jest, zauważyć możemy uzyskać w jednym znaku naraz ze standardem, który jest tak samo jak my, wpisując na klawiaturze. Więc jeden znak na raz, a jeśli mamy zbyt wiele znaków, więc gdy n + 1 jest większa niż pojemności to musimy zwiększyć pojemność naszego bufora. Więc tutaj mamy podwojenie wielkości naszego bufora. I że wciąż dzieje, mamy wstawić znak do naszego bufora do czasu otrzymania nowej linii lub koniec pliku lub cokolwiek, w takim przypadku, że skończyliśmy z łańcucha, a następnie rzeczywistego GetString kurczy się pamięć, jak gdybyśmy przydzielone zbyt dużo pamięci to będzie wrócić i kurczą się nieco. Więc nie pokazać, ale główną ideą jest musi odczytać w jednej postaci w czasie. Nie można po prostu czytać w całej rzeczy na raz, ponieważ ich bufora tylko określoną wielkość. Więc jeśli ciąg znaków, który próbuje wstawić do bufora jest zbyt duży, to będzie przelewać. Więc tutaj mamy temu zapobiec tylko przez czytanie w jednym znaku w czasie i rośnie, gdy musimy. Więc getInt i inne funkcje biblioteczne CS50 mają tendencję do używania GetString w ich implementacji. Więc tu podkreślone ważne rzeczy. Wzywa GetString uzyskać ciąg. Jeśli nie udało się powrócić getString pamięci pamiętaj, że getString mallocs coś, więc kiedy tylko zadzwonić GetString nie należy (niezrozumiałe) uwolnić ten ciąg, że masz. Więc, jeśli nie malloc coś, wracamy INT_MAX jak tylko flagi, które, hej, nie byliśmy rzeczywiście w stanie uzyskać całkowitą. Należy zignorować cokolwiek wrócę do ciebie, lub nie należy traktować tego jako ważny wkład. Wreszcie, przy założeniu, że nie uda, możemy użyć tej specjalnej sscanf z flagą, co oznacza, po pierwsze dopasować liczbę całkowitą następnie wszystkie znaki po tej liczby całkowitej. Więc zauważyć, że ma on wynosić 1. Tak jak wielu powraca sscanf mecze, jeśli pomyślnie wykonane? To zwraca 1, jeśli z powodzeniem dopasować liczbę całkowitą, to zwraca 0, jeśli nie pasuje do liczby całkowitej, i powróci 2 jeśli dopasowane całkowitą następnie charakterem. Więc zauważyć, że ponownie, jeśli pasuje do niczego, ale 1. Jeśli więc wprowadzone 1, 2, 3, C lub 1, 2, 3, X następnie 1, 2, 3 będą przechowywane w całkowitej, X będą przechowywane w postaci, sscanf zwróci 2, a my ponownie, ponieważ chcemy tylko liczbę całkowitą. Szybko dmuchanie przez HTML, HTTP, CSS. Hypertext Markup Language jest struktura i semantyka z sieci. Oto przykład z wykładu, gdzie mamy znaczniki HTML. Mamy tagi głowy, znaczniki ciała, mamy przykłady pustych znaczników, w których faktycznie nie mają początku i blisko znacznika, musimy po prostu link i zdjęcie. Nie ma zamykająca znacznik obrazu, jest tylko jeden tag, który dokonuje wszystkiego tag musi zrobić. Link jest przykładem, zobaczymy, jak link do CSS Skrypt jest przykładem tego, jak można połączyć z zewnętrznym JavaScript. Jest to dość proste, i pamiętaj, HTML nie jest językiem programowania. Tutaj należy pamiętać, w jaki sposób zdefiniować formularz lub przynajmniej, co to zrobi? Taka forma ma działania i metody. Metody będzie zawsze tylko zobaczyć to GET i POST. Więc jest wersja, gdzie sprawa zostanie umieszczona w adresie URL. POST, gdzie nie jest umieścić w adresie URL. Zamiast tego, wszystkie dane z formularza dodaje bardziej ukryty w żądaniu HTTP. Więc, gdzie działanie określa idzie żądania HTTP. Gdzie to będzie to google.com / search. Metoda. Zapamiętaj różnice między GET i POST, i, po prostu powiedzieć, na przykład, jeśli chcesz, aby zakładki coś. Nigdy nie będzie w stanie zakładki URL POST ponieważ dane nie są zawarte w adresie URL. HTTP, teraz, jest HyperText Transfer Protocol. HyperText Transfer Protocol, można się spodziewać, że do transferu Hypertext Markup Language, i to robi. Ale także przenosi żadnych obrazów można znaleźć w internecie, wszelkie pliki do pobrania wprowadzone początku jako żądania HTTP. Więc HTTP jest tylko językiem World Wide Web. I tutaj trzeba rozpoznać ten rodzaj żądania HTTP. Tutaj HTTP/1.1 na stronie po prostu mówi, że jest to wersja protokołu używam. To dość dużo zawsze będzie HTTP/1.1, jak będziesz go zobaczyć. Następnie widzimy, że jest to GET, POST jest alternatywa, że ​​można zobaczyć. I adres URL, który starałem się wizyta www.google.com/search?q = bla, bla, bla. Więc pamiętaj, że to znak zapytania q = bla bla bla, jest to rodzaj rzeczy, który jest przedstawiony przez postać. Odpowiedź może wrócić do mnie będzie wyglądać mniej więcej tak. I znowu, wychodząc z protokołem, który zamierza się, że następnie kod stanu. Tutaj jest to 200 OK. I w końcu, strona internetowa, która faktycznie poprosił nastąpi. Możliwe, kod statusu można zobaczyć, a trzeba wiedzieć, kilka z nich. 200 OK, masz prawdopodobnie widział. 403 Forbidden, 404 Not Found, 500 Internal Server Error jest zazwyczaj, jeśli przejdziesz do strony internetowej, a coś jest uszkodzone lub ich awarii kodu PHP, podczas gdy w urządzeniu mamy tak duże pole pomarańczowy że przychodzi i mówi, jak coś jest nie tak, ten kod nie działa czy ta funkcja jest złe. Zazwyczaj strony internetowe nie chcą Państwo wiedzieć, jakie funkcje są rzeczywiście złe, więc zamiast tego po prostu dać 500 wewnętrzne błędy serwera. TCP / IP jest 1 warstwa pod HTTP. Pamiętaj, że nie ma Internetu poza World Wide Web. Podobnie jak w przypadku grania w gry sieciowe, które nie przechodzi przez protokół HTTP, to będzie poprzez różne - to jeszcze za pomocą Internetu, ale nie używa protokołu HTTP. HTTP jest tylko jeden przykład oparty na protokole TCP / IP. IP dosłownie oznacza Internet Protocol. Każdy komputer ma adres IP, są te rzeczy, 4-cyfrowy jak 192.168.2.1, czy cokolwiek, to wydaje się być lokalna. Ale to jest wzór adresu IP. Więc DNS, Domain Name Service, to co przekłada rzeczy jak google.com do faktycznego adresu IP. Więc jeśli wpiszesz ten adres IP do adresu URL, że przyniesie ci to Google, ale raczej nie pamiętać tych rzeczy. Masz tendencję do zapamiętania google.com zamiast. Ostatnią rzeczą, mamy to porty, w których jest to część TCP IP. TCP nie więcej. Pomyśl o tym, jak, masz swój bieg przeglądarka. Może masz jakieś działającej aplikacji e-mail; może masz jakiś inny program, który używa programu Internet. Wszyscy muszą mieć dostęp do Internetu, ale komputer ma tylko 1 kartę WiFi lub cokolwiek. Więc porty są sposobem, że jesteśmy w stanie podzielić się jak te aplikacje są w stanie korzystać z Internetu. Każdy wniosek otrzymuje 1 konkretny port, który może nasłuchiwać, i domyślnie HTTP korzysta z portu 80. Niektóre usługi e-mail, korzystać z 25. Te niskie numerach wydają się być zarezerwowane. Jesteś zwykle w stanie uzyskać wyższe numerach te dla siebie. CSS, Cascading Style Sheets. My style stron internetowych z CSS, a nie HTML. Są 3 miejsca, które można umieścić swój CSS. To może być w jednej linii, pomiędzy znacznikami stylu, całkowicie lub w osobnym pliku, a następnie połączone w. I tu jest właśnie przykład CSS. Należy uznać ten wzór, gdzie Pierwszy przykład mamy dopasowanie znacznik ciała i tutaj mamy do centrowania znacznika body. Drugi przykład, że są dopasowane rzeczy o ID stopki, a my stosowania niektórych stylów do tego. Zauważ, że ID stopki wyrównuje tekst do lewej, natomiast centrum ciała wyrównuje tekst. Stopka jest wewnątrz ciała. To będzie, zamiast tego, text-align w lewo, chociaż ciało mówi centrum text-align. Jest cała część kaskadowy z niego. Można mieć - można określić style dla ciała, i rzeczy w organizmie można określić bardziej szczegółowe style, i wszystko działa zgodnie z oczekiwaniami. Specyfikatory CSS bardziej szczegółowe mają pierwszeństwo. Myślę, że to jest to. [Ali Nahm] Witam wszystkich. Gdybym tylko mógł dostać swoją uwagę. Jestem Ali i mam zamiar przejść przez PHP i SQL naprawdę szybko. Więc możemy zacząć. PHP to skrót od PHP: Hypertext Preprocessor. I jak powinna wszyscy wiecie, że to język skryptów po stronie serwera, i używamy go do tylnego końca stron internetowych, i jak to robi wiele obliczeń, części zza kulis. Składnia. To nie tak, C, niespodzianka, niespodzianka. Zawsze ma się rozpocząć, jeśli widzisz, - Nie mogę iść do przodu. Widać potrzebne są nowe rodzaje szelki i to trzeba także PHP?. Że zawsze, jak masz do ramki tekstu PHP, kod PHP. Więc to nie może być tak, jak C, w którym rodzaj umieścić go na pierwszym. Trzeba zawsze otaczają go. A teraz, głównym składnia jest, że wszystkie zmienne muszą zaczynać się od znaku $. Musisz to zrobić, gdy jesteś ich definiowania, co musisz zrobić, to jeśli masz na myśli do nich później. Zawsze trzeba to $. To Twój nowy najlepszy przyjaciel, bardzo dużo. Nie - w przeciwieństwie do C, nie trzeba umieścić co to zmienna typu jest. Tak więc, podczas gdy ty potrzebujesz $, nie trzeba umieścić, jak, int x lub ciąg r, etcetera, etcetera. Tak niewielka różnica. W związku z tym oznacza, że ​​PHP typu słabo. PHP jest językiem typu słabo, i to słabo wpisane zmienne. Innymi słowy, oznacza to, że można przełączać się pomiędzy różnymi rodzajami typów zmiennych. Możesz zapisać numer 1 jako int, Można także zapisać jako ciąg znaków, i można przechowywać go jako pływaka, i wszystko będzie, że numer 1. Nawet jeśli jesteś przechowywania go w różnych formach, to nadal - zmienne typy wciąż trzyma w końcu. Więc jeśli spojrzeć tutaj, jeśli pamiętasz z pset 7, wielu z was zapewne miał problemy z tym. Dwa znaki równości, 3 znaki równości, 4 znaki równości. Dobra, nie ma 4 znaki równości, ale są 2 i 3. Są 2 znaki równości, aby sprawdzić wartości. Można go sprawdzić, różnych typów. Więc jeśli można zobaczyć w pierwszym przykładzie, Mam num_int == num_string. Więc int i ciąg są zarówno technicznie, 1, ale są różne rodzaje. Ale dla podwójnych równych, będzie to nadal przechodzą. Jednakże dla trzyosobowych równych, sprawdza wartość, jak również różne rodzaje. Oznacza to, że to nie przejdzie w tym drugim przypadku, tutaj, gdzie używasz 3 znaki równości zamiast. Więc to jest zasadnicza różnica, że ​​należy wszystko pokazywali teraz. Łączenie String to kolejne istotne, co można użyć w PHP. To w zasadzie tylko to przydatny notacja kropki, i to w jaki sposób można powiązać ze sobą łańcuchy. Więc jeśli masz kota i masz psa i chcesz umieścić dwa ciągi razem, można wykorzystać okres, i że niby jak to działa. Możesz też po prostu umieścić je obok siebie, jak widać tutaj, w dolnej przykład gdzie mam echo ciąg 1, kosmiczny ciąg 2. PHP będzie wiedzieć, aby zastąpić je jako takie. Matryce. Teraz, w PHP, są 2 rodzaje tablic. Możesz mieć regularne tablice, a także można mieć tablice asocjacyjne, i mamy zamiar przejść przez nich teraz. Regularne tablice są właśnie tego w C, i tak masz indeksy, które są numerowane. Teraz mamy tylko zamiar utworzyć i umieścić - tak to jest jak tworzymy pustą tablicę, a następnie jedziemy do umieścić w indeksem 0.. Zamierzamy umieścić numer 6, wartość 6. Widać to na dole tutaj. Where's - pod indeksem 1 zamierzamy umieścić wartość 4, i tak widać jest 6, nie 4, a potem, kiedy drukujesz rzeczy, gdy staramy i wydrukować wartość przechowywaną pod indeksem 0, potem zobaczymy wartość 6 jest drukowane. Fajne? Więc to jest regularne tablice dla Ciebie. Inny sposób można również dodawać rzeczy do regularnych tablic teraz to można po prostu dopisać je na końcu. Oznacza to, że nie trzeba, aby określić konkretny indeks. Możesz zobaczyć liczbę, a następnie w nawiasach kwadratowych nie ma indeks określony. I będzie to wiedzieć - PHP wiedzieć, aby po prostu dodać go do końca listy, kolejnym wolnym miejscu. Więc można zobaczyć 1 tam w tym 0 miejscu, 2 poszedł tam na pierwszym miejscu. 3 idzie - dodaje również tam. Tak, że niby ma sens. Jesteś po prostu stale dodając go, i wtedy, gdy jesteśmy echem indeks numer 1, będzie drukować wartość 2. Następnie mamy tablice, które są Tablice asocjacyjne. Tablice asocjacyjne, zamiast wskaźników liczbowych, to, co robią jest, mają indeksy, które są przez ciąg. Możesz zobaczyć, zamiast - Pozbyłem się wszystkich tych wskaźników numerycznych, i teraz to klucz1, klucz2, key3, a oni w cudzysłów oznaczać, że są wszystkie ciągi. Tak więc możemy mieć tego przykład. Przykładem tego jest to, że mamy tf, i to jest nazwa indeksu. Zamierzamy umieścić "Ali" jako nazwa, w indeksie, kalorie spożywane, możemy umieścić int tym razem zamiast łańcucha, a następnie w m.in. indeksu, możemy umieścić całą tablicę w jej wnętrzu. Więc to jest rodzaj - to podobna koncepcja jak mieliśmy indeksów z numerami, ale teraz możemy zmienić indeksów wokół mieć je jako ciągi znaków zamiast. Możesz też to zrobić, poza tym po prostu robi to indywidualnie, możesz robić to wszystko w jednym kawałku. Więc widać, że TF z tej tablicy, a następnie ustawiamy je wszystkie w jeden olbrzymi kwadratowy zestaw wspornika. Tak, że można przyspieszyć. To jest bardziej stylistycznego wyboru niż nie. Mamy też pętle. W C mamy pętle, które działają w ten sposób. Mieliśmy naszą tablicę i poszliśmy od indeksu 0 do końca listy, i to wszystko wydrukować, prawda? Wyjątkiem jest problem, dla tablic asocjacyjnych, nie muszą wiedzieć, te wskaźniki liczbowe bo teraz mamy indeksy łańcuchowe. Teraz używamy pętli foreach, które znowu, mam nadzieję, że użyte w pset 7. Pętle foreach będzie po prostu wiem, każdy element listy. I to nie musi wiedzieć dokładnie indeks liczbowy, że masz. Więc trzeba składni foreach, więc foreach, umieścić tablicę. Więc moja tablica nazywa pset, a następnie jako, słowo jako, a następnie umieścić tę zmienną tymczasową lokalnej, że masz zamiar używać tylko dla konkretnej rzeczy, która się dzieje posiadać specyficzne - jedno wystąpienie lub jedna część tablicy. Pset num będzie posiadać 1, a następnie być może będzie posiadać numer 6, a następnie będzie ona posiadać numer 2. Ale to na pewno przejść przez każdą pojedynczą wartość, która jest w tej tablicy. Przydatne funkcje, które powinieneś wiedzieć w PHP są wymagają, tak, daje pewność, że jesteś w tym pewne pliki, echo zjazd, pusty. Gorąco polecam spojrzeć na pset 7 i patrzeć na te funkcje. Może trzeba znać tych, więc na pewno wiesz, co dokładnie ci są robią. A teraz mamy zamiar przejść przez zakres naprawdę szybko. W zakresie, w PHP jest trochę funky rzeczy, w przeciwieństwie do C, i tak po prostu się przejść przez to szybko. Więc powiedzmy, że zaczynamy w tym strzałki, które mamy tam. I mamy zamiar zacząć $ i. Więc zmienna "i" będzie 0, a my po prostu się zatrzymać drukowanie jej w tym dużym białym polu tam. Zamierzamy rozpocząć i0, a następnie jedziemy do jej echo. Więc jest 0. A potem będziemy zwiększać go do pętli, i to będzie wartość 1. Jednym z nich jest mniejsza niż 3, więc to będzie przechodzić przez które do pętli, a następnie jedziemy zobaczyć to ponownie drukowane. Zamierzamy zwiększyć go ponownie do 2, i 2 jest mniejsza niż 3, więc ono przechodzi przez pętlę, a my go wydrukować 2. Wtedy będziesz pamiętać, że 3 jest nie mniejsza niż 3, więc będziemy wyrwać się z pętli. Więc teraz mamy odszedł, a następnie będziemy iść do aFunction. Ok. Więc trzeba pamiętać, że ta zmienna, że ​​stworzyliśmy, Zmienna "i", nie jest lokalnym zakresie. To oznacza, że ​​nie jest do pętli lokalnej, i że nadal możemy zmienna dostęp i zmienić później, i to nadal będzie obowiązywać. Więc jeśli się do funkcji teraz, zobaczysz, że my też użyć zmiennej 'i', i zamierzamy zwiększyć "i" + +. Można by pomyśleć, w pierwszym, w oparciu o C, że jest to kopia zmiennej "i". To zupełnie inna sprawa, co jest poprawne. Więc kiedy go wydrukować, będziemy drukować "i" + +, który będzie wydrukować, że 4, a następnie jedziemy do - przepraszam. Następnie idziemy do końca z tej funkcji, i mamy zamiar być w przypadku, gdy strzałka jest teraz. Oznacza to, że to jednak, mimo że funkcja zmienił wartość "I", nie zmieniła się poza funkcji ponieważ funkcja ma osobny zakres. Oznacza to, że gdy echo "i", to nie zmienia się w zakresie funkcji i tak to mamy zamiar ponownie wydrukować 3. Różne rzeczy o zakresie w PHP niż w C. Teraz w PHP i HTML. PHP jest używany do stron internetowych dynamiczny. To sprawia, że ​​rzeczy trochę inaczej. Mamy to różni się od HTML. Z HTML, zawsze wystarczy samo jak statyczne, jak Rob pokazał, mając na uwadze, PHP, możesz zmienić rzeczy na podstawie ich użytkownika. Więc jeśli mam to, ja, "Jesteś zalogowany jako -", a następnie nazwa, i może zmienić nazwę. Więc teraz na imię Józef, i ma "o mnie", ale to mogę też zmienić nazwę, aby Tommy. I to byłoby co innego. Tak więc możemy zmienić różne rzeczy o nim, i pokaże inną zawartość na podstawie nazwy. Więc PHP może trochę zmienić to, co dzieje się w Twojej witrynie. Same here. Wciąż pamiętać, że mają one różne treści, nawet jeśli są technicznie nadal dostępu do tej samej stronie internetowej na powierzchni. Generowania kodu HTML. Są to 2 różne sposoby, że można to zrobić. Więc idziemy przez to teraz. Pierwszy sposób jest, trzeba - tak, przepraszam. Więc po prostu trzeba się z regularnych na pętli w PHP, a następnie echo w PHP i echo z HTML. Za pomocą tego, co Rob pokazał ci skryptu HTML a następnie za pomocą PHP do drukowania tylko wydrukować go na stronie internetowej. Alternatywnym sposobem jest zrobić to tak, jakby oddzielić PHP i HTML. Więc można mieć linię PHP, który rozpoczyna na pętli, to możesz mieć linię HTML w oddzielnej rzeczy, , a następnie w końcu pętli, znowu, z PHP. Więc jest to rodzaj oddzielenia go. Po lewej stronie, można się, że masz wszystko - to tylko 1 kawałek PHP. Po prawej stronie można zobaczyć, że masz linię PHP, masz linię HTML i masz linię PHP ponownie. Więc oddzielenie go w to, co robią. I będziesz pamiętać, że tak czy inaczej, dla jednego z nich, nadal wydrukować obraz, wizerunek, obraz, HTML tak, że wciąż jest drukowany w taki sam sposób. A potem będziesz jeszcze zobaczyć 3 obrazy wyświetlane na swojej stronie. Więc jest to 2 różne sposoby robienia tego samego. Teraz mamy formularze i wnioski. Jak Rob pokazał ci, istnieją formy HTML, a my po prostu wiatr przez to. Masz akcję i masz sposób, a działania rodzaj pokazuje gdzie masz zamiar wysłać go, a to, czy metoda to będzie GET lub POST. I żądanie GET, jak Rob powiedział, to oznacza, że ​​masz zamiar umieścić go w formie i zobaczysz go jako adres URL, natomiast żądanie POST nie będzie widać w adresie URL. Tak niewielka różnica. Jednak jedna rzecz, która jest podobna sprawa jest to, że POST i GET są równie niebezpieczne. Więc można pomyśleć, że tylko dlatego, że nie widać go w URL, co oznacza, że ​​PO jest bardziej bezpieczny, ale nadal można zobaczyć to w twoich ciasteczek w informacji, że jesteś wysyłającego. Więc nie sądzę, że o jeden lub drugi. Inną rzeczą, aby pamiętać, jest to, że również zmienne sekcji. Chłopaki używane to w pset 7, aby uzyskać identyfikator użytkownika. Co się stało, że możesz użyć tej tablicy asocjacyjnej, $ _SESSION, a następnie jesteś w stanie uzyskać dostęp do różnych rzeczy i przechowywać różne rzeczy w poprzek strony. Ostatnia rzeczą jest to, że mamy SQL, Structured Query Language, i to jest język programowania do zarządzania bazami danych. Co dokładnie są bazy danych? Są kolekcje stołów, i każda tabela może mieć podobne rodzaje obiektów. Więc mieliśmy tabelę użytkowników w finansach pset. I dlaczego są one przydatne? Ponieważ jest to sposób na stałe przechowywanie informacji. Jest to sposób na śledzenie i zarządzanie rzeczy rzeczy i rzeczywiście widząc go na różnych stronach i śledzenie. Natomiast jeśli po prostu zapisać je w tym jednym momencie natychmiastowym a następnie użyć go później, nie będzie w stanie uzyskać dostęp do wszystkiego, co masz zapisane. Mamy 4 główne rzeczy, które możemy użyć do poleceń SQL. Mamy SELECT, INSERT, DELETE i aktualizacji. To są bardzo ważne dla wy wiedzieć do quizu. Będziemy szybko przejść wybierz teraz. W zasadzie masz wybór wierszy z bazy danych. Więc jeśli masz, tu - mamy te 2 różne rzeczy, a my chcemy, aby wybrać z tabeli klas gdzie niesamowite - gdzie w kolumnie niesamowite wartość to 1. Więc można zobaczyć tutaj, mamy te 2 rzeczy z nazwą klasy, CS50 i Stat110 i mamy identyfikatory klas i hasło. Więc chcemy wybrać wszystkie te informacje. Następnie można zobaczyć tutaj, że jest to rodzaj zbierając z tego niesamowite kolumny, gdzie wszystkie rzeczy są 1, a następnie, że ma identyfikator klasy, nazwę klasy i hasło, które może wybierać. Jak dokładnie to zrobić w kodzie? Musisz użyć PHP. Tak więc jest to rodzaj, jak PHP i SQL są ze sobą powiązane. Teraz mamy nasz kod, i będziemy używać naszej funkcji kwerendy jak my w pset 7, i mamy zamiar uruchomić zapytanie SQL. Wtedy będziemy mieć - zawsze musimy sprawdzić, czy Row potrójne równe, jeśli fałszywe. Więc jeszcze raz, chcesz sprawdzić, rodzaj i wartość, a następnie, jeśli to nie działa, to chcesz, żeby przepraszać, jak zwykle, jak to zrobiliśmy w pset 7. W przeciwnym razie, chcesz pętli wszystkiego z tych, poręczny foreach pętli, że po prostu poszedł. Teraz, że jesteśmy przelotowego i zrobiliśmy to w przeszłości, załóżmy, że nasze zapytanie minęło, teraz mamy pętli foreach. I pierwszy wiersz ma, więc o to rząd, tutaj, to w pudełku. To będzie wydrukować wszystkie informacje, które to zdobyć. Więc to będzie drukować na dole "Wanna Dowiedz się HTML?" To się dzieje, aby przejść do następnego wiersza, ponieważ jest zakończona pierwsza pętla for, i tak to się dzieje, aby wydrukować drugą linię z nim, który będzie STAT110, Znajdź wszystkie chwile. Ostatnia sprawa jest na SQL luk. Wiem, że David poruszył ten trochę w wykładzie. Można to przeczytać później. To naprawdę zabawne. SQL Injection jest trochę trudne rzeczy. Powiedzmy, że po prostu trzymać się tych zmiennych w prawo w zapytaniu, jak widać w tej pierwszej linii. Tak więc wydaje się w porządku, prawda? Jesteś po prostu wprowadzenie nazwy użytkownika i hasło do Twojego zapytania SQL, a ty chcesz wysyłać je i dostać wszystko, co jest w tabeli danych. To wydaje się dość prosta. Więc powiedzmy, że ktoś kładzie się, o hasło, to czy tekst tutaj - powinien być w czerwonym polu. Więc powiedzmy, że wprowadzone hasło do tego - to jest to, co wpisać. Więc oni wprowadzenie lub "1" = 1. Niby głupie hasło mieć. Teraz po prostu wymienić go i będziesz pamiętać, że w tym zapytaniu SQL teraz, ocenia się zawsze prawdą, bo będziesz pamiętać, że Kwerenda SQL można wybrać wszystkie te informacje albo po prostu mieć 1 = 1. Tak, że zawsze będzie oceniać true. To nie dzieje się naprawdę pracować, bo to oznacza, że ​​haker może włamać się do systemu. Rozwiązaniem tego problemu jest to, że trzeba korzystać z systemu PDO, co oznacza, że ​​trzeba używać znaków zapytania, co jest, co wy używane w pset 7, gdzie masz zamiar używać znaku zapytania w miejscu, w którym chcesz umieścić coś, i wtedy będziesz mieć przecinek, a następnie będziesz musiał potem, po Twojej ciąg, różne zmienne, które mają zastąpić w swoim znakiem zapytania. Więc można tu zauważyć, że teraz mam te czerwone znaki zapytania. Następnie umieścić zmienne po moich strunach, więc wiem, aby zastąpić je w tej kolejności potem. Które sprawią, że jeśli ktoś robi to w ten sposób, i mają lub 1 = 1 sytuację, która zadba, na tylnym końcu, upewnij się, że nie będzie faktycznie złamać zapytanie SQL. Ok, więc to dość dużo, wicher z PHP i SQL. Powodzenia dla wszystkich, a teraz się stanie Oregon [Oreoluwatomiwa Babarinsa] Dobra wszyscy. Czas iść na pewne JavaScript i kilka innych rzeczy, bardzo szybko więc nie trzymać cię dziś w nocy. JavaScript. Tak. JavaScript jest niby fajne, rzekomo. Rzeczy, które naprawdę trzeba wiedzieć o JavaScript, to jest coś w rodzaju po stronie klienta końcowego, co Twoja aplikacja internetowa będzie robić. Jest kilka rzeczy, które po prostu nie chcą się zająć cały czas po stronie serwera. Wszystkie małe interakcje, podkreślając jedno, co coś zniknie. Naprawdę nie chcę rozmawiać z serwerem cały czas na to. I niektóre, że nie jest to nawet możliwe, aby zrobić po stronie serwera. Dlatego trzeba coś JavaScript. Fajne rzeczy o JavaScript: To jest dynamicznie wpisany. Oznacza to, że Twój program nie musi wiedzieć co dokładnie, zmienne są podczas pisania go. To tylko rodzaj zrozumieć to, jak to działa. Inne rzeczy, które są fajne o tym: To język klamra, kręcone co oznacza, że ​​składnia jest podobna do C i PHP. Nie musisz robić wiele przeróbek, kiedy uczysz JavaScript. Tutaj mamy trochę JavaScript. Interesującą rzeczą jest to, że tutaj, jeśli spojrzeć na to, mamy trochę JavaScriptu tam w tagu głowy. Co to jest już w zasadzie tylko to plik JavaScript. To jest jeden sposób można dołączyć JavaScript do programu. Następnie drugi trochę faktycznie niektóre inline JavaScript, bardzo podobny do stylu inline z CSS, i jesteś tylko pisanie kodu bardzo szybko tam. JavaScript ma tablic. Tylko kolejny sposób, aby zachować dane w okolicy, bardzo przydatne. Bardzo ładne i łatwe składni. Używać nawiasów kwadratowych, aby uzyskać dostęp wszystko i utrzymać wszystko razem. Nic nie jest zbyt skomplikowane. Świetną rzeczą JavaScript i ogólnie języków skryptowych jest to, że nie musisz się martwić o rozmiarach tablicy. Możesz po prostu użyć Array.length i śledzić to, a także tablica może rosnąć lub kurczyć, jak trzeba go. Więc nawet nie trzeba się martwić o jakichkolwiek, O nie, muszę przeznaczyć więcej rzeczy, lub coś podobnego. Fajne jest to, że JavaScript jest coś, co nazywa obiekty. To obiektowy język programowania, więc to, co jest w istocie, sposób, aby dane grupy razem, nieco podobny do struktury, ale można go jak struktury asocjacyjnej lub w składni tablicy. To bardzo proste i co można z tym zrobić to razem grupa danych jeśli masz kilka danych, które związane. Bo to jest wszystko, co potrzebne, by opisać samochód, nie musisz mieć go w kilka różnych miejsc. Można po prostu trzymać go do 1 obiektu w JavaScript. Jak zapewne wiesz, powtarzanie jest jedną z tych nudnych zadań. Po prostu zrobić to nad znowu. Musisz porozmawiać z każdego obiektu w samochodzie, albo musisz przejść przez każdy element na liście lub coś w tym stylu. Więc JavaScript ma, podobnie jak PHP, składni foreach. W tym przypadku, to w pętli. Chcesz używać tego tylko na obiektach. Są pewne problemy, które pojawiają się, jeśli używasz tego na tablicach. Zazwyczaj jest jedna z tych rzeczy, jednak, że jest bardzo przydatne, bo dużo napowietrznych wyeliminować bo nie trzeba ciągnąć wszystko w swoim obiekcie samodzielnie. Nie musisz pamiętać wszystkich najważniejszych nazwisk. Po prostu jakby je z powrotem w tej składni. W tym, ze w przypadku osób po prostu chcesz zapamiętać że dostajesz z powrotem wszystkie klucze, w bardzo podobny sposób do hash tabeli. Jeśli pamiętasz z tego, kiedy będzie można umieścić w ciągu znaków można dostać coś które mają wartość skojarzoną z nim. Co można z tym zrobić to można powiedzieć, wszystko w porządku, I umieścić w samochodzie, i nazwał to Ferrari. Dzięki czemu można umieścić w ciągu Ferrari ponownie później, i można dostać to. I można to zrobić w pętli, z w pętli. Więc po prostu więcej o obiektach. Kluczem jest, od tego trzeba pamiętać, jest to, że można korzystać z struct obiektu jak składni, kiedy chcesz z nich, wyjątkiem sytuacji, gdy to, co zamierza używać jako ciąg nie jest prawidłową nazwą zmiennej. Więc jeśli spojrzeć na które nie mamy klucza ze spacjami. Cóż, jeśli były, aby umieścić object.key, miejsca, z, miejsca, przestrzeni, że po prostu nie ma sensu składniowo. Więc może to zrobić tylko z tego rodzaju składni wspornika. Również obsługa JavaScript, jest bardzo mądry, aby zakres PHP. Masz 2 sposoby rozwiązania zakresu. Nie można mieć var ​​przed zmienną, i oznacza to, że po prostu jest globalny. Możesz zobaczyć go w dowolnym miejscu. Nawet jeśli było umieścić to w instrukcji if, nigdzie indziej w kodzie po tym momencie widać, że zmienna. Inną rzeczą jest jednak to, z var, jest ograniczona do tego, co funkcja jesteś w. Jeśli nie jesteś w funkcji, dobrze, to jest globalna. Ale jeśli jesteś w funkcji jest widoczny tylko wewnątrz tej funkcji. Nie mam przykład, ale tak. To jedna z tych rzeczy, w których można zarządzać, co zmienne chcesz być globalne, co zmienne, które chcesz być lokalna, ale trzeba być ostrożnym w tym, bo nie masz rodzaj dokładnej kontroli ziarna zrobić w C, gdzie jeśli coś jest zadeklarowana w pętli, to będzie, że za pobyt w pętli. Co tak naprawdę dbają o użyciu JavaScript na stronach internetowych jest manipulować, prawda? Mam na myśli, to dlatego to robimy. W tym celu możemy użyć czegoś, co nazywa DOM. Document Object Model. Zasadniczo, co robi to bierze cały swój HTML i modelach obecnie w bandę obiektów, które są zagnieżdżone w siebie. Zaczynasz z czymś takim. Masz, na prawo do mnie, kilka kodu tam, że coś w rodzaju - Można by pomyśleć, że byłoby bardzo trudno manipulować, bo chcesz być analizowania przez kilka tekstu i konieczności poskładać siebie rzeczy. A co, jeśli to nie był poprawnie sformatowany? Złe rzeczy się wydarzy. Więc JavaScript załatwia to za ciebie, i masz ładne struktury danych, tak jak na mojej lewej stronie, gdzie trzeba tylko dokument, i wewnątrz, że masz coś, co nazywa HTML, i wewnątrz, że masz głowę i ciało, i wewnątrz tej głowie masz tytuł, etcetera, etcetera, etcetera. To ułatwia manipulowanie strony internetowej tak, że po prostu, oh, chcę tylko porozmawiać z tym obiektem. Rodzaj bardzo podobny sposób, jak mówić do innego obiektu, wykonanego samodzielnie. Tak jak powiedziałem, wszystko DOM jest w obiekcie dokumentu. Albo to jest tylko jedno miejsce, a następnie można przejść w niej znaleźć rzeczy, i można to zrobić - jest to stary styl to zrobić, tam, gdzie można zrobić document.getElementById, a następnie imię, i jak można prawdopodobnie powiedzieć, to staje się bardzo nieporęczny po chwili. Więc prawdopodobnie nie chcesz zrobić. Dlatego mamy Następną rzeczą, którą mamy zamiar mówić o po tym. Kluczem jest tutaj to, że wszystko w porządku, masz wszystkie te elementy, tak? Więc może uda mi się zmienić kolor coś podczas wczytywania strony. Więc co? Co zrobić, jeśli użytkownik kliknie coś? Chcę, aby zrobić coś ciekawego po kliknięciu coś. Dlatego mamy wydarzenia. Można w zasadzie znaleźć dowolny element w swoim DOM, a następnie powiedzieć, hej. Gdy ta ładuje lub ktoś kliknie, lub gdy myszy nad nim, zrób coś z tym. I co masz jest, masz funkcje, które obsługują to za Ciebie. Funkcje te są procedury obsługi zdarzeń. Co S № - to tylko fantazyjny sposób na powiedzenie, Funkcja ta jest wykonywana tylko wtedy, gdy to zdarzenie. Więc obsługuje zdarzenie, które występuje. To w jaki sposób ułożyć obsługi zdarzeń. Mam przycisk, a po kliknięciu go, wybucha. Więc nie, kliknij przycisk. Jest to jeden ze sposobów zbliża go, prawda? Masz tag przycisk, a na kliknięcia masz ciąg, który mówi, Och, przy okazji, mam ten wybucha coś dla mnie. Inaczej, to jest po prostu jak zwykły przycisk po prostu wykonane. Możesz też to zrobić w inny sposób, chwytając elementu DOM, ale my z tym że po mówimy o jQuery. JQuery: Jest to biblioteka, która jest cross-browser. Można go używać w prawie wszystko. I to właśnie daje wiele narzędzi do pracy. Ponieważ obsługa JavaScript, a potężny, nie posiada wszystkie narzędzia potrzebne po wyjęciu z pudełka, aby naprawdę rozwiązania aplikacji sieci web może chcesz zrobić. Więc to upraszcza wiele rzeczy, daje wiele funkcji po wyjęciu z pudełka, które normalnie można napisać samemu, w kółko i od nowa. I po prostu sprawia, że ​​rzeczy bardzo prosta. Masz również selektorów, które pozwalają podjąć się wszystkie te elementy, od DOM dużo więcej po prostu, zamiast używać tych bardzo długich wywołań funkcji. Więcej na tych selektorów. Masz, tam masz, powiedzmy, Chcę uzyskać element z ID "skały". Cóż, w jQuery, to tylko $ i ciąg znaków, który ma funt, a następnie "Skała". Jest to bardzo proste i dużo szybciej niż w tradycyjny sposób JavaScript w rozwiązywaniu tego problemu. I masz podobne rzeczy dla klas i typów elementów. jQuery jest - jednym z ciekawych funkcji jest można rodzaj kompresji dół zapytań na swojej DOM bardzo, bardzo szybko. Teraz wracamy do obsługi zdarzeń, a to w jaki sposób obsługiwać jedno zdarzenie w jQuery. Więc to, co zamierzamy o to mówimy, wszystko w porządku. Mam znacznika script, prawda? Więc mam ten inline JavaScript. Co mamy zamiar zrobić, to będziemy mówić, wszystko w porządku. Kiedy dokument jest gotowy, co oznacza, że ​​dokument został załadowany, mamy zamiar udać się do tej funkcji, a będziemy mówić, wszystko w porządku, ta funkcja faktycznie robi coś innego. Jest to w zasadzie mówiąc, wszystko w porządku, daj mi element z ID "myid." A potem dać to do obsługi funkcji, które wykonuje się po kliknięciu go. Zasadniczo co to robi to, to mówi, wszystko w porządku. Załadowaniu strony, więc będę w, znaleźć ten element, dać ten moduł obsługi zdarzeń, i to w zasadzie ustawia stronę dla Ciebie. I to jest, jak chcesz, aby myśleć o obsłudze zdarzeń. Po prostu chcesz, aby myśleć o, dobrze, gdy wydarzy się coś, co chcę się zdarzyć? Nie chcę o tym myśleć, w porządku, muszę mieć pewność, że rozmowy to coś do tej rzeczy, to coś bla bla bla, bo po prostu chcę mówić rzeczy pod względem imprez. Gdy tak się stanie, to się stanie. Gdy tak się stanie, to się stanie. A jeśli coś wywołać inne rzeczy, to świetnie. Ale ty nie chcesz, aby spróbować zrobić skomplikowany kod dokąd się wybierasz, wywołując wiele rzeczy w tym samym czasie, bo jesteś po prostu da sobie głowy. Wszystko w porządku. Teraz możemy się nasza strona do obsługi zdarzeń, ale powiedzmy, że mój użytkownik kliknie przycisk. Co zrobić, jeśli chcę wysłać ten wniosek z powrotem do serwera, ale nie chcę, aby odświeżyć stronę, ponieważ konieczności przeładowania nową stronę za każdym razem robi to za nudne, i dlaczego muszę aby rozwinąć nagłówek znowu, i znowu stopki, i wszystkie elementy strony again po prostu odświeżyć powitanie lub czasu? Więc dlatego mamy coś jak Ajax. Co możemy zrobić, tutaj z Ajax jest można powiedzieć, wszystko w porządku, Chcę wysłać jakieś dane do serwera, i chcę uzyskać odpowiedź z powrotem, więc mogę zaktualizować moją stronę, a może po prostu zrobić kilka algorytmów obliczeń, które nie koniecznie pokazać coś do użytkownika. Czego potrzebujesz, aby to zrobić? Cóż, trzeba URL trzeba rozmawiać. Serwer nie może po prostu magicznie podsłuchiwać znikąd. Trzeba mieć konkretne miejsce wyślesz te dane. I trzeba także niektóre dane do wysłania, a może to zapytanie dataless. Chcesz po prostu ping do serwera i powiedzieć, hej, ja żyję, czy coś takiego. A następnie chcesz funkcję w zasadzie obsługuje się sukcesem. Powiedzmy, że wrócisz informacje z serwera, i chcesz zmienić nazwę użytkownika na swojej stronie. Więc co można uzyskać informacje z powrotem, i chcesz wcisnąć, że na ekranie. Co się dzieje, gdy strona będzie gotowa, utworzyć na funkcję kliknij na ten przycisk o nazwie logowania. Co to to nie jest, gdy przycisk jest wciśnięty, mówisz do greetings.php, dokonać żądania POST, i można powiedzieć, hej, daj mi coś z twojej strony. Tak naprawdę nie trzeba opisywać, ale greetings.php, powiedzmy, oddaje "Hello World". Więc wracamy to "Hello World", a na sukces to, przy założeniu, że nic się nie uda, to po prostu idź do tego miejsca docelowego że określony i po prostu trzymać tam odpowiedź. I jest to bardzo prosty sposób na utworzenie kwerendy Ajax. Bardzo szybko, Rob jakby to już wspomniano, rzeczy może pójść nie tak, złe rzeczy mogą się zdarzyć, więc chcesz zapoznać się z tymi kodami odpowiedzi HTTP. Co to są po prostu, jak, 200, wszystko poszło dobrze. Coś innego, złych rzeczy się stało. To na ogół rzeczą, którą chcesz zapamiętać. Ale miło jest wiedzieć wszystko o nich. I wreszcie, kiedy już przeszli przez to wszystko, Musimy porozmawiać o konstrukcji bardzo szybko, i wtedy możemy pozwolić ci wszystko zostawić. Projekt. Rzeczy, które chcesz zapamiętać. Zadaj sobie następujące pytania: Kto będzie używać tego? Co oni będą go używać do? Co moi użytkownicy dbają o? Co oni nie dbają o? Po prostu nie chcę, aby aplikację i niech to po prostu rosną i stać się gigantyczny, pochłaniająca wszystko rzeczą, że nie można nawet zakończyć. Chcesz mieć odrębne cele i plany i rzeczy, które chcesz rozwiązać. Zrób to bez wysiłku. Wszystko to mówi zasadniczo ułatwiają użytkownikowi go używać; nie sprawiają, że gigant z tekstem jak kropelka tym slajdzie jest, rzeczywiście. Po prostu ma to być coś, gdzie jest to bardzo proste dla kogoś, aby przejść w i robić to, co chcą robić. Nie chcesz, żeby mieć do nawigacji 5 stron aby dostać się do głównego funkcji witryny. Jeśli Google miał 5 stron, zanim można nawet sprawdzić coś, nikt nie będzie go używać. I wreszcie, prototyp papieru, grupa ostrości. Mają dobry projekt i praktyki badań. Tylko dlatego, że uważasz, że pracuje dla Ciebie, nie oznacza, że ​​ktoś jeszcze myśli, że działa. Ale tak, to jest to. [CS50.TV]