1 00:00:00,000 --> 00:00:02,270 >> [Review: Kuis 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] 3 00:00:04,620 --> 00:00:07,660 [Ini adalah CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Selamat datang semua orang. Ini adalah review untuk kuis 1. 5 00:00:11,610 --> 00:00:15,040 Sama seperti disclaimer, ini - maksud saya, kita akan mencoba untuk menutupi 6 00:00:15,040 --> 00:00:17,770 sebagai bahan sebanyak mungkin, tapi itu tidak berarti bahwa 7 00:00:17,770 --> 00:00:20,780 kita akan mencakup semua hal yang dapat di kuis 1. 8 00:00:20,780 --> 00:00:25,270 Jadi pastikan Anda juga melihat pada kuliah, bagian, segala sesuatu yang Anda bisa. 9 00:00:25,270 --> 00:00:28,240 Kuis 1 akan menjadi hari Rabu, Rabu depan. 10 00:00:28,240 --> 00:00:33,800 Jadi pastikan untuk belajar. Ini akan menjadi, cukup banyak, seperti kuis pertama 11 00:00:33,800 --> 00:00:36,390 mengenai format, tapi itu mungkin akan jauh lebih sulit. 12 00:00:36,390 --> 00:00:39,600 Setidaknya, tahun lalu ketika saya mengambil 50, saya pikir itu jauh lebih sulit. 13 00:00:39,600 --> 00:00:42,410 Jadi belajar banyak. 14 00:00:42,410 --> 00:00:45,190 >> Aku akan menutupi struktur data dan Huffman coding. 15 00:00:45,190 --> 00:00:47,910 Ini adalah sesuatu yang banyak orang berpikir kompleks, 16 00:00:47,910 --> 00:00:51,930 tapi aku akan mencoba untuk membuatnya semudah mungkin. 17 00:00:51,930 --> 00:00:56,330 Pertama-tama, apa yang kita ingin kalian tahu kuis 1 adalah untuk 18 00:00:56,330 --> 00:01:00,970 memahami deskripsi konseptual dari masing-masing struktur data bahwa aku akan hadir. 19 00:01:00,970 --> 00:01:03,960 Itu berarti bahwa Anda tidak harus benar-benar 20 00:01:03,960 --> 00:01:07,020 mengimplementasikan tabel hash dalam kuis 1. 21 00:01:07,020 --> 00:01:10,250 Kami tidak ingin Anda untuk menerapkan tabel hash keseluruhan; mungkin kita akan mencoba 22 00:01:10,250 --> 00:01:13,090 untuk membuat Anda menerapkan beberapa fungsi, 23 00:01:13,090 --> 00:01:16,940 operasi yang paling umum, tapi kami tidak akan membuat Anda melaksanakan segala sesuatu. 24 00:01:16,940 --> 00:01:21,010 Jadi, penting bahwa Anda memahami konsep di balik setiap struktur data 25 00:01:21,010 --> 00:01:23,510 dan juga bahwa Anda dapat kode dalam C, 26 00:01:23,510 --> 00:01:27,880 hanya operasi yang paling umum yang mereka miliki untuk setiap struktur data. 27 00:01:27,880 --> 00:01:30,090 Dan juga dapat meninjau pointer dan struct, 28 00:01:30,090 --> 00:01:33,470 karena mereka muncul banyak dalam struktur data tersebut. 29 00:01:33,470 --> 00:01:37,380 >> Pertama, terkait daftar. Daftar link sebenarnya sangat mirip dengan array, 30 00:01:37,380 --> 00:01:39,930 tetapi perbedaan antara sebuah linked list dan sebuah array, 31 00:01:39,930 --> 00:01:45,160 pertama-tama, adalah bahwa linked list memiliki ukuran yang sangat fleksibel, 32 00:01:45,160 --> 00:01:50,060 sementara dalam array Anda harus baik memilih ukuran yang sangat besar untuk array, 33 00:01:50,060 --> 00:01:53,710 sehingga Anda tahu bahwa Anda akan dapat menyimpan semua data Anda dalam array itu, 34 00:01:53,710 --> 00:01:59,370 atau Anda harus menggunakan malloc memiliki panjang fleksibel array. 35 00:01:59,370 --> 00:02:03,680 Dalam daftar terkait itu sangat mudah untuk hanya mendapatkan lebih banyak unsur, 36 00:02:03,680 --> 00:02:07,210 menempatkan elemen lebih dalam linked list atau menghapus elemen. 37 00:02:07,210 --> 00:02:09,370 Dan sebenarnya, jika Anda tidak ingin linked list yang akan diurutkan, 38 00:02:09,370 --> 00:02:13,950 Anda dapat mencari dan menghapus elemen dalam waktu konstan, 39 00:02:13,950 --> 00:02:16,800 jadi O (1) waktu, sehingga sangat nyaman. 40 00:02:16,800 --> 00:02:20,660 Anda hanya harus berhati-hati untuk selalu ingat untuk malloc dan bebas node, 41 00:02:20,660 --> 00:02:25,510 hanya karena jika Anda tidak, Anda akan memiliki kebocoran memori. 42 00:02:25,510 --> 00:02:31,480 Daftar Jadi terkait - definisi node adalah seperti apa yang kita miliki di sana. 43 00:02:31,480 --> 00:02:35,110 Aku meletakkan int n, tetapi Anda dapat menyimpan data apapun yang Anda inginkan. 44 00:02:35,110 --> 00:02:37,280 Jadi jika Anda ingin menyimpan string, tidak apa-apa. 45 00:02:37,280 --> 00:02:41,690 Jika Anda ingin menyimpan struct, tidak apa-apa, ganda, apa pun yang Anda inginkan. 46 00:02:41,690 --> 00:02:44,630 Aku hanya menempatkan int n untuk contoh di sini. 47 00:02:44,630 --> 00:02:46,800 Dan Anda memiliki pointer ke node berikutnya. 48 00:02:46,800 --> 00:02:51,940 Jadi, pada dasarnya, sebuah linked list memiliki beberapa data, dan kemudian menunjuk ke node berikutnya. 49 00:02:51,940 --> 00:02:56,710 Jika itu elemen terakhir dalam linked list, itu akan menunjuk ke NULL. 50 00:02:56,710 --> 00:02:59,060 Jadi ini adalah contoh dari sebuah linked list. 51 00:02:59,250 --> 00:03:05,960 >> Oke, jadi sekarang mari kita lihat apa yang harus kita lakukan jika saya ingin memasukkan elemen dalam linked list. 52 00:03:05,960 --> 00:03:08,810 Pertama, fungsi insert akan tipe void 53 00:03:08,810 --> 00:03:11,350 karena saya tidak ingin kembali apa-apa. 54 00:03:11,350 --> 00:03:14,200 Dan aku akan mengambil int sebagai argumen, 55 00:03:14,200 --> 00:03:17,090 karena saya ingin tahu apa yang ingin saya masukkan. 56 00:03:17,090 --> 00:03:21,840 Jadi apa hal pertama yang harus saya lakukan? Yah, aku harus malloc pada newNode, 57 00:03:21,840 --> 00:03:24,240 sehingga adalah baris pertama. 58 00:03:24,240 --> 00:03:27,580 Aku hanya membuat node baru untuk dimasukkan ke dalam linked list. 59 00:03:27,580 --> 00:03:32,360 Jadi apa yang bisa saya lakukan? Nah, kita tahu bahwa dalam implementasi kami daftar terkait 60 00:03:32,360 --> 00:03:38,180 di kelas, kami selalu menempatkan kepala sebagai variabel global. 61 00:03:38,180 --> 00:03:41,800 Jadi apa yang bisa kita lakukan adalah mengubah kepala. 62 00:03:41,800 --> 00:03:44,300 Saya dapat membuat node baru ini menjadi kepala baru, 63 00:03:44,300 --> 00:03:46,670 dan itu akan menunjuk ke kepala sebelumnya. 64 00:03:46,670 --> 00:03:50,390 Bagaimana kita bisa melakukan itu? Hal pertama yang harus saya lakukan 65 00:03:50,390 --> 00:03:54,770 adalah mengubah 'n' di node baru untuk nilai, 66 00:03:54,770 --> 00:03:57,530 yang dilewatkan ke fungsi. 67 00:03:57,530 --> 00:04:01,050 Kemudian newNode berikutnya akan menjadi kepala. 68 00:04:01,050 --> 00:04:05,800 Kepala ini akan newNode. Jadi itu cukup sederhana. 69 00:04:05,800 --> 00:04:10,090 Untuk menghapus sebuah node, kita dapat melakukannya seperti - 70 00:04:10,090 --> 00:04:14,790 Salah satu cara yang bisa kita lakukan yaitu, 71 00:04:14,790 --> 00:04:18,160 oke, jika saya ingin menghapus, misalnya, 3, 72 00:04:18,160 --> 00:04:24,850 apa yang bisa saya lakukan adalah hanya titik simpul sebelumnya 73 00:04:24,850 --> 00:04:27,580 ke node berikutnya 3. 74 00:04:27,580 --> 00:04:29,400 Jadi aku hanya akan melakukan sesuatu seperti itu. 75 00:04:29,400 --> 00:04:33,400 Tapi apa masalah dengan melakukan hal itu? 76 00:04:33,400 --> 00:04:37,400 Saya memiliki kebocoran memori, jadi saya tidak memiliki akses ke nomor 3 lagi. 77 00:04:37,400 --> 00:04:42,480 Masalah dengan itu adalah bahwa aku tidak akan mampu membebaskan simpul tersebut. 78 00:04:42,480 --> 00:04:45,360 Aku akan memiliki kebocoran memori dan (dimengerti) akan membenci saya. 79 00:04:45,360 --> 00:04:49,370 Jadi, bukannya melakukan itu, saya mungkin harus memiliki pointer sementara. 80 00:04:49,370 --> 00:04:53,210 Jadi saya menaruh temp. Hal ini akan menunjuk ke simpul yang saya ingin menghapus. 81 00:04:53,210 --> 00:04:58,170 Dan kemudian saya dapat memindahkan node sebelumnya ke titik ke node berikutnya 82 00:04:58,170 --> 00:05:00,390 dari node yang saya ingin menghapus. 83 00:05:00,390 --> 00:05:02,730 Dan akhirnya, aku bisa membebaskan pointer. 84 00:05:02,730 --> 00:05:07,480 Apakah saya harus membebaskan pointer yang saya buat di sana? 85 00:05:07,480 --> 00:05:09,560 Saya tidak perlu, hanya karena - 86 00:05:09,560 --> 00:05:13,430 perbedaannya adalah bahwa node ini diciptakan menggunakan malloc, 87 00:05:13,430 --> 00:05:17,280 sehingga dalam tumpukan, sementara satu ini hanya dinyatakan sebagai saklar NULL dalam stack. 88 00:05:17,280 --> 00:05:20,000 Jadi saya tidak perlu membebaskan itu. 89 00:05:20,000 --> 00:05:22,030 >> Oke. Jadi sekarang mari kita bicara tentang tumpukan. 90 00:05:22,030 --> 00:05:24,680 Tumpukan yang cukup sederhana. 91 00:05:24,680 --> 00:05:29,540 Kami melakukan tumpukan dan antrian di kelas hanya menggunakan array, 92 00:05:29,540 --> 00:05:32,820 tapi Anda harus terbiasa - hanya akan menyadari 93 00:05:32,820 --> 00:05:40,740 Anda juga dapat melakukan tumpukan dalam antrian menggunakan daftar terhubung juga. 94 00:05:40,740 --> 00:05:44,460 Jadi jika Anda memiliki sebuah array, apa yang akan menjadi tumpukan? 95 00:05:44,460 --> 00:05:46,810 Sebuah stack, pertama, harus memiliki ukuran. 96 00:05:46,810 --> 00:05:49,950 Anda harus menyimpan apa ukuran stack yang Anda miliki sekarang. 97 00:05:49,950 --> 00:05:52,980 Dan juga Anda akan memiliki sebuah array, dalam hal ini angka, 98 00:05:52,980 --> 00:05:55,120 tetapi jika Anda ingin, dapat menjadi sebuah array 99 00:05:55,120 --> 00:06:00,380 string, array struct, apa pun yang ingin Anda simpan. 100 00:06:00,380 --> 00:06:03,240 Tentang stack: Perbedaan antara stack dan linked list 101 00:06:03,240 --> 00:06:08,590 adalah bahwa dalam tumpukan Anda hanya memiliki akses ke elemen terakhir yang dimasukkan ke dalam stack. 102 00:06:08,590 --> 00:06:11,770 Ini disebut terakhir, keluar pertama. 103 00:06:11,770 --> 00:06:15,090 Sama seperti Anda memiliki setumpuk nampan, 104 00:06:15,090 --> 00:06:17,670 jika anda menaruh nampan di atas tumpukan, 105 00:06:17,670 --> 00:06:22,670 Anda harus menghapus nampan yang pertama yang memiliki akses ke baki lainnya. 106 00:06:22,670 --> 00:06:26,310 Ini hal yang sama dengan tumpukan. 107 00:06:26,310 --> 00:06:31,220 Jadi jika saya ingin, misalnya, menambahkan elemen ke stack, apa yang harus saya lakukan? 108 00:06:31,220 --> 00:06:34,070 Ini disebut push, dan itu cukup sederhana. 109 00:06:34,070 --> 00:06:37,130 Hal pertama yang harus Anda lakukan adalah memeriksa jika ukuran stack 110 00:06:37,130 --> 00:06:40,150 tidak lebih besar atau sama dengan kapasitas stack. 111 00:06:40,150 --> 00:06:45,810 Karena jika Anda sudah berada pada kapasitas penuh, Anda tidak dapat menambahkan apa-apa lagi. 112 00:06:45,810 --> 00:06:51,140 Dan kemudian jika tidak, Anda hanya perlu menambahkan elemen ke stack. 113 00:06:51,140 --> 00:06:54,530 Dan akhirnya, kenaikan ukuran. Jadi itu cukup sederhana. 114 00:06:54,530 --> 00:06:57,140 Jadi saya hanya menambahkan nomor 2. 115 00:06:57,140 --> 00:07:00,350 Dan jika saya ingin pop, yang berarti bahwa saya ingin menghapus 116 00:07:00,350 --> 00:07:03,870 elemen terakhir yang ditambahkan dan mengembalikan nilai dari elemen, 117 00:07:03,870 --> 00:07:09,180 hal pertama yang saya harus memeriksa adalah bahwa tumpukan tidak kosong. 118 00:07:09,180 --> 00:07:11,510 Karena jika itu kosong, aku tidak bisa mengembalikan apa-apa. 119 00:07:11,510 --> 00:07:14,820 Dalam hal ini, aku kembali -1. 120 00:07:14,820 --> 00:07:18,960 Jika tidak, aku akan pengurangan ukuran spec, 121 00:07:18,960 --> 00:07:22,510 dan kembali nomor (s.size). 122 00:07:22,510 --> 00:07:27,230 Mengapa aku pengurangan ukuran dan kemudian kembali s.size? 123 00:07:27,230 --> 00:07:30,930 Itu karena, dalam kasus ini, spec memiliki ukuran 4, 124 00:07:30,930 --> 00:07:33,810 dan saya ingin kembali elemen keempat, kan? 125 00:07:33,810 --> 00:07:36,030 Tapi apa adalah indeks dari elemen keempat? Tiga. 126 00:07:36,030 --> 00:07:44,510 Karena saya ukuran - akan menjadi 3, saya hanya dapat kembali s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 karena itu 3. Jadi hanya indeks. 128 00:07:48,410 --> 00:07:50,380 >> Sekarang antrian. Antrian cukup banyak hal yang sama. 129 00:07:50,380 --> 00:07:54,950 Satu-satunya perbedaan adalah bahwa alih-alih memiliki terakhir, keluar pertama, 130 00:07:54,950 --> 00:07:57,480 Anda memiliki pertama, keluar pertama. 131 00:07:57,480 --> 00:07:59,460 Mungkin jika Anda menunggu untuk pergi ke konser, 132 00:07:59,460 --> 00:08:04,260 Anda tidak akan senang jika Anda memiliki setumpuk bukan antrian. 133 00:08:04,260 --> 00:08:07,730 Menjadi orang terakhir yang datang akan menjadi orang pertama yang memasuki konser. 134 00:08:07,730 --> 00:08:09,760 Anda mungkin tidak akan senang. 135 00:08:09,760 --> 00:08:15,020 Dalam antrian, orang pertama yang masuk juga orang pertama yang keluar. 136 00:08:15,020 --> 00:08:18,720 Jadi dalam definisi antrian, selain memiliki ukuran dalam array, 137 00:08:18,720 --> 00:08:23,360 Anda juga harus memiliki kepala, yang merupakan indeks untuk kepala stack. 138 00:08:23,360 --> 00:08:29,000 Jadi elemen pertama sekarang. 139 00:08:29,000 --> 00:08:32,710 Enqueue adalah hal yang sama seperti dorongan untuk tumpukan. 140 00:08:32,710 --> 00:08:34,980 Jika Anda sangat naif, Anda hanya akan mengatakan, 141 00:08:34,980 --> 00:08:39,289 Yah, aku hanya bisa melakukan hal yang sama seperti yang saya lakukan untuk mendorong. 142 00:08:39,289 --> 00:08:44,030 Saya hanya dapat memeriksa apakah itu tidak melampaui kapasitas. 143 00:08:44,030 --> 00:08:48,760 Jika ya, saya kembali palsu, kalau tidak saya hanya dapat mengekspor nilai baru 144 00:08:48,760 --> 00:08:50,630 dan kemudian kenaikan ukuran. 145 00:08:50,630 --> 00:08:52,750 Tapi mengapa hal ini salah? 146 00:08:52,750 --> 00:08:55,010 Mari kita lihat contoh ini. 147 00:08:55,010 --> 00:08:57,020 Saya mencoba untuk enqueue banyak hal, 148 00:08:57,020 --> 00:08:58,390 dan kemudian aku akan dequeue dan enqueue. 149 00:08:58,390 --> 00:09:00,550 Ada banyak perintah, tapi itu sangat sederhana. 150 00:09:00,550 --> 00:09:04,790 Aku akan enqueue 5, sehingga menambah 5, dan kemudian 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, dan kemudian saya ingin dequeue sesuatu, 152 00:09:09,310 --> 00:09:12,000 yang berarti bahwa aku akan menghapus elemen pertama. 153 00:09:12,000 --> 00:09:14,640 Jadi aku akan menghapus nomor 3, kan? 154 00:09:14,640 --> 00:09:17,320 Elemen pertama. Oke. 155 00:09:17,320 --> 00:09:21,450 Sekarang jika saya mencoba untuk enqueue sesuatu yang lain, apa yang akan terjadi? 156 00:09:21,450 --> 00:09:24,290 Menurut implementasi saya, 157 00:09:24,290 --> 00:09:31,040 Aku akan menempatkan nomor berikutnya dalam q.size indeks. 158 00:09:31,040 --> 00:09:35,140 Dalam hal ini, ukuran 8, 159 00:09:35,140 --> 00:09:38,640 sehingga indeks 8 akan di sini, di posisi terakhir. 160 00:09:38,640 --> 00:09:43,900 Jika saya mencoba untuk enqueue 1 di sini, saya akan Timpa posisi terakhir 161 00:09:43,900 --> 00:09:45,870 ke nomor 1, yang benar-benar salah. 162 00:09:45,870 --> 00:09:49,870 Yang ingin saya lakukan adalah membungkus dan pergi ke posisi pertama. 163 00:09:49,870 --> 00:09:52,870 Mungkin Anda hanya akan mengatakan, baik, saya hanya harus memeriksa 164 00:09:52,870 --> 00:09:55,600 jika saya benar-benar dapat menempatkan sesuatu di sana. 165 00:09:55,600 --> 00:09:58,560 Jika tidak, saya hanya mengatakan, oh, kapasitas penuh baru 166 00:09:58,560 --> 00:10:02,010 sebenarnya kapasitas - 1, dan Anda tidak dapat menempatkan elemen di sana. 167 00:10:02,010 --> 00:10:06,150 Tapi apa masalahnya? Masalahnya adalah bahwa jika saya hanya dequeue segalanya dengan benar di sini 168 00:10:06,150 --> 00:10:08,240 dan kemudian saya mencoba untuk menambahkan sesuatu yang lain, itu hanya akan mengatakan, 169 00:10:08,240 --> 00:10:11,210 baik, Anda berada pada kapasitas penuh, yang adalah 0. 170 00:10:11,210 --> 00:10:13,620 Jadi antrian Anda hilang. 171 00:10:13,620 --> 00:10:16,990 Anda harus membungkus, dan cara membungkus di sekitar 172 00:10:16,990 --> 00:10:22,040 bahwa kalian pelajari dalam visioner dan lainnya psets menggunakan mod. 173 00:10:22,040 --> 00:10:29,090 Anda dapat mencobanya di rumah untuk memahami mengapa Anda akan melakukan q.size + q.head 174 00:10:29,090 --> 00:10:31,080 Kapasitas mod, tetapi jika Anda memeriksa di sini, 175 00:10:31,080 --> 00:10:34,760 kita dapat melihat bahwa ia bekerja. 176 00:10:34,760 --> 00:10:37,760 Jadi, dalam contoh terakhir, q.size adalah 8 177 00:10:37,760 --> 00:10:47,590 dan kepala itu 1, karena itu posisi ini di sini dari array. 178 00:10:47,590 --> 00:10:51,970 Jadi itu akan menjadi 8 + 1, 9. Kapasitas Mod 9 akan menjadi 0. 179 00:10:51,970 --> 00:10:56,640 Ini akan pergi ke indeks 0. Kami akan berada di posisi yang tepat. 180 00:10:56,640 --> 00:10:59,750 Dan kemudian mencoba antrian di rumah. 181 00:10:59,750 --> 00:11:04,950 Beberapa hal penting: mencoba untuk memahami perbedaan antara tumpukan dan antrian. 182 00:11:04,950 --> 00:11:11,620 Di rumah, mencoba untuk mendapatkan sangat akrab dengan menerapkan enqueue, dequeue, push dan pop. 183 00:11:11,620 --> 00:11:16,560 Dan juga memahami ketika Anda akan menggunakan masing-masing. 184 00:11:16,560 --> 00:11:22,830 >> Jadi mari kita bersantai selama 10 detik dengan sekelompok Pokemons. 185 00:11:22,830 --> 00:11:26,080 Dan sekarang mari kita kembali ke struktur data. 186 00:11:26,080 --> 00:11:29,770 Hash tabel. Banyak orang takut tabel hash. 187 00:11:29,770 --> 00:11:33,650 dalam masalah set 6, Spell Checker. 188 00:11:33,650 --> 00:11:35,980 Hash meja dan mencoba, banyak orang merasa takut dari mereka. 189 00:11:35,980 --> 00:11:38,540 Mereka pikir mereka begitu sulit untuk mengerti. Ya? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Masalah set 5. Masalah >> set 5, yeah. Thanks Rob. 191 00:11:41,490 --> 00:11:43,370 Ya. Enam adalah Huff n 'Puff, yeah. 192 00:11:43,370 --> 00:11:49,340 Masalah set 5 adalah Spell Checker, dan Anda harus menggunakan salah satu tabel hash atau mencoba. 193 00:11:49,340 --> 00:11:55,360 Banyak orang berpikir bahwa mereka yang super sulit untuk mengerti, tapi mereka sebenarnya cukup sederhana. 194 00:11:55,360 --> 00:12:01,290 Apa yang dimaksud dengan tabel hash, pada dasarnya? Sebuah tabel hash adalah sebuah array dari daftar terkait. 195 00:12:01,290 --> 00:12:06,730 Satu-satunya perbedaan antara array dan tabel hash 196 00:12:06,730 --> 00:12:09,730 adalah bahwa dalam tabel hash Anda memiliki sesuatu yang disebut fungsi hash. 197 00:12:09,730 --> 00:12:12,080 Apa yang dimaksud dengan fungsi hash? 198 00:12:12,080 --> 00:12:13,970 Aku tidak tahu apakah kalian bisa baca di sini. 199 00:12:13,970 --> 00:12:16,090 Ini adalah contoh dari tabel hash. 200 00:12:16,090 --> 00:12:19,220 Sehingga Anda dapat melihat bahwa Anda memiliki sebuah array dengan 31 elemen. 201 00:12:19,220 --> 00:12:22,440 Dan apa yang kita lakukan dalam sebuah tabel hash yang memiliki fungsi hash 202 00:12:22,440 --> 00:12:26,660 yang akan menerjemahkan kunci, masing-masing ke int indeks. 203 00:12:26,660 --> 00:12:31,740 Jika, misalnya, jika saya ingin memilih untuk B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Aku akan menaruh B. Harrison dalam fungsi hash saya, 205 00:12:34,190 --> 00:12:36,960 dan fungsi hash akan kembali 24. 206 00:12:36,960 --> 00:12:40,930 Jadi saya tahu bahwa saya ingin menyimpan B. Harrison di 24. 207 00:12:40,930 --> 00:12:46,580 Jadi itulah perbedaan antara hanya memiliki sebuah array dan memiliki tabel hash. 208 00:12:46,580 --> 00:12:48,740 Dalam tabel hash Anda akan memiliki fungsi yang akan memberitahu Anda 209 00:12:48,740 --> 00:12:54,740 tempat untuk menyimpan data yang ingin Anda simpan. 210 00:12:54,740 --> 00:12:57,040 Untuk fungsi hash, Anda ingin mencari fungsi hash 211 00:12:57,040 --> 00:13:00,600 yang deterministik dan terdistribusi. 212 00:13:00,600 --> 00:13:07,810 Seperti yang dapat Anda lihat di sini, Anda melihat bahwa banyak data yang saya ingin toko itu benar-benar 19 213 00:13:07,810 --> 00:13:12,470 daripada menggunakan 31 dan 30 dan 29, yang semuanya gratis. 214 00:13:12,470 --> 00:13:16,920 Jadi fungsi hash yang saya gunakan tidak sangat baik didistribusikan. 215 00:13:16,920 --> 00:13:20,710 Ketika kita mengatakan baik-didistribusikan, itu berarti bahwa kita ingin memiliki, 216 00:13:20,710 --> 00:13:26,520 kira-kira, setidaknya 1 atau 2 untuk masing-masing - 217 00:13:26,520 --> 00:13:32,190 seperti, perbedaan dari 1 atau 2 untuk masing-masing indeks dalam array. 218 00:13:32,190 --> 00:13:43,950 Anda ingin memiliki, kira-kira, jumlah yang sama di setiap elemen linked list dalam array. 219 00:13:43,950 --> 00:13:48,600 Dan sangat mudah untuk memeriksa apakah itu berlaku dalam tabel hash, melihat sebagai tabel hash. 220 00:13:48,600 --> 00:13:51,770 >> Kemudian pohon. Ini adalah pohon. 221 00:13:51,770 --> 00:13:56,400 Pohon dalam ilmu komputer yang terbalik untuk beberapa alasan. 222 00:13:56,400 --> 00:14:00,150 Jadi di sini Anda memiliki akar pohon dan kemudian daun. 223 00:14:00,150 --> 00:14:05,630 Anda hanya harus tahu nomenklatur untuk orang tua dan anak. 224 00:14:05,630 --> 00:14:12,880 Setiap node memiliki anak-anak, yang merupakan node yang berada di bawah orangtua. 225 00:14:12,880 --> 00:14:19,660 Jadi, misalnya, 2 akan menjadi orangtua untuk 3 dan untuk anak lain di sana, 226 00:14:19,660 --> 00:14:25,290 sementara 3 akan menjadi orang tua untuk 1 dan anak-anak lain yang ada. 227 00:14:25,290 --> 00:14:29,990 Dan 1 akan menjadi anak 3, dan seterusnya. 228 00:14:29,990 --> 00:14:34,610 Kami memiliki sesuatu yang jauh lebih menarik, yang disebut pohon pencarian biner, 229 00:14:34,610 --> 00:14:39,040 di mana semua nilai di sebelah kanan node 230 00:14:39,040 --> 00:14:41,660 akan berada di sebelah kanan, di sini - di sebelah kanan, 231 00:14:41,660 --> 00:14:46,780 akan lebih besar dari elemen di root. 232 00:14:46,780 --> 00:14:49,780 Jadi jika saya memiliki nomor 5 di sini, semua elemen di sebelah kanan 233 00:14:49,780 --> 00:14:51,940 akan lebih besar dari 5, dan di sebelah kiri 234 00:14:51,940 --> 00:14:56,770 semua elemen akan menjadi kurang dari 5. 235 00:14:56,770 --> 00:14:58,780 Mengapa ini berguna? 236 00:14:58,780 --> 00:15:01,660 Nah, jika saya ingin memeriksa apakah nomor 7 di sini, misalnya, 237 00:15:01,660 --> 00:15:05,960 Aku hanya pergi ke 5 pertama dan aku akan melihat, adalah 7 besar atau kurang dari 5? 238 00:15:05,960 --> 00:15:09,540 Ini lebih besar, jadi saya tahu itu akan harus di sebelah kanan pohon. 239 00:15:09,540 --> 00:15:13,980 Jadi saya memiliki lebih sedikit hal untuk melihat. 240 00:15:13,980 --> 00:15:19,520 Dalam pelaksanaan sebuah pohon pencarian biner, node, aku hanya akan harus memiliki data, 241 00:15:19,520 --> 00:15:21,750 jadi int n, Anda juga bisa memiliki string 242 00:15:21,750 --> 00:15:23,630 atau apa pun yang Anda inginkan. 243 00:15:23,630 --> 00:15:28,100 Anda hanya harus berhati-hati pada mendefinisikan apa yang lebih besar, apa yang kurang. 244 00:15:28,100 --> 00:15:30,390 Jadi jika Anda memiliki string, misalnya, Anda bisa menentukan 245 00:15:30,390 --> 00:15:34,690 bahwa semua hal di sebelah kanan akan memiliki panjang yang lebih besar, 246 00:15:34,690 --> 00:15:40,940 kiri akan memiliki panjang lebih rendah, sehingga benar-benar terserah pada Anda. 247 00:15:40,940 --> 00:15:44,930 >> Bagaimana saya bisa menerapkan untuk menemukan BST? 248 00:15:44,930 --> 00:15:47,840 Hal pertama yang kita harus lakukan adalah memeriksa apakah akar adalah NULL. 249 00:15:47,840 --> 00:15:50,920 Jika itu NULL, itu berarti bahwa hal itu tidak ada 250 00:15:50,920 --> 00:15:53,330 karena Anda bahkan tidak memiliki pohon, kan? 251 00:15:53,330 --> 00:15:55,790 Jadi saya kembali palsu. 252 00:15:55,790 --> 00:15:58,740 Jika tidak, aku akan memeriksa apakah nomor lebih besar 253 00:15:58,740 --> 00:16:01,720 dari nilai di root. 254 00:16:01,720 --> 00:16:04,250 Aku akan mencoba untuk menemukan elemen di sebelah kanan 255 00:16:04,250 --> 00:16:08,590 pohon. 256 00:16:08,590 --> 00:16:11,310 Anda melihat bahwa saya menggunakan rekursi di sini. 257 00:16:11,310 --> 00:16:14,150 Dan kemudian jika itu kurang, aku akan melihat kiri. 258 00:16:14,150 --> 00:16:18,330 Dan akhirnya, jika tidak, jika tidak kurang atau tidak lebih besar, 259 00:16:18,330 --> 00:16:20,660 itu berarti bahwa itu adalah nilai itu sendiri. 260 00:16:20,660 --> 00:16:23,010 Jadi aku hanya kembali benar. 261 00:16:23,010 --> 00:16:26,360 Anda bisa lihat di sini yang saya gunakan jika, jika, jika. 262 00:16:26,360 --> 00:16:30,820 Dan ingat, dalam kuis 0, kita punya masalah yang didapat jika, jika, jika, 263 00:16:30,820 --> 00:16:32,780 dan Anda seharusnya menemukan inefisiensi, 264 00:16:32,780 --> 00:16:35,180 dan inefisiensi adalah bahwa Anda digunakan jika. 265 00:16:35,180 --> 00:16:39,060 Anda seharusnya menggunakan if, else if, else jika, dan yang lain. 266 00:16:39,060 --> 00:16:44,240 Jadi, yang harus saya gunakan lagi jika dan lain jika dan lain di sini? 267 00:16:44,240 --> 00:16:46,200 Apakah ada yang - ya? 268 00:16:46,200 --> 00:16:51,140 [Student berbicara, terdengar] 269 00:16:51,140 --> 00:16:53,480 Sempurna. Jadi dia mengatakan bahwa hal itu tidak masalah, 270 00:16:53,480 --> 00:16:55,930 hanya karena inefisiensi yang kita miliki sebelumnya 271 00:16:55,930 --> 00:16:59,550 adalah bahwa karena, mungkin jika beberapa kondisi puas, 272 00:16:59,550 --> 00:17:03,570 jadi Anda telah melakukan suatu tindakan, tapi kemudian Anda akan memeriksa semua kondisi lain. 273 00:17:03,570 --> 00:17:06,319 Tapi dalam kasus ini, itu kembali segera, jadi tidak masalah. 274 00:17:06,319 --> 00:17:09,220 Jadi Anda tidak harus menggunakan lain jika. 275 00:17:09,220 --> 00:17:11,740 >> Dan akhirnya, mari kita bicara tentang mencoba, 276 00:17:11,740 --> 00:17:13,800 yang merupakan favorit semua orang. 277 00:17:13,800 --> 00:17:15,980 Sebuah mencoba adalah pohon array. 278 00:17:15,980 --> 00:17:20,369 Ini sangat cepat untuk mencari nilai-nilai, tetapi menggunakan banyak memori. 279 00:17:20,369 --> 00:17:22,530 Dan biasanya untuk menyaring kata-kata, jadi ketika Anda 280 00:17:22,530 --> 00:17:27,920 ingin menerapkan, misalnya, saya tidak tahu, seperti buku telepon di telepon Anda 281 00:17:27,920 --> 00:17:30,440 dan Anda ingin dapat mengetik B 282 00:17:30,440 --> 00:17:32,510 dan hanya memiliki nama-nama orang yang memiliki B. 283 00:17:32,510 --> 00:17:37,960 Ini sangat mudah untuk menerapkan yang menggunakan mencoba, misalnya. 284 00:17:37,960 --> 00:17:39,820 Bagaimana Anda mendefinisikan node dalam mencoba? 285 00:17:39,820 --> 00:17:43,910 Anda hanya harus memiliki bool yang akan is_word. 286 00:17:43,910 --> 00:17:48,660 Yang mewakili bahwa menggunakan semua karakter sebelum simpul tersebut, 287 00:17:48,660 --> 00:17:51,920 Anda mampu untuk membentuk suatu kata, 288 00:17:51,920 --> 00:17:57,230 dan kemudian Anda akan memiliki sebuah array dari pointer ke node. 289 00:17:57,230 --> 00:18:03,120 Dapatkah Anda melihat bahwa kita memiliki sebuah array dari node induk, sehingga simpul * Array? Ya? 290 00:18:03,120 --> 00:18:06,050 Jadi mari kita lihat bagaimana yang akan bekerja. Untuk spell check, 291 00:18:06,050 --> 00:18:08,230 kita memiliki sebuah array dari 27 elemen, 292 00:18:08,230 --> 00:18:12,150 karena kita memiliki semua huruf ditambah tanda kutip. 293 00:18:12,150 --> 00:18:17,800 Sebelum di sini aku hanya akan menggunakan 2 karena saya ingin bisa menulis di papan tulis. 294 00:18:17,800 --> 00:18:20,230 Oke. Jadi ini adalah contoh dari mencoba. 295 00:18:20,230 --> 00:18:25,600 Jika saya hanya mendefinisikan node pertama, saya akan memiliki sebuah array dari 2 unsur 296 00:18:25,600 --> 00:18:29,290 yang 2 pointer ke NULL, jadi saya hanya menempatkan 'a' dan 'b'. 297 00:18:29,290 --> 00:18:32,430 Dan aku akan memiliki bool yang mengatakan is_word. 298 00:18:32,430 --> 00:18:34,420 Ini akan menjadi salah untuk yang pertama, 299 00:18:34,420 --> 00:18:37,370 hanya karena, sebelum itu Anda tidak memiliki karakter. 300 00:18:37,370 --> 00:18:40,900 Jadi kata kosong bukanlah kata. Jadi palsu. 301 00:18:40,900 --> 00:18:46,320 Jika saya ingin menambahkan 'a' kamus ini, apa yang akan saya lakukan? 302 00:18:46,320 --> 00:18:49,760 Aku hanya harus malloc node baru untuk 'a', 303 00:18:49,760 --> 00:18:54,630 dan kemudian menambahkan kata menjadi true. 304 00:18:54,630 --> 00:19:00,180 Jadi itu hanya menyatakan bahwa setelah 'a' akan menjadi kenyataan. Masuk akal? 305 00:19:00,180 --> 00:19:04,120 Kemudian jika saya ingin menambahkan 'ba', aku harus malloc 1 untuk 'b', 306 00:19:04,120 --> 00:19:07,550 dan kemudian aku akan mengatur boolean untuk palsu, 307 00:19:07,550 --> 00:19:10,160 karena 'b' dengan sendirinya tidak sepatah kata pun. 308 00:19:10,160 --> 00:19:13,010 Lalu aku akan malloc satu lagi untuk 'a', jadi 'ba', 309 00:19:13,010 --> 00:19:16,290 dan kemudian aku akan mengatur itu kata true. 310 00:19:16,290 --> 00:19:18,950 Karena 'ba' adalah sebuah kata. 311 00:19:18,950 --> 00:19:21,910 Dan kemudian jika saya ingin melihat apakah 'b' dalam kamus ini, 312 00:19:21,910 --> 00:19:26,730 Aku hanya bisa pergi ke yang pertama, 'b'. Aku turun, dan saya lihat adalah kata, dan kata palsu. 313 00:19:26,730 --> 00:19:30,110 Jadi, tidak sepatah kata pun. Jika saya ingin memeriksa 'ba', 314 00:19:30,110 --> 00:19:38,010 Aku pergi ke yang pertama, 'b', dan kemudian pergi ke 'a', dan saya melihat benar, sehingga kata. Masuk akal? 315 00:19:38,010 --> 00:19:41,950 Banyak orang bingung dengan mencoba. Tidak ada? 316 00:19:41,950 --> 00:19:44,740 >> Akhirnya, Huffman coding. Huffman coding sangat berguna 317 00:19:44,740 --> 00:19:47,550 untuk menghemat memori dan kompres file teks, 318 00:19:47,550 --> 00:19:52,270 hanya karena banyak kali Anda menggunakan 'a' dan 'e', ​​misalnya, 319 00:19:52,270 --> 00:19:57,710 dalam dokumen Anda, tapi saya tidak tahu apakah kalian menggunakan 'q' atau 'z' sebanyak. 320 00:19:57,710 --> 00:20:02,040 Setelah hanya 1 byte untuk setiap karakter tunggal, 321 00:20:02,040 --> 00:20:08,520 setiap satu - 256 karakter yang kita miliki dalam tabel ASCII tidak sangat optimal, 322 00:20:08,520 --> 00:20:11,410 hanya karena ada beberapa karakter yang Anda gunakan lebih banyak, 323 00:20:11,410 --> 00:20:15,180 sehingga Anda mungkin harus menggunakan lebih sedikit memori untuk mereka. 324 00:20:15,180 --> 00:20:17,560 Bagaimana cara menggunakan Huffman coding? 325 00:20:17,560 --> 00:20:20,010 Kita harus melakukan sebuah pohon Huffman. 326 00:20:20,010 --> 00:20:23,370  Sebuah pohon Huffman memiliki node 327 00:20:23,370 --> 00:20:27,760 yang memiliki simbol yang akan menjadi seperti, 'a', 'b', 'c', surat itu, 328 00:20:27,760 --> 00:20:32,990 surat apa pun yang Anda miliki, frekuensi yang frekuensi kata muncul dalam teks, 329 00:20:32,990 --> 00:20:36,280 bahwa Anda sedang menciptakan pohon Huffman untuk, 330 00:20:36,280 --> 00:20:41,800 dan kemudian node yang akan menunjuk ke sebelah kiri pohon Huffman 331 00:20:41,800 --> 00:20:47,210 dan node lain yang akan menunjuk ke kanan. Jadi hanya seperti pohon. 332 00:20:47,210 --> 00:20:49,440 Bagaimana Anda membangun pohon Huffman? 333 00:20:49,440 --> 00:20:54,020 Anda akan memilih 2 node yang memiliki frekuensi terendah. 334 00:20:54,020 --> 00:20:56,490 Jika Anda memiliki dasi Anda akan memilih 2 node 335 00:20:56,490 --> 00:20:59,870 yang memiliki nilai ASCII terendah juga. 336 00:20:59,870 --> 00:21:02,420 Kemudian Anda akan membuat pohon baru dari orang-2 node 337 00:21:02,420 --> 00:21:08,030 yang akan memiliki frekuensi gabungan di node induk. 338 00:21:08,030 --> 00:21:13,240 Dan kemudian Anda akan menghapus 2 anak-anak dari hutan 339 00:21:13,240 --> 00:21:15,570 dan menggantinya dengan orangtua. 340 00:21:15,570 --> 00:21:18,930 Dan kau akan mengulangi bahwa sampai Anda hanya memiliki 1 pohon di hutan. 341 00:21:18,930 --> 00:21:23,840 Jadi mari kita lihat bagaimana Anda akan melakukannya pohon Huffman untuk ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Anda bisa lihat di sini bahwa semua huruf memiliki frekuensi 1 kecuali untuk 'A'; yang memiliki frekuensi 2. 343 00:21:29,220 --> 00:21:34,090 Jadi saya menciptakan node untuk semua surat saya dimasukkan ke dalam urutan nilai ASCII dan frekuensi. 344 00:21:34,090 --> 00:21:40,090 Jadi jika saya ingin membuat pohon pertama, maka akan dengan 'L' dan 'M'. 345 00:21:40,090 --> 00:21:43,100 Jadi di sini. Frekuensi pasangan akan menjadi 2 346 00:21:43,100 --> 00:21:49,470 karena itu 1 + 1, maka 2 berikutnya dengan frekuensi terendah adalah 'Y' dan 'Z'. 347 00:21:49,470 --> 00:21:53,180 Dan kemudian saya memiliki semua dari mereka yang - memiliki frekuensi 2. 348 00:21:53,180 --> 00:22:00,470 Jadi mana yang adalah orang-orang yang memiliki nilai ASCII terendah untuk yang berikutnya? 349 00:22:00,470 --> 00:22:04,830 'A' dan 'L'. Jadi saya membuat node baru, 350 00:22:04,830 --> 00:22:09,930 dan akhirnya, itu adalah 4 dan 2, jadi 2 akan berada di sebelah kiri. 351 00:22:09,930 --> 00:22:12,430 Dan ini adalah pohon Huffman. 352 00:22:12,430 --> 00:22:16,060 Kemudian jika saya ingin menulis beberapa teks, 353 00:22:16,060 --> 00:22:24,440 seperti dalam biner dikonversi ke teks, menggunakan pohon Huffman sangat mudah. 354 00:22:24,440 --> 00:22:30,220 Sebagai contoh, jika saya mengatakan bahwa pindah ke sebelah kiri adalah 0 dan bergerak ke kanan adalah 1, 355 00:22:30,220 --> 00:22:32,410 Apa itu akan mewakili? 356 00:22:32,410 --> 00:22:35,530 Jadi seperti 1, 1, jadi benar, benar, 357 00:22:35,530 --> 00:22:40,370 dan kemudian 0, sehingga akan meninggalkan L, dan kemudian 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Jadi 1, 0, jadi hanya 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 Dan kemudian 0, 1, jadi 'Z'. 360 00:22:47,540 --> 00:22:52,170 Dan kemudian 1, 0, 0 - tidak ada. 361 00:22:52,170 --> 00:22:56,780 0, 0 akan 'Y', jadi malas. 362 00:22:56,780 --> 00:23:06,060 Jadi itu saja bagi saya, Rob akan mengambil alih. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Jadi, minggu 7 hal. 364 00:23:08,400 --> 00:23:11,390 Kami punya banyak untuk pergi benar-benar cepat. 365 00:23:11,390 --> 00:23:13,430 Operator bitwise, buffer overflow, 366 00:23:13,430 --> 00:23:16,760 Perpustakaan CS50, maka HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Semua dalam seperti 15 sampai 20 menit. 368 00:23:20,990 --> 00:23:24,330 Bitwise operator. Ada 6 dari mereka bahwa Anda perlu tahu. 369 00:23:24,330 --> 00:23:31,200 Bitwise dan, bitwise atau, XOR, bergeser ke kiri, shift kanan, dan tidak. 370 00:23:31,200 --> 00:23:35,420 Bergeser ke kanan dan tidak Anda hampir tidak melihat di kuliah sama sekali. 371 00:23:35,420 --> 00:23:40,480 Kita akan pergi lebih cepat di sini, tapi itu baik untuk mengetahui bahwa ini adalah 6 yang ada. 372 00:23:40,480 --> 00:23:45,070 Ingat bahwa operator bitwise seperti ketika Anda melakukan 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Anda tidak berurusan dengan biner dari 3 dan 4. 374 00:23:49,420 --> 00:23:56,550 Dengan operator bitwise Anda benar-benar berurusan dengan bit individu dari nomor 3 dan 4. 375 00:23:56,550 --> 00:23:59,120 >> Jadi yang pertama yang akan kita katakan adalah bitwise tidak, 376 00:23:59,120 --> 00:24:02,340 dan semua hal ini adalah membalik semua bit. 377 00:24:02,340 --> 00:24:05,500 Jadi di sini, jika Anda sedang menulis ini di C, Anda tidak akan menuliskannya 378 00:24:05,500 --> 00:24:09,380 sebagai ~ 11011 atau apa pun, Anda akan menulis rasanya ~ 4, 379 00:24:09,380 --> 00:24:12,970 dan kemudian akan membalik representasi biner dari 4. 380 00:24:12,970 --> 00:24:24,800 Jadi di sini, ~ beberapa bilangan biner 1101101 akan persis flip semua 1 untuk 0 dan semua 0 ke 1 s. 381 00:24:24,800 --> 00:24:27,600 Seperti yang saya katakan di sana, sering menggunakan ini, 382 00:24:27,600 --> 00:24:30,830 dan kita akan melihatnya dalam sedikit, seperti kita ingin datang dengan beberapa nomor 383 00:24:30,830 --> 00:24:35,460 di mana semua bit adalah 1, kecuali untuk salah satu dari mereka. 384 00:24:35,460 --> 00:24:38,560 Jadi biasanya lebih mudah untuk mengekspresikan nomor 385 00:24:38,560 --> 00:24:40,630 di mana hanya satu bit yang diatur, 386 00:24:40,630 --> 00:24:44,650 dan kemudian mengambil ~ itu, sehingga setiap bit lainnya diatur kecuali yang satu itu. 387 00:24:44,650 --> 00:24:50,300 Jadi itulah yang akan kita gunakan lebih sedikit. 388 00:24:50,300 --> 00:24:58,220 Bitwise >> atau. Berikut adalah 2 angka biner, dan 2 nomor ini 389 00:24:58,220 --> 00:25:00,780 cukup representatif, karena mereka mewakili setiap kemungkinan 390 00:25:00,780 --> 00:25:07,290 kombinasi bit yang dapat Anda butuhkan untuk beroperasi pada. 391 00:25:07,290 --> 00:25:13,540 Di sini, ketika saya or'd setiap bit, kita hanya akan membandingkan lurus ke bawah. 392 00:25:13,540 --> 00:25:15,410 Jadi di sisi kiri kita memiliki 1 dan 1. 393 00:25:15,410 --> 00:25:20,510 Ketika saya bitwise | mereka, apa yang akan saya dapatkan? One. 394 00:25:20,510 --> 00:25:25,320 Kemudian bitwise | 0 dan 1 akan memberi saya? One. 395 00:25:25,320 --> 00:25:27,840 Bitwise 1 dan 0 akan menjadi hal yang sama, satu. 396 00:25:27,840 --> 00:25:31,880 Bitwise 0 | 0 akan memberi saya 0. 397 00:25:31,880 --> 00:25:37,300 Jadi satu-satunya kasus di mana saya mendapatkan 0 dalam 0 | 0 kasus. 398 00:25:37,300 --> 00:25:40,020 Dan Anda bisa memikirkan yang seperti ORS logis Anda. 399 00:25:40,020 --> 00:25:44,830 Jadi jika Anda berpikir dari 1 sebagai benar dan 0 sebagai palsu, hal yang sama berlaku di sini. 400 00:25:44,830 --> 00:25:50,040 Jadi benar atau yang benar adalah benar, benar atau salah adalah benar. 401 00:25:50,040 --> 00:25:57,150 Salah atau benar adalah benar, salah atau palsu adalah satu-satunya hal yang benar-benar palsu. 402 00:25:57,150 --> 00:26:00,100 Berikut ini contoh yang harus Anda ketahui 403 00:26:00,100 --> 00:26:05,160 sebagai contoh yang cukup baik ketika operator bitwise digunakan. 404 00:26:05,160 --> 00:26:08,660 Disini jika kita atau modal 'A' dengan OX20, 405 00:26:08,660 --> 00:26:11,830 dan kita akan melihat ini dalam kedua, kami mendapatkan sesuatu. 406 00:26:11,830 --> 00:26:16,020 Dan jika kita atau huruf kecil 'a' dengan OX20, kita mendapatkan sesuatu. 407 00:26:16,020 --> 00:26:26,750 Jadi mari kita menarik table ASCII. 408 00:26:26,750 --> 00:26:34,000 Oke. Di sini kita melihat bahwa 'A' adalah - 409 00:26:34,000 --> 00:26:36,920 di sini kita memiliki 'A' adalah desimal 65. 410 00:26:36,920 --> 00:26:45,120 Tapi aku akan pergi dengan heksadesimal, yaitu Ox41. 411 00:26:45,120 --> 00:26:48,280 Cukup yakin kita melihat itu di kelas. Saya pikir kita melihatnya di kelas 412 00:26:48,280 --> 00:26:52,730 bahwa itu cukup mudah untuk mengkonversi dari heksadesimal ke biner. 413 00:26:52,730 --> 00:26:55,280 Jadi di sini, jika saya ingin menempatkan 4 ke biner, 414 00:26:55,280 --> 00:26:59,550 itu hanya akan menjadi 0100. 415 00:26:59,550 --> 00:27:03,620 Ini adalah 1 tempat ini, tempat ini 2, tempat 4, jadi ini adalah 4. 416 00:27:03,620 --> 00:27:08,550 Lalu aku dapat membagi 1 ke biner, yang akan menjadi 0001. 417 00:27:08,550 --> 00:27:14,280 Dan jadi ini akan menjadi representasi dari 'A' dalam biner. 418 00:27:14,280 --> 00:27:22,720 Mengambil huruf kecil 'a', sekarang akan menjadi Ox61, 419 00:27:22,720 --> 00:27:27,050 mana, membagi ini menjadi biner, sehingga 6 - 420 00:27:27,050 --> 00:27:37,830 Mari kita benar-benar melakukannya - apakah ada ada penghapus? Eraser. 421 00:27:37,830 --> 00:27:48,220 Ox61. Jadi membelah 6 menjadi biner akan menjadi 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 Dan membelah 1 akan menjadi 0001. 423 00:27:54,610 --> 00:27:56,520 Melihat perbedaan antara 2, 424 00:27:56,520 --> 00:28:04,250 kita melihat bahwa satu-satunya perbedaan antara huruf kecil dan modal 'A' adalah bit tunggal ini. 425 00:28:04,250 --> 00:28:11,810 Jadi datang kembali ke sini - baik saja. 426 00:28:11,810 --> 00:28:15,920 Kembali ke sini, jika kita melihat apa bit OX20 adalah, 427 00:28:15,920 --> 00:28:22,210 sehingga membelah OX20 ke biner, 428 00:28:22,210 --> 00:28:27,310 adalah 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 OX20, hanya sedikit yang diatur sedikit ini bahwa kita prihatin dengan, 430 00:28:33,470 --> 00:28:38,210 dengan beralih antara modal dan huruf kecil 'a'. 431 00:28:38,210 --> 00:28:47,610 Jika saya atau 'A', yang merupakan salah satu ini, 'A', 432 00:28:47,610 --> 00:28:50,580 jika saya atau 'A' dengan OX20, 433 00:28:50,580 --> 00:28:53,490 apa yang akan saya dapatkan? 434 00:28:53,490 --> 00:28:58,960 [Student, tidak terdengar] >> huruf kecil 'a', karena itu akan membalik bit ini ke 1. 435 00:28:58,960 --> 00:29:04,170 Dan jika saya atau 'a' dengan OX20, apa yang akan saya dapatkan? 436 00:29:04,170 --> 00:29:08,780 Huruf kecil, karena hanya oring 'a' dengan OX20, 437 00:29:08,780 --> 00:29:14,580 Aku hanya akan oring bit tunggal ini ke 1, itu sudah menjadi 1, jadi tidak masalah. 438 00:29:14,580 --> 00:29:17,960 Jadi kita mendapatkan 'a' dan 'a'. 439 00:29:17,960 --> 00:29:24,820 Bitwise >> dan. Sekali lagi, kita dapat menganggap ini sebagai mitra logis dan kami. 440 00:29:24,820 --> 00:29:28,180 Di sisi kiri kita memiliki benar & benar. 441 00:29:28,180 --> 00:29:31,160 Ini akan menjadi kenyataan, dan untuk semua kasus, 442 00:29:31,160 --> 00:29:36,270 salah & benar atau benar & palsu, atau palsu & palsu, 443 00:29:36,270 --> 00:29:38,550 tak satu pun dari hal-hal yang benar. 444 00:29:38,550 --> 00:29:44,170 Jadi apa yang kita akhirnya mendapatkan adalah 1000. 445 00:29:44,170 --> 00:29:48,830 Jadi sekarang, di sini, di sinilah saya telah menggunakan bitwise terpercaya tidak, 446 00:29:48,830 --> 00:29:52,230 di mana kami memiliki OX20. 447 00:29:52,230 --> 00:29:54,350 Jadi ini adalah OX20. 448 00:29:54,350 --> 00:29:59,570 Sekarang apa yang ingin saya lakukan, bitwise ~ of OX20. 449 00:29:59,570 --> 00:30:03,600 Itu akan membalik semua bit. 450 00:30:03,600 --> 00:30:09,330 Jadi saya punya 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 Dan 'A' anded dengan ~ OX20 akan memberikan apa? 452 00:30:18,940 --> 00:30:22,430 Hanya sedikit kita benar-benar perlu untuk berpikir tentang yang satu ini, 453 00:30:22,430 --> 00:30:26,020 karena, jika semua bit ini di set ke 1, 454 00:30:26,020 --> 00:30:29,000 maka kita akan mendapatkan apa yang 'A' itu, 455 00:30:29,000 --> 00:30:31,260 kecuali, mungkin, apa yang sedikit ini. 456 00:30:31,260 --> 00:30:34,460 Karena jika itu adalah 1, sekarang akan diatur ke 0, 457 00:30:34,460 --> 00:30:39,810 karena apa pun ini, anded dengan ini akan menjadi 0. 458 00:30:39,810 --> 00:30:43,280 Jadi apa yang 'A' & ~ OX20 akan memberi saya? 459 00:30:43,280 --> 00:30:48,200 [Siswa menjawab, terdengar] >> Dan apa yang 'a' dan - itu 'A'. 460 00:30:48,200 --> 00:30:52,170 Dan apa yang 'a' & ~ OX20 akan memberi saya? 461 00:30:52,170 --> 00:30:56,720 'A.' Karena ini saat ini menjadi 1. 462 00:30:56,720 --> 00:30:59,570 Anding dengan 0 ini akan membuatnya menjadi 0, 463 00:30:59,570 --> 00:31:02,530 dan sekarang kita akan mendapatkan 'A'. 464 00:31:02,530 --> 00:31:06,600 >> Keduanya 'A', dan terakhir tapi paling tidak dari jenis ini, 465 00:31:06,600 --> 00:31:10,830 kita memiliki XOR. Ini sangat mirip atau, 466 00:31:10,830 --> 00:31:14,400 kecuali itu berarti eksklusif atau. 467 00:31:14,400 --> 00:31:18,420 Ini seperti apa yang biasanya Anda anggap sebagai atau di dunia nyata. 468 00:31:18,420 --> 00:31:23,190 Jadi yang Anda lakukan baik 'x' atau 'y', tapi tidak keduanya. 469 00:31:23,190 --> 00:31:28,700 Berikut 1 ^ 1 akan menjadi 0. 470 00:31:28,700 --> 00:31:33,650 Karena benar, ini adalah - itu tidak bekerja dengan baik dengan benar logis dan palsu 471 00:31:33,650 --> 00:31:37,150 sebagai bitwise & dan atau melakukan, 472 00:31:37,150 --> 00:31:40,100 tapi benar ^ benar adalah palsu. 473 00:31:40,100 --> 00:31:44,810 Karena kita hanya ingin mengembalikan true jika hanya salah satu dari mereka adalah benar. 474 00:31:44,810 --> 00:31:50,950 Jadi 1 ^ 1 adalah 0. Bagaimana dengan 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Adalah 1. 1 ^ 0 adalah 1, 0 ^ 0 0. 476 00:31:56,010 --> 00:32:03,890 Jadi dalam semua keadaan, 0 bitwise sesuatu 0 akan menjadi 0. 477 00:32:03,890 --> 00:32:10,270 1 bitwise sesuatu 0 atau 0 bitwise 1, 478 00:32:10,270 --> 00:32:14,660 apakah itu | atau ^, itu akan menjadi 1, dan jika itu & itu akan menjadi 0. 479 00:32:14,660 --> 00:32:20,850 Dan satu-satunya kasus di mana 1 bitwise 1 tidak 1 adalah dengan eksklusif atau. 480 00:32:20,850 --> 00:32:24,580 Itu 0110. 481 00:32:24,580 --> 00:32:36,520 Jadi di sini sekarang, menggunakan XOR - jadi kita kembali pada 20. 482 00:32:36,520 --> 00:32:43,480 'A' ^ OX20 adalah 2 bit ini kita membandingkan. 483 00:32:43,480 --> 00:32:50,020 Jadi 1 ^ 0 akan memberi saya apa? A satu. 484 00:32:50,020 --> 00:32:58,430 'A' ^ OX20 akan memberi saya? Huruf kecil a. 485 00:32:58,430 --> 00:33:04,010 'A' ^ OX20 akan memberi saya? Modal A. 486 00:33:04,010 --> 00:33:09,310 Karena apa pun ini lakukan, XORing ini dengan OX20 487 00:33:09,310 --> 00:33:15,380 secara efektif membalik apapun bit ini. 488 00:33:15,380 --> 00:33:21,240 Jika ini adalah 0, sekarang akan menjadi 1. 489 00:33:21,240 --> 00:33:26,160 Karena ini adalah 1, 1 ^ 1 adalah 0. 490 00:33:26,160 --> 00:33:33,280 Jadi kami 'a' menjadi 'A', dan kami 'A' telah menjadi 'a'. 491 00:33:33,280 --> 00:33:36,910 Jadi XOR adalah cara yang benar-benar nyaman hanya membalik kasus ini. 492 00:33:36,910 --> 00:33:39,960 Anda hanya ingin iterate atas serangkaian huruf 493 00:33:39,960 --> 00:33:44,330 dan alternatif kasus setiap karakter tunggal, 494 00:33:44,330 --> 00:33:50,680 Anda hanya XOR segala sesuatu dengan OX20. 495 00:33:50,680 --> 00:33:55,220 >> Sekarang kita telah meninggalkan shift. Bergeser ke kiri hanya akan, pada dasarnya, 496 00:33:55,220 --> 00:34:01,250 mendorong semua nomor ke dalam, atau ke kiri, dan masukkan 0 di belakang mereka. 497 00:34:01,250 --> 00:34:05,550 Jadi di sini kita memiliki 00.001.101. 498 00:34:05,550 --> 00:34:08,560 Kita akan mendorong 3 0 dalam dari kanan, 499 00:34:08,560 --> 00:34:13,580 dan kita mendapatkan 01.101.000. 500 00:34:13,580 --> 00:34:16,380 Dalam hal nonbinary, 501 00:34:16,380 --> 00:34:24,699 kita melihat bahwa itu benar-benar berurusan 13 kiri bergeser dengan 3, yang memberi kami 104. 502 00:34:24,699 --> 00:34:32,530 Jadi pergeseran kiri, kita lihat di sini, x << y pada dasarnya adalah x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 adalah 8, jadi 13 * 8 adalah 104. 504 00:34:40,139 --> 00:34:45,679 Jika Anda hanya berpikir tentang biner secara umum, bagaimana setiap digit, 505 00:34:45,679 --> 00:34:49,530 jika kita mulai dari kanan, itu adalah 1 s tempat, maka tempat 2, maka tempat itu 4. 506 00:34:49,530 --> 00:34:51,330 Jadi dengan mendorong dalam 0 dari kanan, 507 00:34:51,330 --> 00:34:55,080 kami hanya mendorong hal-hal yang berada di tempat 4 untuk tempat 8 ini, 508 00:34:55,080 --> 00:34:57,920 dan hal-hal yang berada di tempat 8 untuk tempat 16 itu. 509 00:34:57,920 --> 00:35:01,280 Setiap pergeseran hanya mengalikan dengan 2. Ya? 510 00:35:01,280 --> 00:35:05,210 [Student] Apa yang terjadi jika Anda bergeser dengan 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Jika Anda bergeser dengan 5 Anda hanya akan kehilangan angka. 512 00:35:10,790 --> 00:35:15,410 Tak pelak lagi, itu hal yang sama. Seperti, bilangan bulat hanya 32 bit, 513 00:35:15,410 --> 00:35:20,750 jadi jika Anda menambahkan 2 bilangan bulat yang sangat besar, hal itu tidak masuk dalam integer. 514 00:35:20,750 --> 00:35:23,660 Jadi hal yang sama di sini. Jika Anda digeser oleh 5, 515 00:35:23,660 --> 00:35:25,650 kita hanya akan kehilangan satu. 516 00:35:25,650 --> 00:35:28,820 Dan itu jenis apa yang saya maksud dengan "kasar," 517 00:35:28,820 --> 00:35:37,470 di mana jika Anda bergeser terlalu jauh, Anda kehilangan bit. 518 00:35:37,470 --> 00:35:39,830 >> Pergeseran kanan akan menjadi sebaliknya, 519 00:35:39,830 --> 00:35:43,090 di mana kita akan mendorong 0 di bagian akhir, 520 00:35:43,090 --> 00:35:48,400 dan untuk tujuan kita, isikan 0 dari kiri. 521 00:35:48,400 --> 00:35:52,910 Jadi melakukan hal ini, kita pada dasarnya membalikkan apa yang telah kita lakukan. 522 00:35:52,910 --> 00:35:57,780 Dan kita melihat bahwa tiga 0 di sebelah kanan baru saja jatuh, 523 00:35:57,780 --> 00:36:02,020 dan kami telah mendorong 1101 semua jalan ke kanan. 524 00:36:02,020 --> 00:36:08,380 Ini adalah melakukan 104 >> 3, yang, efektif, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Jadi sekarang, di sini, itu ide yang sama. 526 00:36:11,200 --> 00:36:18,720 Mengapa hanya kira-kira x / 2 ^ y, dan tidak benar-benar x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Karena jika saya telah digeser oleh 4, aku akan kehilangan 1. 528 00:36:22,240 --> 00:36:25,950 Pada dasarnya, apa yang Anda pikirkan, hanya memikirkan pembagian integer pada umumnya. 529 00:36:25,950 --> 00:36:31,070 Jadi, seperti 5/2 adalah 2. Ini bukan 2.5. 530 00:36:31,070 --> 00:36:35,000 Ini ide yang sama di sini. Ketika kita membagi dengan 2, 531 00:36:35,000 --> 00:36:39,910 kita bisa kehilangan bit aneh sepanjang jalan. 532 00:36:39,910 --> 00:36:43,870 Jadi sekarang - itu saja untuk bitwise. Itu semua yang perlu Anda ketahui. 533 00:36:43,870 --> 00:36:46,340 Ingat kasus penggunaan kita lihat di kelas, 534 00:36:46,340 --> 00:36:49,340 seperti masker sedikit berguna bagi operator bitwise, 535 00:36:49,340 --> 00:36:53,220 atau Anda menggunakannya untuk masker bit. 536 00:36:53,220 --> 00:36:58,620 Huruf kapital dan huruf kecil, konversi adalah contoh yang cukup prototipikal. 537 00:36:58,620 --> 00:37:01,640 >> Oke, jadi serangan buffer overflow. 538 00:37:01,640 --> 00:37:05,110 Siapapun ingat apa yang salah dengan fungsi ini? 539 00:37:05,110 --> 00:37:10,140 Perhatikan kita mendeklarasikan sebuah array dari 12 byte, 12 chars, 540 00:37:10,140 --> 00:37:18,510 dan kemudian kita copy ke dalam buffer kita dari 12 chars seluruh string bar. 541 00:37:18,510 --> 00:37:25,080 Jadi apa masalahnya di sini? 542 00:37:25,080 --> 00:37:32,270 Keajaiban nomor 12 harus cukup banyak segera bermunculan sebagai - mengapa 12? 543 00:37:32,270 --> 00:37:35,050 Bagaimana jika bar terjadi menjadi lebih dari 12 karakter? 544 00:37:35,050 --> 00:37:41,200 Bagaimana jika bar jutaan karakter? 545 00:37:41,200 --> 00:37:46,010 Di sini masalahnya adalah memcpy. Jika bar cukup panjang, 546 00:37:46,010 --> 00:37:50,330 itu akan hanya benar-benar - 'c', 'c' tidak peduli bahwa itu hanya 12 karakter; 547 00:37:50,330 --> 00:37:53,280 'C' tidak peduli bahwa ia tidak dapat cocok dengan banyak byte. 548 00:37:53,280 --> 00:37:58,250 Ini akan hanya benar-benar menimpa char, 12 bytes kami telah dialokasikan untuk itu, 549 00:37:58,250 --> 00:38:01,830 dan segala sesuatu melewatinya dalam memori yang tidak benar-benar milik buffer yang 550 00:38:01,830 --> 00:38:06,520 dengan apa pun string bar. 551 00:38:06,520 --> 00:38:09,780 Jadi ini adalah gambar yang kita lihat di kelas 552 00:38:09,780 --> 00:38:12,220 di mana kita memiliki tumpukan kami tumbuh dewasa. 553 00:38:12,220 --> 00:38:16,040 Anda harus digunakan untuk foto-foto ini atau mendapatkan akrab dengan mereka lagi. 554 00:38:16,040 --> 00:38:21,260 Kami telah tumpukan kami tumbuh dewasa, alamat memori mulai dari 0 di atas 555 00:38:21,260 --> 00:38:26,270 dan tumbuh ke bawah seperti 4 miliar di bagian bawah. 556 00:38:26,270 --> 00:38:28,820 Kami memiliki array kita 'c' di suatu tempat di memori, 557 00:38:28,820 --> 00:38:32,260 maka kita memiliki pointer kita ke bar tepat di bawahnya, 558 00:38:32,260 --> 00:38:38,720 dan kemudian kita memiliki frame ini pointer disimpan dalam alamat kami kembali dan tumpukan orangtua rutin kita. 559 00:38:38,720 --> 00:38:40,800 Ingat apa alamat kembali? 560 00:38:40,800 --> 00:38:45,360 Justru ketika main memanggil fungsi foo, panggilan fungsi bar, 561 00:38:45,360 --> 00:38:48,100 pasti, bar kembali. 562 00:38:48,100 --> 00:38:52,610 Jadi, ketika bar kembali, mereka perlu tahu bahwa itu akan kembali ke foo yang memanggilnya. 563 00:38:52,610 --> 00:39:01,360 Jadi alamat pengirim adalah alamat dari fungsi yang telah kembali ke ketika fungsi kembali. 564 00:39:01,360 --> 00:39:05,830 Alasan yang penting untuk serangan buffer overflow adalah karena, nyaman, 565 00:39:05,830 --> 00:39:09,580 hacker ingin mengubah alamat kembali. 566 00:39:09,580 --> 00:39:14,950 Alih-alih kembali ke foo, aku akan kembali ke mana pun hacker ingin aku untuk kembali ke. 567 00:39:14,950 --> 00:39:17,760 Dan, mudah, di mana hacker sering ingin kembali ke 568 00:39:17,760 --> 00:39:22,400 adalah awal dari buffer yang kita awalnya. 569 00:39:22,400 --> 00:39:26,170 Jadi perhatikan, sekali lagi, Little Indian. 570 00:39:26,170 --> 00:39:28,490 Alat adalah contoh dari sistem India kecil, 571 00:39:28,490 --> 00:39:34,140 jadi integer atau pointer disimpan dengan byte terbalik. 572 00:39:34,140 --> 00:39:38,980 Jadi di sini kita melihat - apakah ini? Ya. 573 00:39:38,980 --> 00:39:45,660 Kita melihat Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Ingat digit heksadesimal? 575 00:39:48,250 --> 00:39:50,640 Kami tidak membalikkan digit heksadesimal di Little India, 576 00:39:50,640 --> 00:39:56,110 karena 2 digit heksadesimal membuat sebuah byte tunggal, dan kami membalikkan byte. 577 00:39:56,110 --> 00:40:00,300 Itulah mengapa kami tidak menyimpan, seperti, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Kami menyimpan, sebaliknya, setiap pasangan 2 digit, mulai dari sebelah kanan. 579 00:40:07,520 --> 00:40:10,880 Alamat yang mengacu pada alamat awal 580 00:40:10,880 --> 00:40:15,190 buffer kita bahwa kita benar-benar ingin menyalin ke dalam tempat pertama. 581 00:40:15,190 --> 00:40:19,230 Alasan yang berguna karena, bagaimana jika penyerang 582 00:40:19,230 --> 00:40:24,100 terjadi, alih-alih memiliki string yang hanya 583 00:40:24,100 --> 00:40:27,060 string berbahaya seperti, nama mereka atau sesuatu, 584 00:40:27,060 --> 00:40:33,900 bagaimana jika, sebaliknya, string yang hanya beberapa kode sewenang-wenang 585 00:40:33,900 --> 00:40:38,610 yang melakukan apa pun yang mereka ingin lakukan? 586 00:40:38,610 --> 00:40:45,630 Jadi mereka bisa - Saya tidak bisa memikirkan kode keren. 587 00:40:45,630 --> 00:40:47,780 Bisa apa saja, meskipun. Setiap kode bencana. 588 00:40:47,780 --> 00:40:51,440 Jika mereka ingin, mereka hanya bisa melakukan sesuatu pada kesalahan seg, tapi itu akan menjadi sia-sia. 589 00:40:51,440 --> 00:40:54,950 Mereka biasanya melakukannya untuk hack sistem anda. 590 00:40:54,950 --> 00:40:59,930 >> Oke. Perpustakaan CS50. 591 00:40:59,930 --> 00:41:04,800 Hal ini, pada dasarnya, getInt, getString, semua fungsi yang kami sediakan untuk Anda. 592 00:41:04,800 --> 00:41:10,630 Jadi kita memiliki char * String, dan itulah abstraksi yang kita meniup 593 00:41:10,630 --> 00:41:12,450 di beberapa titik selama semester. 594 00:41:12,450 --> 00:41:18,220 Ingat bahwa string hanya sebuah array karakter. 595 00:41:18,220 --> 00:41:23,240 Jadi di sini kita melihat sebuah versi singkat dari getString. 596 00:41:23,240 --> 00:41:25,920 Anda harus melihat ke belakang untuk mengingat bagaimana hal itu benar-benar dilaksanakan. 597 00:41:25,920 --> 00:41:30,950 Detail kunci, perhatikan kita masuk satu karakter pada satu waktu 598 00:41:30,950 --> 00:41:34,570 dari standar, yang hanya seperti kita mengetik di keyboard. 599 00:41:34,570 --> 00:41:37,890 Jadi satu karakter pada satu waktu, dan jika kita terlalu banyak karakter, 600 00:41:37,890 --> 00:41:40,580 jadi jika n + 1 lebih besar dari kapasitas, 601 00:41:40,580 --> 00:41:44,140 maka kita perlu meningkatkan kapasitas buffer kita. 602 00:41:44,140 --> 00:41:47,780 Jadi di sini kita menggandakan ukuran buffer kita. 603 00:41:47,780 --> 00:41:51,840 Dan itu terus terjadi, kita memasukkan karakter ke dalam buffer kita 604 00:41:51,840 --> 00:41:56,220 sampai kita menerima baris baru atau akhir file atau apa pun, 605 00:41:56,220 --> 00:41:59,380 dalam hal ini, kita sudah selesai dengan string dan kemudian getString nyata 606 00:41:59,380 --> 00:42:05,120 menyusut memori, seperti jika kita dialokasikan terlalu banyak memori itu akan kembali dan menyusut sedikit. 607 00:42:05,120 --> 00:42:08,830 Jadi kita tidak menunjukkan bahwa, tetapi gagasan utama adalah 608 00:42:08,830 --> 00:42:11,960 itu harus dibaca dalam satu karakter pada satu waktu. 609 00:42:11,960 --> 00:42:17,140 Hal ini tidak bisa hanya membaca dalam seluruh hal sekaligus, 610 00:42:17,140 --> 00:42:19,550 karena penyangga mereka hanya dengan ukuran tertentu. 611 00:42:19,550 --> 00:42:26,590 Jadi jika string yang mencoba untuk memasukkan ke dalam buffer terlalu besar, maka akan meluap. 612 00:42:26,590 --> 00:42:28,940 Jadi di sini kita mencegah hal itu dengan hanya membaca satu karakter 613 00:42:28,940 --> 00:42:33,750 pada suatu waktu dan berkembang setiap kali kita perlu. 614 00:42:33,750 --> 00:42:40,270 Jadi getInt dan fungsi perpustakaan CS50 lainnya cenderung menggunakan getString 615 00:42:40,270 --> 00:42:42,310 dalam implementasi mereka. 616 00:42:42,310 --> 00:42:45,370 Jadi saya menyoroti hal-hal penting di sini. 617 00:42:45,370 --> 00:42:49,460 Ini panggilan getString untuk mendapatkan string. 618 00:42:49,460 --> 00:42:51,710 Jika getString gagal kembali memori, 619 00:42:51,710 --> 00:42:54,270 ingat bahwa getString mallocs sesuatu, sehingga setiap kali Anda memanggil getString 620 00:42:54,270 --> 00:42:57,820 Anda tidak perlu (tidak dapat dimengerti) gratis yang string yang Anda punya. 621 00:42:57,820 --> 00:43:02,870 Jadi di sini, jika gagal untuk malloc sesuatu, kita kembali INT_MAX hanya sebagai bendera itu, 622 00:43:02,870 --> 00:43:05,650 hey, kami tidak benar-benar bisa mendapatkan integer. 623 00:43:05,650 --> 00:43:10,830 Anda harus mengabaikan apa pun yang saya kembali kepada Anda, atau 624 00:43:10,830 --> 00:43:15,540 Anda tidak harus memperlakukan ini sebagai masukan yang valid. 625 00:43:15,540 --> 00:43:21,360 Akhirnya, dengan asumsi bahwa tidak berhasil, kita menggunakan sscanf dengan bendera khusus, 626 00:43:21,360 --> 00:43:23,820 yang berarti, pertama cocok integer, 627 00:43:23,820 --> 00:43:26,770 kemudian ditemukan pada karakter setelah integer yang. 628 00:43:26,770 --> 00:43:29,070 Jadi perhatikan kita ingin sama dengan 1. 629 00:43:29,070 --> 00:43:32,940 Jadi kembali sscanf berapa banyak pertandingan jika berhasil dibuat? 630 00:43:32,940 --> 00:43:37,010 Ini akan mengembalikan 1 jika berhasil cocok integer, 631 00:43:37,010 --> 00:43:40,890 itu akan kembali 0 jika tidak cocok integer, dan akan kembali 2 632 00:43:40,890 --> 00:43:45,920 jika cocok integer diikuti oleh beberapa karakter. 633 00:43:45,920 --> 00:43:49,780 Jadi perhatikan kita coba lagi jika kita cocok apa-apa tapi 1. 634 00:43:49,780 --> 00:43:55,230 Jadi, jika kita memasuki 1, 2, 3, C, atau 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 maka 1, 2, 3 akan bisa disimpan dalam integer, 636 00:43:57,400 --> 00:43:59,620 X akan bisa disimpan di karakter, 637 00:43:59,620 --> 00:44:06,410 sscanf akan kembali 2, dan kami akan mencoba lagi, karena kami hanya ingin integer. 638 00:44:06,410 --> 00:44:09,810 >> Cepat bertiup melalui HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language adalah struktur dan semantik web. 640 00:44:15,340 --> 00:44:19,960 Berikut adalah contoh dari kuliah di mana kita memiliki tag HTML. 641 00:44:19,960 --> 00:44:22,110 Kami memiliki tag kepala, tag tubuh, 642 00:44:22,110 --> 00:44:27,770 kami memiliki contoh tag kosong di mana kita benar-benar tidak memiliki awal dan tag dekat, 643 00:44:27,770 --> 00:44:30,820 kita hanya memiliki link dan gambar. 644 00:44:30,820 --> 00:44:38,480 Tidak ada penutupan tag gambar, hanya ada satu tag yang menyelesaikan semua tag perlu dilakukan. 645 00:44:38,480 --> 00:44:41,950 Link adalah contoh, kita akan melihat bagaimana Anda link ke CSS, 646 00:44:41,950 --> 00:44:45,910 script adalah contoh bagaimana Anda link ke sebuah JavaScript eksternal. 647 00:44:45,910 --> 00:44:53,100 Ini cukup sederhana, dan ingat, HTML bukan bahasa pemrograman. 648 00:44:53,100 --> 00:44:58,250 Di sini, ingat bagaimana Anda akan mendefinisikan bentuk atau setidaknya apa ini akan lakukan? 649 00:44:58,250 --> 00:45:01,740 Bentuk seperti itu memiliki tindakan dan metode. 650 00:45:01,740 --> 00:45:06,210 Metode Anda akan hanya pernah lihat adalah GET dan POST. 651 00:45:06,210 --> 00:45:09,040 Jadi GET adalah versi mana hal akan dimasukkan ke dalam URL. 652 00:45:09,040 --> 00:45:11,680 POST adalah di mana tidak dimasukkan ke dalam URL. 653 00:45:11,680 --> 00:45:18,520 Sebaliknya, data dari formulir tersebut dimasukkan lebih tersembunyi dalam permintaan HTTP. 654 00:45:18,520 --> 00:45:22,390 Jadi di sini, tindakan mendefinisikan mana permintaan HTTP berjalan. 655 00:45:22,390 --> 00:45:27,490 Dimana itu akan adalah google.com / search. 656 00:45:27,490 --> 00:45:32,890 Metode. Ingat perbedaan antara GET dan POST, 657 00:45:32,890 --> 00:45:37,200 dan, hanya mengatakan sebagai contoh, jika Anda ingin sesuatu bookmark. 658 00:45:37,200 --> 00:45:40,660 Anda tidak akan pernah dapat penunjuk URL POST 659 00:45:40,660 --> 00:45:44,970 karena data tidak termasuk dalam URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, sekarang, adalah HyperText Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 The HyperText Transfer Protocol, Anda akan mengharapkan untuk mentransfer 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, dan itu tidak. 663 00:45:57,710 --> 00:46:00,170 Tetapi juga transfer setiap gambar yang Anda temukan di Web, 664 00:46:00,170 --> 00:46:05,400 download yang Anda buat mulai sebagai permintaan HTTP. 665 00:46:05,400 --> 00:46:10,350 Jadi HTTP hanyalah bahasa dari World Wide Web. 666 00:46:10,350 --> 00:46:15,610 Dan di sini Anda perlu mengenali jenis permintaan HTTP. 667 00:46:15,610 --> 00:46:19,300 Berikut HTTP/1.1 di samping hanya mengatakan itu versi 668 00:46:19,300 --> 00:46:21,570 protokol Saya menggunakan. 669 00:46:21,570 --> 00:46:25,770 Ini cukup banyak selalu akan menjadi HTTP/1.1, karena Anda akan melihatnya. 670 00:46:25,770 --> 00:46:30,110 Kemudian kita melihat bahwa ini adalah GET, alternatif menjadi POST, yang mungkin Anda lihat. 671 00:46:30,110 --> 00:46:40,790 Dan URL yang saya mencoba untuk mengunjungi adalah www.google.com/search?q = bla, bla, bla. 672 00:46:40,790 --> 00:46:44,240 Jadi ingat bahwa ini, tanda tanya q = bla bla bla, 673 00:46:44,240 --> 00:46:49,040 adalah semacam hal-hal yang diajukan oleh formulir. 674 00:46:49,040 --> 00:46:51,830 Tanggapan itu mungkin kembali ke saya akan terlihat seperti ini. 675 00:46:51,830 --> 00:46:54,050 Sekali lagi, dimulai dengan protokol, yang akan menjadi itu, 676 00:46:54,050 --> 00:46:59,190 diikuti dengan kode status. Berikut ini 200 OK. 677 00:46:59,190 --> 00:47:05,060 Dan akhirnya, halaman web yang saya benar-benar meminta akan diikuti. 678 00:47:05,060 --> 00:47:08,210 Kode status yang mungkin Anda mungkin melihat, dan Anda harus tahu beberapa dari mereka. 679 00:47:08,210 --> 00:47:12,770 200 OK Anda mungkin telah melihat sebelumnya. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Not Found, 500 Internal Server Kesalahan 681 00:47:17,830 --> 00:47:22,140 biasanya jika Anda pergi ke sebuah situs web dan ada sesuatu yang rusak atau crash kode PHP mereka, 682 00:47:22,140 --> 00:47:24,930 sedangkan pada alat yang kita miliki bahwa kotak jeruk besar 683 00:47:24,930 --> 00:47:27,830 yang muncul dan berkata, seperti, ada sesuatu yang salah, kode ini tidak bekerja 684 00:47:27,830 --> 00:47:30,380 atau fungsi ini buruk. 685 00:47:30,380 --> 00:47:33,230 Biasanya website tidak ingin kau mengetahui apa fungsi sebenarnya buruk, 686 00:47:33,230 --> 00:47:37,880 Jadi alih-alih mereka hanya akan memberikan 500 Kesalahan Internal Server. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP adalah 1 lapisan bawah HTTP. 688 00:47:43,050 --> 00:47:47,550 Ingat bahwa ada Internet di luar dari World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Seperti jika Anda memainkan game online yang tidak melalui HTTP, 690 00:47:52,270 --> 00:47:55,740 itu akan melalui yang berbeda - itu masih menggunakan Internet, 691 00:47:55,740 --> 00:47:58,900 tetapi tidak menggunakan HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP adalah salah satu contoh protokol yang dibangun di atas TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP harfiah berarti Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Setiap komputer memiliki alamat IP, mereka adalah hal-hal 4-digit 695 00:48:11,500 --> 00:48:16,510 seperti 192.168.2.1, atau apa pun, yang cenderung menjadi satu lokal. 696 00:48:16,510 --> 00:48:23,390 Tapi itu adalah pola alamat IP. 697 00:48:23,390 --> 00:48:29,060 Jadi DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 itulah yang menerjemahkan hal-hal seperti google.com ke alamat IP yang sebenarnya. 699 00:48:33,410 --> 00:48:37,700 Jadi jika Anda mengetik alamat IP ke URL, 700 00:48:37,700 --> 00:48:40,850 yang akan membawa Anda ke Google, tapi Anda cenderung untuk tidak mengingat hal-hal. 701 00:48:40,850 --> 00:48:45,470 Anda cenderung untuk mengingat google.com sebagai gantinya. 702 00:48:45,470 --> 00:48:51,560 Hal terakhir yang kita miliki adalah port, di mana ini adalah bagian dari TCP IP. 703 00:48:51,560 --> 00:48:54,880 TCP tidak lebih. Pikirkan, seperti, Anda memiliki browser web Anda berjalan. 704 00:48:54,880 --> 00:48:58,670 Mungkin Anda memiliki beberapa aplikasi email berjalan; 705 00:48:58,670 --> 00:49:02,150 mungkin Anda memiliki beberapa program lain yang menggunakan Internet berjalan. 706 00:49:02,150 --> 00:49:05,090 Mereka semua membutuhkan akses ke Internet, 707 00:49:05,090 --> 00:49:08,100 tetapi komputer Anda hanya memiliki 1 kartu WiFi atau apa pun. 708 00:49:08,100 --> 00:49:10,780 Jadi port adalah cara bahwa kita mampu untuk berpisah 709 00:49:10,780 --> 00:49:13,550 bagaimana aplikasi ini dapat menggunakan Internet. 710 00:49:13,550 --> 00:49:17,230 Setiap aplikasi mendapat 1 port tertentu yang dapat mendengarkan pada, 711 00:49:17,230 --> 00:49:19,670 dan secara default, HTTP menggunakan port 80. 712 00:49:19,670 --> 00:49:22,410 Beberapa layanan email menggunakan 25. 713 00:49:22,410 --> 00:49:24,490 Yang rendah nomor cenderung reserved. 714 00:49:24,490 --> 00:49:29,270 Anda biasanya bisa mendapatkan yang lebih tinggi-nomor untuk diri sendiri. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Halaman web kita dengan gaya CSS, bukan dengan HTML. 717 00:49:36,030 --> 00:49:38,440 Ada 3 tempat Anda dapat menempatkan CSS Anda. 718 00:49:38,440 --> 00:49:46,300 Hal ini dapat inline, antara tag gaya, atau dalam file benar-benar terpisah dan kemudian dihubungkan masuk 719 00:49:46,300 --> 00:49:48,470 Dan di sini adalah hanya sebuah contoh dari CSS. 720 00:49:48,470 --> 00:49:50,450 Anda harus mengenali pola ini, 721 00:49:50,450 --> 00:49:54,310 mana contoh pertama kita cocok dengan tag tubuh, 722 00:49:54,310 --> 00:49:56,680 dan di sini kita berpusat tag tubuh. 723 00:49:56,680 --> 00:50:00,420 Contoh kedua, kita cocok hal 724 00:50:00,420 --> 00:50:04,740 dengan ID footer, dan kami menerapkan beberapa gaya untuk itu. 725 00:50:04,740 --> 00:50:07,310 Perhatikan bahwa ID footer teks-meluruskan ke kiri, 726 00:50:07,310 --> 00:50:09,840 sedangkan body text-meluruskan pusat. 727 00:50:09,840 --> 00:50:13,180 Footer adalah di dalam tubuh. 728 00:50:13,180 --> 00:50:16,470 Ini akan, sebaliknya, text-align kiri, meskipun tubuh mengatakan pusat text-align. 729 00:50:16,470 --> 00:50:18,880 Ini adalah seluruh Cascading bagian dari itu. 730 00:50:18,880 --> 00:50:22,110 Anda dapat memiliki - Anda dapat menentukan gaya untuk tubuh, 731 00:50:22,110 --> 00:50:25,320 dan kemudian hal-hal dalam tubuh Anda dapat menentukan gaya yang lebih spesifik, 732 00:50:25,320 --> 00:50:28,160 dan hal bekerja seperti yang Anda harapkan. 733 00:50:28,160 --> 00:50:34,420 Specifiers CSS lebih spesifik diutamakan. 734 00:50:34,420 --> 00:50:46,140 Saya pikir itu saja. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Hi everyone. Jika aku bisa mendapatkan perhatian Anda. 736 00:50:49,260 --> 00:50:53,990 Saya Ali dan aku akan pergi melalui PHP dan SQL sangat cepat. 737 00:50:53,990 --> 00:51:00,310 Jadi kita bisa mulai. PHP adalah singkatan dari PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 Dan seperti yang Anda semua harus tahu, itu adalah bahasa server-side scripting, 739 00:51:03,730 --> 00:51:06,800 dan kami menggunakannya untuk bagian belakang website, 740 00:51:06,800 --> 00:51:12,540 dan bagaimana hal itu tidak banyak perhitungan, bagian belakang layar. 741 00:51:12,540 --> 00:51:17,510 Sintaks. Ini tidak seperti C, kejutan, kejutan. 742 00:51:17,510 --> 00:51:22,060 Selalu harus mulai dengan, jika Anda dapat melihat, - aku tidak bisa bergerak maju. 743 00:51:22,060 --> 00:51:31,340 Anda dapat melihat Anda membutuhkan jenis baru dari kawat gigi dan kemudian Anda juga perlu? Php. 744 00:51:31,340 --> 00:51:35,780 Itu selalu bagaimana Anda harus membingkai teks PHP Anda, kode PHP Anda. 745 00:51:35,780 --> 00:51:39,180 Jadi tidak bisa hanya menjadi seperti C, di mana Anda jenis meletakkannya di pertama. 746 00:51:39,180 --> 00:51:42,290 Anda harus selalu mengelilinginya. 747 00:51:42,290 --> 00:51:47,610 Dan sekarang, sintaks utama adalah bahwa semua variabel harus mulai dengan karakter $. 748 00:51:47,610 --> 00:51:49,490 Anda perlu melakukannya ketika Anda mendefinisikan mereka, yang perlu Anda lakukan itu 749 00:51:49,490 --> 00:51:51,860 ketika Anda mengacu kepada mereka di kemudian hari. 750 00:51:51,860 --> 00:51:56,510 Anda selalu perlu $ itu. Ini baru teman terbaik Anda, cukup banyak. 751 00:51:56,510 --> 00:52:01,690 Anda tidak - tidak seperti C, Anda tidak perlu menempatkan apa jenis variabel itu. 752 00:52:01,690 --> 00:52:04,940 Jadi, sementara Anda perlu $, Anda tidak perlu menempatkan, seperti, 753 00:52:04,940 --> 00:52:09,470 int x atau tali y, dan sebagainya, dan sebagainya. 754 00:52:09,470 --> 00:52:11,490 Jadi sedikit perbedaan. 755 00:52:11,490 --> 00:52:15,590 Sebagai hasil dari ini, itu berarti bahwa PHP adalah jenis lemah. 756 00:52:15,590 --> 00:52:19,310 PHP adalah jenis bahasa lemah, dan telah lemah diketik variabel. 757 00:52:19,310 --> 00:52:24,020 Dengan kata lain, itu berarti bahwa Anda dapat beralih di antara berbagai jenis tipe variabel. 758 00:52:24,020 --> 00:52:27,230 Anda dapat menyimpan nomor 1 sebagai int, 759 00:52:27,230 --> 00:52:29,650 Anda dapat menyimpannya sebagai string, dan Anda dapat menyimpannya sebagai pelampung, 760 00:52:29,650 --> 00:52:33,550 dan itu semua akan menjadi nomor 1. 761 00:52:33,550 --> 00:52:36,080 Meskipun Anda menyimpannya dalam bentuk yang berbeda, 762 00:52:36,080 --> 00:52:39,120 itu masih - jenis variabel masih memegang pada akhirnya. 763 00:52:39,120 --> 00:52:41,540 Jadi jika Anda melihat di sini, jika Anda ingat dari pset 7, 764 00:52:41,540 --> 00:52:43,500 banyak dari Anda mungkin memiliki masalah dengan ini. 765 00:52:43,500 --> 00:52:47,280 Dua tanda-tanda yang sama, 3 tanda sama, 4 tanda-tanda yang sama. 766 00:52:47,280 --> 00:52:49,990 Oke, tidak ada tanda-tanda yang sama 4, tapi ada 2 dan 3. 767 00:52:49,990 --> 00:52:53,320 Anda menggunakan 2 tanda sama untuk memeriksa nilai-nilai. 768 00:52:53,320 --> 00:52:55,830 Hal ini dapat memeriksa seluruh jenis. 769 00:52:55,830 --> 00:52:58,770 Jadi, jika Anda dapat melihat pada contoh pertama, 770 00:52:58,770 --> 00:53:02,210 Saya memiliki num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Jadi int dan string Anda berdua, secara teknis, 1, 772 00:53:06,710 --> 00:53:10,790 tapi mereka tipe yang berbeda. Tapi untuk equals ganda, masih akan lulus. 773 00:53:10,790 --> 00:53:15,510 Namun, untuk equals tiga, ia akan mengecek nilai serta berbagai jenis. 774 00:53:15,510 --> 00:53:18,760 Itu berarti bahwa ia tidak akan lulus dalam kasus kedua di sini, 775 00:53:18,760 --> 00:53:22,350 di mana Anda menggunakan 3 tanda-tanda yang sama sebagai gantinya. 776 00:53:22,350 --> 00:53:26,590 Jadi itulah perbedaan utama yang harus Anda semua telah menunjukkan sekarang. 777 00:53:26,590 --> 00:53:31,570 >> String concatenation adalah hal lain yang kuat yang dapat Anda gunakan di PHP. 778 00:53:31,570 --> 00:53:34,080 Itu pada dasarnya hanya ini berguna notasi titik, 779 00:53:34,080 --> 00:53:36,230 dan itulah bagaimana Anda dapat mengikat string bersama-sama. 780 00:53:36,230 --> 00:53:40,800 Jadi jika Anda memiliki Cat dan Anda memiliki Anjing, dan Anda ingin menempatkan 2 string bersama-sama, 781 00:53:40,800 --> 00:53:44,080 Anda dapat menggunakan periode, dan itulah jenis cara kerjanya. 782 00:53:44,080 --> 00:53:46,660 Anda juga dapat hanya menempatkan mereka di samping satu sama lain, 783 00:53:46,660 --> 00:53:49,030 seperti yang Anda lihat di sini dalam contoh bawah, 784 00:53:49,030 --> 00:53:51,610 di mana saya telah gema senar 1, ruang string 2. 785 00:53:51,610 --> 00:53:56,930 PHP akan tahu untuk menggantikan mereka seperti itu. 786 00:53:56,930 --> 00:53:59,780 Array. Sekarang, di PHP, ada 2 jenis array. 787 00:53:59,780 --> 00:54:03,180 Anda dapat memiliki array biasa, dan Anda juga dapat memiliki array asosiatif, 788 00:54:03,180 --> 00:54:06,040 dan kita akan pergi melalui mereka sekarang. 789 00:54:06,040 --> 00:54:08,280 Array biasa hanya ini di C, 790 00:54:08,280 --> 00:54:11,240 dan sehingga Anda memiliki indeks yang diberi nomor. 791 00:54:11,240 --> 00:54:13,160 Saat ini kami hanya akan membuat satu dan menempatkan - 792 00:54:13,160 --> 00:54:15,500 jadi ini adalah bagaimana kita membuat array kosong, maka kita akan 793 00:54:15,500 --> 00:54:17,310 dimasukkan ke dalam nomor indeks 0. 794 00:54:17,310 --> 00:54:19,200 Kita akan menempatkan nomor 6, nilai 6. 795 00:54:19,200 --> 00:54:21,500 Anda bisa melihatnya di bagian bawah di sini. 796 00:54:21,500 --> 00:54:24,240 Where's - pada indeks nomor 1 kita akan menempatkan nilai angka 4, 797 00:54:24,240 --> 00:54:26,720 dan sehingga Anda dapat melihat ada 6, ada 4, 798 00:54:26,720 --> 00:54:29,160 dan kemudian sebagai kita mencetak sesuatu, 799 00:54:29,160 --> 00:54:33,550 ketika kita mencoba dan mencetak nilai yang disimpan pada indeks angka 0, 800 00:54:33,550 --> 00:54:36,900 maka kita akan melihat nilai 6 yang dicetak. Cool? 801 00:54:36,900 --> 00:54:40,160 Jadi itulah array biasa untuk Anda. 802 00:54:40,160 --> 00:54:42,750 Cara lain Anda juga dapat menambahkan sesuatu ke array biasa sekarang 803 00:54:42,750 --> 00:54:44,780 adalah Anda hanya dapat menambahkan mereka di akhir. 804 00:54:44,780 --> 00:54:47,240 Itu berarti bahwa Anda tidak harus menentukan indeks tertentu. 805 00:54:47,240 --> 00:54:51,000 Anda dapat melihat nomor, dan kemudian di kurung siku tidak ada indeks tertentu. 806 00:54:51,000 --> 00:54:56,270 Dan itu akan tahu - PHP akan tahu hanya menambahkannya ke akhir daftar, tempat gratis berikutnya. 807 00:54:56,270 --> 00:54:59,190 Sehingga Anda dapat melihat 1 di sana pada saat itu 0 spot, 808 00:54:59,190 --> 00:55:02,690 2 pergi di sana di tempat pertama. 809 00:55:02,690 --> 00:55:04,690 3 pergi - ditambahkan di sana juga. 810 00:55:04,690 --> 00:55:06,720 Sehingga jenis masuk akal. Kau hanya terus menambahkan itu, 811 00:55:06,720 --> 00:55:09,360 dan kemudian ketika kita menggemakan indeks nomor 1, 812 00:55:09,360 --> 00:55:13,080 itu akan mencetak nilai 2. 813 00:55:13,080 --> 00:55:16,800 >> Kemudian kita memiliki array yang array asosiatif. 814 00:55:16,800 --> 00:55:19,370 Array asosiatif, daripada harus indeks numerik, 815 00:55:19,370 --> 00:55:23,630 apa yang mereka lakukan adalah, mereka memiliki indeks yang oleh tali. 816 00:55:23,630 --> 00:55:25,670 Anda dapat melihat, bukan - Aku menyingkirkan semua indeks nomor, 817 00:55:25,670 --> 00:55:32,140 dan sekarang key1, key2, key3, dan mereka berada dalam tanda kutip ganda untuk menandakan bahwa mereka semua string. 818 00:55:32,140 --> 00:55:34,470 Jadi kita bisa memiliki contoh ini. 819 00:55:34,470 --> 00:55:38,790 Contoh dari hal ini adalah bahwa kita memiliki tf, dan itulah nama indeks. 820 00:55:38,790 --> 00:55:42,030 Kita akan menempatkan "Ali" sebagai nama, di indeks, kalori yang dimakan, 821 00:55:42,030 --> 00:55:47,640 kita dapat menempatkan int kali ini bukan string, 822 00:55:47,640 --> 00:55:52,240 dan kemudian pada orang-orang seperti indeks, kita dapat menempatkan seluruh array di dalamnya. 823 00:55:52,240 --> 00:55:55,490 Jadi ini adalah jenis - itu adalah konsep yang mirip dengan bagaimana kita harus 824 00:55:55,490 --> 00:55:58,930 indeks dengan angka, tetapi sekarang kita dapat mengubah indeks sekitar 825 00:55:58,930 --> 00:56:03,890 untuk memiliki mereka sebagai string sebagai gantinya. 826 00:56:03,890 --> 00:56:06,070 Anda juga dapat melakukan ini, selain hanya melakukannya secara individual, 827 00:56:06,070 --> 00:56:09,400 Anda dapat melakukan semuanya dalam satu potongan. Sehingga Anda dapat melihat bahwa tf array itu, 828 00:56:09,400 --> 00:56:13,350 dan kemudian kita mengatur mereka semua dalam satu raksasa persegi braket set. 829 00:56:13,350 --> 00:56:15,220 Sehingga dapat mempercepat pekerjaan. 830 00:56:15,220 --> 00:56:19,730 Ini lebih dari sebuah pilihan gaya daripada tidak. 831 00:56:19,730 --> 00:56:21,550 Kami juga memiliki loop. 832 00:56:21,550 --> 00:56:26,020 Dalam C kita memiliki loop yang bekerja seperti ini. 833 00:56:26,020 --> 00:56:29,690 Kami memiliki array kita, dan kami pergi dari indeks 0 sampai akhir daftar, 834 00:56:29,690 --> 00:56:31,740 dan kami mencetak itu semua, kan? 835 00:56:31,740 --> 00:56:33,880 Kecuali masalahnya adalah, untuk array asosiatif, 836 00:56:33,880 --> 00:56:36,610 kita tidak perlu tahu itu indeks numerik 837 00:56:36,610 --> 00:56:39,610 karena sekarang kita memiliki indeks tali. 838 00:56:39,610 --> 00:56:44,800 Sekarang kita menggunakan loop foreach, yang, sekali lagi, mudah-mudahan Anda digunakan dalam pset 7. 839 00:56:44,800 --> 00:56:48,930 Loop foreach hanya akan tahu setiap bagian dari daftar. 840 00:56:48,930 --> 00:56:52,450 Dan itu tidak harus tahu persis indeks numerik yang Anda miliki. 841 00:56:52,450 --> 00:56:56,490 Jadi Anda memiliki sintaks foreach, jadi foreach, Anda menempatkan array. 842 00:56:56,490 --> 00:57:00,430 Jadi array saya disebut pset, dan kemudian sebagai, kata seperti, 843 00:57:00,430 --> 00:57:04,530 dan kemudian Anda menempatkan variabel sementara lokal ini bahwa Anda akan menggunakan 844 00:57:04,530 --> 00:57:10,690 hanya untuk hal tertentu yang akan memegang spesifik - 845 00:57:10,690 --> 00:57:14,770 satu contoh atau satu bagian dari array. 846 00:57:14,770 --> 00:57:18,350 Pset num akan terus 1, dan kemudian mungkin akan terus nomor 6, 847 00:57:18,350 --> 00:57:20,410 dan kemudian akan terus nomor 2. 848 00:57:20,410 --> 00:57:26,630 Tapi dijamin untuk pergi melalui setiap nilai tunggal yang ada di array. 849 00:57:26,630 --> 00:57:30,530 Fungsi yang berguna yang harus Anda ketahui dalam PHP adalah membutuhkan, 850 00:57:30,530 --> 00:57:35,880 sehingga memastikan bahwa Anda termasuk file tertentu, echo, keluar, kosong. 851 00:57:35,880 --> 00:57:40,490 Saya sangat merekomendasikan Anda melihat pset 7 dan melihat fungsi-fungsi. 852 00:57:40,490 --> 00:57:42,810 Anda mungkin harus tahu mereka, 853 00:57:42,810 --> 00:57:47,060 jadi saya pasti akan tahu apa, tepatnya, mereka semua melakukan. 854 00:57:47,060 --> 00:57:50,080 >> Dan sekarang kita akan pergi melalui lingkup sangat cepat. 855 00:57:50,080 --> 00:57:53,490 Dalam ruang lingkup, PHP adalah jenis hal yang funky, tidak seperti C, 856 00:57:53,490 --> 00:57:56,170 dan jadi kita hanya akan pergi melalui itu dengan cepat. 857 00:57:56,170 --> 00:57:58,930 Jadi katakanlah kita mulai dari yang panah yang kita miliki di sana. 858 00:57:58,930 --> 00:58:02,900 Dan kita akan mulai dengan $ i. Jadi variabel 'i' akan menjadi 0, 859 00:58:02,900 --> 00:58:06,730 dan kita hanya akan terus mencetaknya dalam kotak putih besar di sana. 860 00:58:06,730 --> 00:58:09,220 Kita akan mulai dengan I0, dan kemudian kita akan echo. 861 00:58:09,220 --> 00:58:12,670 Jadi ada 0. 862 00:58:12,670 --> 00:58:15,210 Dan kemudian kita akan kenaikan itu dengan untuk loop, 863 00:58:15,210 --> 00:58:17,810 dan kemudian itu akan menjadi nilai 1. 864 00:58:17,810 --> 00:58:20,070 Salah satunya adalah kurang dari 3, sehingga akan melewati bahwa untuk loop, 865 00:58:20,070 --> 00:58:23,230 dan kemudian kita akan melihatnya dicetak lagi. 866 00:58:23,230 --> 00:58:25,520 Kita akan kenaikan lagi untuk 2, 867 00:58:25,520 --> 00:58:29,860 dan 2 adalah kurang dari 3, sehingga akan lulus untuk loop, dan itu akan mencetak 2. 868 00:58:29,860 --> 00:58:35,100 Kemudian Anda akan perhatikan bahwa 3 tidak kurang dari 3, jadi kita akan keluar dari untuk loop. 869 00:58:35,100 --> 00:58:40,050 Jadi sekarang kita sudah keluar, dan kemudian kami akan pergi ke aFunction. 870 00:58:40,050 --> 00:58:45,010 Oke. Jadi, Anda harus mencatat bahwa variabel ini yang kita buat, 871 00:58:45,010 --> 00:58:48,270 'i' variabel, tidak secara lokal scoped. 872 00:58:48,270 --> 00:58:50,280 Itu berarti bahwa itu tidak lokal ke loop, 873 00:58:50,280 --> 00:58:58,060 dan variabel yang kita masih dapat mengakses dan mengubah setelah itu, dan itu akan tetap efektif. 874 00:58:58,060 --> 00:59:02,160 Jadi, jika Anda pergi ke fungsi sekarang, Anda akan melihat bahwa kami juga menggunakan 'i' variabel, 875 00:59:02,160 --> 00:59:05,320 dan kita akan kenaikan 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Anda akan berpikir, pada awalnya, berdasarkan C, bahwa itu adalah salinan 'i' variabel. 877 00:59:09,410 --> 00:59:12,830 Ini merupakan hal yang sama sekali berbeda, yang benar. 878 00:59:12,830 --> 00:59:16,560 Jadi ketika kita mencetaknya, kita akan mencetak 'i' + +, yang akan mencetak bahwa 4, 879 00:59:16,560 --> 00:59:19,640 dan kemudian kita akan - maaf. 880 00:59:19,640 --> 00:59:22,030 Kemudian kita akan berakhir keluar dari fungsi itu, 881 00:59:22,030 --> 00:59:24,820 dan kita akan berada di tempat panah yang sekarang. 882 00:59:24,820 --> 00:59:29,190 Itu berarti bahwa saat itu, bagaimanapun, meskipun fungsi mengubah nilai 'i', 883 00:59:29,190 --> 00:59:32,620 itu tidak mengubah di luar fungsi, 884 00:59:32,620 --> 00:59:35,060 karena fungsi memiliki ruang lingkup yang terpisah. 885 00:59:35,060 --> 00:59:38,960 Itu berarti bahwa ketika kita gema 'i', itu belum berubah dalam lingkup fungsi, 886 00:59:38,960 --> 00:59:43,660 dan demikian maka kita akan mencetak 3 lagi. 887 00:59:43,660 --> 00:59:47,520 Hal yang berbeda tentang ruang lingkup di PHP daripada di C. 888 00:59:47,520 --> 00:59:51,130 >> Sekarang di PHP dan HTML. 889 00:59:51,130 --> 00:59:53,510 PHP digunakan untuk membuat halaman web dinamis. 890 00:59:53,510 --> 00:59:58,660 Ini semacam membuat hal yang berbeda. 891 00:59:58,660 --> 01:00:02,090 Kami memiliki berbeda dari HTML. 892 01:00:02,090 --> 01:00:05,230 Dengan HTML, kita selalu hanya memiliki hal yang statis yang sama, seperti bagaimana Rob menunjukkan, 893 01:00:05,230 --> 01:00:09,370 sedangkan PHP, Anda dapat mengubah hal-hal yang didasarkan pada siapa pengguna. 894 01:00:09,370 --> 01:00:11,830 Jadi jika saya memiliki ini, saya, "Anda login sebagai -" dan kemudian nama, 895 01:00:11,830 --> 01:00:14,420 dan saya dapat mengubah nama. Jadi sekarang namanya adalah Joseph, 896 01:00:14,420 --> 01:00:18,880 dan memiliki "tentang saya," tapi kemudian aku juga bisa mengubah nama untuk memiliki Tommy. 897 01:00:18,880 --> 01:00:21,700 Dan itu akan menjadi hal yang berbeda. 898 01:00:21,700 --> 01:00:23,840 Jadi kita juga bisa mengubah hal-hal yang berbeda tentang dia, 899 01:00:23,840 --> 01:00:27,070 dan ia akan menampilkan konten yang berbeda berdasarkan nama. 900 01:00:27,070 --> 01:00:31,430 Jadi PHP dapat mengubah jenis apa yang terjadi di dalam situs web Anda. 901 01:00:31,430 --> 01:00:33,540 Sama di sini. Namun, perhatikan bahwa mereka memiliki konten yang berbeda, 902 01:00:33,540 --> 01:00:38,870 meskipun Anda secara teknis masih mengakses halaman web yang sama di permukaan. 903 01:00:38,870 --> 01:00:43,450 Membangkitkan HTML. Ada 2 cara yang berbeda yang dapat Anda lakukan ini. 904 01:00:43,450 --> 01:00:48,980 Jadi kita akan pergi melalui itu sekarang. Cara pertama adalah, Anda memiliki - yeah, maaf. 905 01:00:48,980 --> 01:00:51,150 Jadi Anda hanya perlu rutin Anda untuk loop di PHP, 906 01:00:51,150 --> 01:00:56,270 dan kemudian Anda bergema di PHP dan Anda echo keluar HTML. 907 01:00:56,270 --> 01:00:58,720 Menggunakan apa yang Rob menunjukkan Anda script HTML 908 01:00:58,720 --> 01:01:04,030 dan kemudian menggunakan cetak PHP untuk hanya mencetak keluar ke halaman web. 909 01:01:04,030 --> 01:01:09,520 Cara alternatif adalah untuk melakukannya seolah-olah Anda memisahkan PHP dan HTML. 910 01:01:09,520 --> 01:01:11,940 Sehingga Anda dapat memiliki garis PHP yang dimulai untuk loop, 911 01:01:11,940 --> 01:01:16,020 maka Anda dapat memiliki garis HTML dalam hal yang terpisah, 912 01:01:16,020 --> 01:01:19,700 dan kemudian Anda mengakhiri loop, sekali lagi, dengan PHP. 913 01:01:19,700 --> 01:01:21,800 Jadi itu semacam memisahkan itu. 914 01:01:21,800 --> 01:01:24,020 Di sisi kiri, Anda dapat bahwa Anda memiliki semua - 915 01:01:24,020 --> 01:01:26,360 itu hanya 1 sepotong PHP. 916 01:01:26,360 --> 01:01:28,510 Di sebelah kanan Anda dapat melihat bahwa Anda memiliki garis PHP, 917 01:01:28,510 --> 01:01:32,540 Anda memiliki garis HTML, dan Anda memiliki garis PHP lagi. 918 01:01:32,540 --> 01:01:36,870 Jadi memisahkan keluar ke apa yang mereka lakukan. 919 01:01:36,870 --> 01:01:39,330 Dan Anda akan perhatikan bahwa cara baik, karena salah satu dari mereka, 920 01:01:39,330 --> 01:01:41,980 mereka masih mencetak gambar, gambar, gambar, 921 01:01:41,980 --> 01:01:44,540 sehingga HTML yang masih dicetak dengan cara yang sama. 922 01:01:44,540 --> 01:01:49,870 Dan kemudian Anda masih akan melihat 3 gambar muncul di website Anda. 923 01:01:49,870 --> 01:01:52,820 Jadi 2 cara berbeda dalam melakukan hal yang sama. 924 01:01:52,820 --> 01:01:55,060 >> Sekarang kita memiliki bentuk dan permintaan. Seperti Rob menunjukkan Anda, 925 01:01:55,060 --> 01:01:59,400 ada bentuk HTML, dan kami hanya akan angin melalui ini. 926 01:01:59,400 --> 01:02:02,040 Anda memiliki tindakan dan Anda memiliki metode, dan tindakan Anda 927 01:02:02,040 --> 01:02:04,350 jenis menunjukkan Anda di mana Anda akan mengirimkannya, dan metode adalah apakah 928 01:02:04,350 --> 01:02:06,960 itu akan menjadi GET atau POST. 929 01:02:06,960 --> 01:02:11,220 Dan permintaan GET, seperti yang dikatakan Rob, berarti bahwa Anda akan memasukkannya ke dalam bentuk 930 01:02:11,220 --> 01:02:15,760 dan Anda akan melihatnya sebagai URL, sedangkan permintaan POST Anda tidak akan melihat dalam URL. 931 01:02:15,760 --> 01:02:17,840 Jadi sedikit perbedaan. 932 01:02:17,840 --> 01:02:19,950 Namun, satu hal itu adalah hal yang sama 933 01:02:19,950 --> 01:02:22,560 adalah bahwa POST dan GET sama-sama tidak aman. 934 01:02:22,560 --> 01:02:26,430 Jadi, Anda mungkin berpikir bahwa hanya karena Anda tidak melihatnya di URL, 935 01:02:26,430 --> 01:02:28,790 itu berarti POST lebih aman, 936 01:02:28,790 --> 01:02:34,420 tapi Anda masih bisa melihatnya di cookie Anda dalam informasi yang Anda kirim. 937 01:02:34,420 --> 01:02:38,260 Jadi jangan berpikir bahwa sekitar satu atau yang lain. 938 01:02:38,260 --> 01:02:42,160 Hal lain yang perlu diperhatikan adalah bahwa Anda juga memiliki variabel seksi. 939 01:02:42,160 --> 01:02:45,850 Kalian menggunakan ini dalam pset 7 untuk mendapatkan informasi ID pengguna Anda. 940 01:02:45,850 --> 01:02:48,550 Apa yang terjadi adalah bahwa Anda dapat menggunakan array asosiatif ini, 941 01:02:48,550 --> 01:02:53,310 $ _SESSION, dan kemudian Anda dapat mengakses hal-hal yang berbeda 942 01:02:53,310 --> 01:02:57,720 dan menyimpan hal-hal yang berbeda di seluruh halaman. 943 01:02:57,720 --> 01:03:00,750 >> Hal terakhir adalah bahwa kita memiliki SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 dan ini adalah bahasa pemrograman untuk mengelola database. 945 01:03:04,360 --> 01:03:08,220 Apa, tepatnya, adalah database? Mereka koleksi tabel, 946 01:03:08,220 --> 01:03:10,630 dan setiap tabel dapat memiliki jenis yang sama dari objek. 947 01:03:10,630 --> 01:03:14,990 Jadi kami memiliki meja pengguna dalam pset keuangan Anda. 948 01:03:14,990 --> 01:03:20,610 Dan mengapa mereka berguna? Karena itu cara menyimpan informasi secara permanen. 949 01:03:20,610 --> 01:03:22,840 Ini adalah cara untuk melacak hal-hal dan mengelola hal-hal 950 01:03:22,840 --> 01:03:25,890 dan benar-benar melihat itu pada halaman yang berbeda dan menjaga track. 951 01:03:25,890 --> 01:03:29,930 Sedangkan jika Anda hanya menyimpan di situ satu saat langsung 952 01:03:29,930 --> 01:03:33,720 dan kemudian menggunakannya nanti, Anda tidak akan dapat mengakses apa pun yang telah Anda simpan. 953 01:03:33,720 --> 01:03:37,660 Kami memiliki 4 hal utama yang kita gunakan untuk perintah SQL. 954 01:03:37,660 --> 01:03:40,190 Kami memiliki pilih, insert, menghapus, dan memperbarui. 955 01:03:40,190 --> 01:03:42,880 Mereka benar-benar penting untuk kalian ketahui untuk kuis Anda. 956 01:03:42,880 --> 01:03:45,990 >> Kami akan segera pergi ke pilih sekarang. 957 01:03:45,990 --> 01:03:48,540 Pada dasarnya, Anda memilih baris dari database. 958 01:03:48,540 --> 01:03:52,400 Jadi jika Anda memiliki, di sini - 959 01:03:52,400 --> 01:03:56,740 kami memiliki 2 hal yang berbeda, dan kami ingin memilih dari tabel kelas 960 01:03:56,740 --> 01:04:01,480 di mana mengagumkan - di mana dalam kolom mengagumkan nilai adalah 1. 961 01:04:01,480 --> 01:04:04,460 Sehingga Anda dapat melihat di sini, kami memiliki 2 hal dari nama kelas, 962 01:04:04,460 --> 01:04:08,490 CS50 dan Stat110, dan kami memiliki ID kelas dan slogan. 963 01:04:08,490 --> 01:04:13,150 Jadi kita ingin memilih semua informasi tersebut. 964 01:04:13,150 --> 01:04:17,480 Kemudian Anda dapat melihat di sini bahwa itu semacam memilih keluar dari kolom mengagumkan, 965 01:04:17,480 --> 01:04:25,170 di mana semua hal adalah 1, dan kemudian memiliki ID kelas, nama kelas dan slogan yang bisa memilih. 966 01:04:25,170 --> 01:04:28,100 Bagaimana tepatnya Anda melakukan ini dalam kode? Anda harus menggunakan PHP. 967 01:04:28,100 --> 01:04:33,830 Jadi itulah jenis bagaimana PHP dan SQL terkait satu sama lain. 968 01:04:33,830 --> 01:04:38,130 Sekarang kita memiliki kode kita, dan kita akan menggunakan fungsi query kita 969 01:04:38,130 --> 01:04:41,370 seperti yang kita lakukan dalam pset 7, dan kita akan menjalankan query SQL. 970 01:04:41,370 --> 01:04:43,870 Kemudian kita akan memiliki - 971 01:04:43,870 --> 01:04:46,280 kita harus selalu memeriksa apakah baris triple sama jika palsu. 972 01:04:46,280 --> 01:04:49,010 Jadi sekali lagi, Anda ingin memeriksa jenis dan nilai, 973 01:04:49,010 --> 01:04:53,880 dan kemudian jika tidak bekerja, maka Anda ingin meminta maaf, seperti biasa, seperti yang kita lakukan dalam pset 7. 974 01:04:53,880 --> 01:04:55,870 Jika tidak, Anda ingin loop melalui segala sesuatu dengan mereka berguna 975 01:04:55,870 --> 01:04:59,410 foreach loop bahwa kami hanya pergi. 976 01:04:59,410 --> 01:05:01,280 Sekarang bahwa kita perulangan melalui dan kami telah berhasil melewati, 977 01:05:01,280 --> 01:05:05,080 mari kita asumsikan bahwa permintaan kami berlalu, sekarang kami memiliki foreach loop kami. 978 01:05:05,080 --> 01:05:11,050 Dan baris pertama itu, jadi di sini adalah baris, di sini, melainkan kotak. 979 01:05:11,050 --> 01:05:14,010 Ini akan mencetak semua informasi yang sudah mendapat. 980 01:05:14,010 --> 01:05:18,070 Jadi itu akan mencetak di bagian bawah "Mau Belajar HTML?" 981 01:05:18,070 --> 01:05:23,370 Maka itu akan pergi ke baris berikutnya, karena itu menyelesaikan pertama untuk loop, 982 01:05:23,370 --> 01:05:26,510 dan sebagainya maka akan mencetak baris kedua itu, 983 01:05:26,510 --> 01:05:32,120 yang akan menjadi STAT110, Cari semua Moments. 984 01:05:32,120 --> 01:05:34,290 >> Satu hal terakhir adalah pada SQL kerentanan. 985 01:05:34,290 --> 01:05:37,300 Saya tahu David menyentuh ini sedikit di kuliah. 986 01:05:37,300 --> 01:05:40,730 Anda dapat membaca ini nanti. Ini benar-benar lucu. 987 01:05:40,730 --> 01:05:45,320 SQL Injection adalah semacam hal yang rumit. 988 01:05:45,320 --> 01:05:49,890 Mari kita mengatakan bahwa Anda hanya menempel variabel tersebut tepat ke permintaan Anda, 989 01:05:49,890 --> 01:05:52,290 seperti yang Anda lihat dalam baris pertama. 990 01:05:52,290 --> 01:05:54,520 Jadi sepertinya baik-baik saja, kan? Kau hanya menempatkan dalam nama pengguna 991 01:05:54,520 --> 01:05:58,820 dan password untuk SQL query Anda, dan Anda ingin kapal itu dan mendapatkan apa yang ada di tabel data Anda. 992 01:05:58,820 --> 01:06:01,450 Yang tampaknya cukup sederhana. Jadi katakanlah seseorang menempatkan di, 993 01:06:01,450 --> 01:06:04,910 untuk password, ini OR teks di sini - 994 01:06:04,910 --> 01:06:06,780 harus benar-benar berada dalam kotak merah. 995 01:06:06,780 --> 01:06:11,920 Jadi mari kita mengatakan bahwa mereka menempatkan password yang ke - itulah yang mereka masukkan. 996 01:06:11,920 --> 01:06:16,520 Jadi mereka menempatkan ATAU "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Jenis password konyol untuk memiliki. 998 01:06:20,880 --> 01:06:25,070 Sekarang mari kita menggantinya, dan Anda akan perhatikan bahwa dalam permintaan SQL sekarang, 999 01:06:25,070 --> 01:06:29,090 mengevaluasi untuk selalu benar, karena Anda akan mencatat bahwa 1000 01:06:29,090 --> 01:06:32,240 Anda dapat query SQL pilih semua informasi ini 1001 01:06:32,240 --> 01:06:35,420 atau Anda hanya dapat memiliki 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Sehingga selalu akan mengevaluasi untuk benar. 1003 01:06:41,030 --> 01:06:46,610 Itu tidak akan benar-benar bekerja, karena itu berarti bahwa hacker dapat masuk ke sistem anda. 1004 01:06:46,610 --> 01:06:49,300 Solusi untuk ini adalah bahwa Anda harus menggunakan sistem PDO, 1005 01:06:49,300 --> 01:06:51,360 yang berarti bahwa Anda harus menggunakan tanda tanya, 1006 01:06:51,360 --> 01:06:53,350 yang adalah apa yang kalian digunakan dalam pset 7, 1007 01:06:53,350 --> 01:06:57,620 di mana Anda akan menggunakan tanda tanya di tempat di mana Anda ingin menempatkan sesuatu, 1008 01:06:57,620 --> 01:07:01,430 dan kemudian Anda akan memiliki koma, dan kemudian Anda akan memiliki setelah itu, 1009 01:07:01,430 --> 01:07:07,610 setelah string, variabel yang berbeda yang Anda ingin mengganti ke tanda tanya Anda. 1010 01:07:07,610 --> 01:07:10,330 Jadi, Anda akan dicatat di sini bahwa sekarang aku punya tanda tanya merah ini. 1011 01:07:10,330 --> 01:07:15,420 Lalu aku menaruh variabel setelah string saya jadi saya tahu untuk menggantikan mereka dalam urutan yang kemudian. 1012 01:07:15,420 --> 01:07:18,470 Itu akan memastikan bahwa jika seseorang melakukan seperti ini, 1013 01:07:18,470 --> 01:07:24,050 dan mereka memiliki atau 1 = 1 situasi, yang akan memastikan, 1014 01:07:24,050 --> 01:07:30,490 di bagian belakang, pastikan bahwa itu tidak akan benar-benar istirahat query SQL. 1015 01:07:30,490 --> 01:07:33,660 Oke, jadi itu cukup banyak itu, angin puyuh PHP dan SQL. 1016 01:07:33,660 --> 01:07:41,520 Best of luck untuk kalian semua, dan sekarang untuk Ore 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Okay semua orang. Waktu untuk membahas beberapa JavaScript 1018 01:07:44,270 --> 01:07:48,840 dan beberapa hal lain sangat cepat sehingga kita tidak terus Anda malam ini. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Ya. JavaScript adalah jenis hal yang keren, konon. 1020 01:07:56,930 --> 01:07:59,090 Hal-hal yang Anda benar-benar perlu tahu tentang JavaScript, itu semacam 1021 01:07:59,090 --> 01:08:03,810 akhir klien-sisi apa app web Anda akan lakukan. 1022 01:08:03,810 --> 01:08:08,280 Ada beberapa hal yang hanya tidak ingin untuk mengurus semua waktu pada sisi server. 1023 01:08:08,280 --> 01:08:12,880 Semua interaksi kecil, menyoroti satu hal, membuat sesuatu menghilang. 1024 01:08:12,880 --> 01:08:15,340 Anda benar-benar tidak mau harus berbicara dengan server Anda semua waktu untuk itu. 1025 01:08:15,340 --> 01:08:18,069 Dan beberapa yang bahkan tidak mungkin untuk dilakukan pada sisi server. 1026 01:08:18,069 --> 01:08:21,899 Inilah sebabnya mengapa kita perlu sesuatu seperti JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Hal keren tentang JavaScript: Hal ini secara dinamis diketik. 1028 01:08:24,359 --> 01:08:27,149 Apa ini berarti bahwa program anda tidak perlu tahu 1029 01:08:27,149 --> 01:08:30,970 apa, tepatnya, variabel adalah ketika Anda menulis itu. 1030 01:08:30,970 --> 01:08:34,510 Ini akan hanya semacam mencari tahu seperti itu berjalan. 1031 01:08:34,510 --> 01:08:37,520 Hal-hal lain yang keren tentang hal ini: Ini adalah bahasa penjepit keriting, 1032 01:08:37,520 --> 01:08:41,359 yang berarti sintaks mirip dengan C dan PHP. 1033 01:08:41,359 --> 01:08:47,050 Anda tidak perlu melakukan banyak ulang ketika Anda belajar JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Di sini kita memiliki sedikit JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Hal yang menarik di sini adalah bahwa, jika Anda melihat itu, 1036 01:08:52,560 --> 01:08:56,330 kami memiliki sedikit JavaScript di sana pada tag kepala. 1037 01:08:56,330 --> 01:08:59,479 Apa yang pada dasarnya hanya menyertakan file JavaScript. 1038 01:08:59,479 --> 01:09:02,260 Ini adalah salah satu cara Anda dapat memasukkan ke dalam program JavaScript Anda. 1039 01:09:02,260 --> 01:09:06,910 Kemudian sedikit kedua sebenarnya beberapa inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 sangat mirip dengan gaya inline dengan CSS, 1041 01:09:10,790 --> 01:09:16,180 dan Anda hanya menulis beberapa kode yang sangat cepat di sana. 1042 01:09:16,180 --> 01:09:18,120 JavaScript memiliki array. 1043 01:09:18,120 --> 01:09:20,850 Hanya cara lain untuk menyimpan data sekitar, sangat berguna. 1044 01:09:20,850 --> 01:09:25,180 Sangat bagus dan mudah sintaks. 1045 01:09:25,180 --> 01:09:29,870 Anda menggunakan tanda kurung siku untuk mengakses segala sesuatu dan menjaga segala sesuatu bersama-sama. 1046 01:09:29,870 --> 01:09:35,020 Tidak ada yang terlalu rumit. 1047 01:09:35,020 --> 01:09:38,630 Yang keren tentang JavaScript dan bahasa scripting secara umum 1048 01:09:38,630 --> 01:09:40,920 adalah bahwa Anda tidak perlu khawatir tentang ukuran array. 1049 01:09:40,920 --> 01:09:43,880 Anda hanya dapat menggunakan array.length dan melacak itu, 1050 01:09:43,880 --> 01:09:46,960 dan juga array dapat tumbuh atau menyusut saat Anda membutuhkannya untuk. 1051 01:09:46,960 --> 01:09:49,279 Jadi, Anda bahkan tidak perlu khawatir tentang apapun, 1052 01:09:49,279 --> 01:09:57,050 oh tidak, saya harus mengalokasikan lebih banyak hal, atau sesuatu seperti itu. 1053 01:09:57,050 --> 01:10:00,090 >> The cool hal di sini adalah bahwa JavaScript memiliki sesuatu yang disebut objek. 1054 01:10:00,090 --> 01:10:04,800 Ini adalah bahasa berorientasi objek, sehingga apa yang telah, pada dasarnya, 1055 01:10:04,800 --> 01:10:10,100 cara bagi Anda untuk mengelompokkan data bersama-sama, agak mirip dengan struct, 1056 01:10:10,100 --> 01:10:17,280 tetapi Anda dapat mengaksesnya seperti struct atau dalam sintaks array asosiatif. 1057 01:10:17,280 --> 01:10:22,520 Hal ini cukup sederhana dan apa yang dapat Anda lakukan dengan ini adalah data kelompok bersama-sama 1058 01:10:22,520 --> 01:10:24,810 jika Anda memiliki banyak data yang terkait. 1059 01:10:24,810 --> 01:10:26,850 Karena itu semua hal yang Anda butuhkan untuk menggambarkan sebuah mobil, 1060 01:10:26,850 --> 01:10:29,050 Anda tidak perlu untuk memilikinya dalam sekelompok tempat yang berbeda. 1061 01:10:29,050 --> 01:10:35,300 Anda hanya dapat menempel ke 1 objek dalam JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Seperti Anda mungkin tahu, iterasi adalah salah satu tugas membosankan. 1063 01:10:39,090 --> 01:10:43,810 Anda hanya melakukannya lebih dari satu lagi. Anda perlu berbicara dengan setiap objek di dalam mobil, 1064 01:10:43,810 --> 01:10:47,340 atau Anda perlu untuk pergi melalui setiap item dalam daftar atau sesuatu seperti itu. 1065 01:10:47,340 --> 01:10:51,770 Jadi JavaScript memiliki, mirip dengan PHP, sintaks foreach. 1066 01:10:51,770 --> 01:10:54,590 Dalam kasus ini, itu adalah dalam lingkaran. 1067 01:10:54,590 --> 01:10:57,300 Anda ingin menggunakan ini hanya pada objek. 1068 01:10:57,300 --> 01:11:01,030 Ada beberapa masalah yang terjadi jika Anda menggunakan ini pada array. 1069 01:11:01,030 --> 01:11:03,750 Hal ini biasanya merupakan salah satu hal, meskipun, yang sangat berguna, 1070 01:11:03,750 --> 01:11:06,590 karena Anda menghilangkan banyak overhead 1071 01:11:06,590 --> 01:11:10,270 karena Anda tidak perlu untuk menarik segala sesuatu di objek sendiri. 1072 01:11:10,270 --> 01:11:12,300 Anda tidak perlu mengingat semua nama kunci. 1073 01:11:12,300 --> 01:11:18,270 Anda hanya semacam mendapatkan mereka kembali dalam sintaks ini. 1074 01:11:18,270 --> 01:11:21,500 Dalam hal ini, dengan untuk, Anda hanya ingin mengingat 1075 01:11:21,500 --> 01:11:27,180 bahwa Anda mendapatkan kembali semua kunci, dalam cara yang sangat mirip dengan hash table. 1076 01:11:27,180 --> 01:11:30,880 Jika Anda ingat dari itu, ketika Anda akan dimasukkan ke dalam string Anda bisa mendapatkan sesuatu 1077 01:11:30,880 --> 01:11:33,840 yang akan memiliki nilai yang terkait dengannya. 1078 01:11:33,840 --> 01:11:36,360 Apa yang dapat Anda lakukan dengan ini adalah Anda bisa mengatakan, baik-baik saja, 1079 01:11:36,360 --> 01:11:42,120 Aku dimasukkan ke dalam mobil, dan saya menyebutnya sebagai Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Sehingga Anda dapat dimasukkan ke dalam string Ferrari lagi nanti, dan Anda bisa mendapatkan itu keluar. 1081 01:11:45,290 --> 01:11:50,000 Dan Anda bisa melakukan itu dalam satu lingkaran, dengan dalam lingkaran. 1082 01:11:50,000 --> 01:11:53,320 Jadi hanya tentang obyek. Hal utama dari ini, Anda perlu mengingat 1083 01:11:53,320 --> 01:12:00,340 adalah bahwa Anda dapat menggunakan obyek struct seperti sintaks kapanpun Anda inginkan dengan ini, 1084 01:12:00,340 --> 01:12:04,590 kecuali jika apa yang Anda akan menggunakan sebagai string bukan nama variabel yang valid. 1085 01:12:04,590 --> 01:12:07,650 Jadi jika Anda melihat bahwa ada, kita memiliki kunci dengan spasi. 1086 01:12:07,650 --> 01:12:12,500 Nah, jika Anda menempatkan object.key, ruang, dengan, ruang, ruang, 1087 01:12:12,500 --> 01:12:15,320 itu hanya tidak masuk akal sintaksis. 1088 01:12:15,320 --> 01:12:22,730 Jadi Anda hanya bisa melakukannya dengan semacam ini sintaks braket. 1089 01:12:22,730 --> 01:12:26,520 >> Juga, JavaScript sangat lingkup-bijaksana untuk PHP. 1090 01:12:26,520 --> 01:12:29,050 Anda memiliki 2 cara untuk mengatasi ruang lingkup. 1091 01:12:29,050 --> 01:12:31,960 Anda tidak dapat memiliki var di depan variabel, 1092 01:12:31,960 --> 01:12:34,060 dan itu hanya berarti ini adalah global. 1093 01:12:34,060 --> 01:12:37,050 Anda bisa melihatnya dari mana saja. Bahkan jika Anda menempatkan ini dalam sebuah pernyataan jika, 1094 01:12:37,050 --> 01:12:42,430 tempat lain dalam kode Anda setelah titik itu, Anda bisa melihat variabel itu. 1095 01:12:42,430 --> 01:12:46,730 Hal lain, meskipun, adalah dengan var, itu terbatas pada fungsi apa pun yang Anda masuk 1096 01:12:46,730 --> 01:12:48,870 Jika Anda tidak dalam suatu fungsi, baik, itu global. 1097 01:12:48,870 --> 01:12:53,900 Tetapi jika Anda berada dalam fungsi itu hanya terlihat dalam fungsi tersebut. 1098 01:12:53,900 --> 01:12:56,420 Saya tidak memiliki contoh, tapi, ya. Ini salah satu hal di mana 1099 01:12:56,420 --> 01:12:59,900 Anda dapat mengatur variabel apa Anda ingin menjadi global, 1100 01:12:59,900 --> 01:13:03,810 apa variabel Anda ingin menjadi lokal, tetapi Anda perlu berhati-hati tentang hal ini, 1101 01:13:03,810 --> 01:13:06,890 karena Anda tidak memiliki jenis kontrol butir halus yang Anda lakukan dalam C, 1102 01:13:06,890 --> 01:13:15,820 di mana jika ada sesuatu yang dinyatakan dalam untuk loop, itu akan tinggal di itu untuk loop. 1103 01:13:15,820 --> 01:13:18,790 Satu hal yang kita benar-benar peduli tentang menggunakan JavaScript untuk memanipulasi halaman web, kan? 1104 01:13:18,790 --> 01:13:21,800 Maksudku, itu sebabnya kami melakukan ini. 1105 01:13:21,800 --> 01:13:23,840 >> Untuk melakukan itu, kita menggunakan sesuatu yang disebut DOM. 1106 01:13:23,840 --> 01:13:25,850 The Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 Pada dasarnya, apa yang dilakukannya itu mengambil semua HTML Anda 1108 01:13:29,430 --> 01:13:34,110 dan model itu menjadi sekelompok benda-benda yang bersarang di dalam satu sama lain. 1109 01:13:34,110 --> 01:13:37,080 Anda mulai dengan sesuatu seperti ini. 1110 01:13:37,080 --> 01:13:44,770 Anda memiliki, di sebelah kanan untuk saya, sekelompok kode di luar sana yang semacam - 1111 01:13:44,770 --> 01:13:46,640 Anda akan berpikir bahwa akan sangat sulit untuk memanipulasi, 1112 01:13:46,640 --> 01:13:48,700 karena Anda akan parsing melalui sekelompok teks 1113 01:13:48,700 --> 01:13:52,080 dan harus sepotong hal terpisah. Dan bagaimana jika itu tidak diformat dengan benar? 1114 01:13:52,080 --> 01:13:54,880 Hal-hal buruk akan terjadi. 1115 01:13:54,880 --> 01:13:58,140 Jadi JavaScript mengurus ini untuk Anda, dan Anda mendapatkan struktur data yang baik, 1116 01:13:58,140 --> 01:14:01,390 seperti yang ada di sebelah kiriku, di mana Anda hanya memiliki dokumen, 1117 01:14:01,390 --> 01:14:03,530 dan di dalam bahwa Anda memiliki sesuatu yang disebut HTML, 1118 01:14:03,530 --> 01:14:05,600 dan di dalam bahwa Anda memiliki kepala dan tubuh, 1119 01:14:05,600 --> 01:14:08,420 dan di dalam kepala bahwa Anda memiliki judul, dan sebagainya, dan sebagainya, dan sebagainya. 1120 01:14:08,420 --> 01:14:11,810 Ini menyederhanakan memanipulasi halaman web sehingga hanya, 1121 01:14:11,810 --> 01:14:14,190 oh, aku hanya ingin berbicara dengan objek ini. 1122 01:14:14,190 --> 01:14:21,340 Semacam cara yang sangat mirip Anda akan berbicara dengan objek lain yang dibuat sendiri. 1123 01:14:21,340 --> 01:14:25,980 Seperti saya katakan, semua DOM berada dalam objek dokumen. 1124 01:14:25,980 --> 01:14:29,290 Entah itu hanya satu tempat dan kemudian Anda dapat pergi di dalamnya untuk menemukan hal-hal, 1125 01:14:29,290 --> 01:14:33,880 dan Anda dapat melakukannya - ini adalah gaya lama melakukannya, di atas sana, 1126 01:14:33,880 --> 01:14:38,130 di mana Anda melakukan document.getElementById, dan kemudian nama, 1127 01:14:38,130 --> 01:14:42,420 dan karena Anda mungkin bisa mengatakan, ini akan sangat berat setelah beberapa saat. 1128 01:14:42,420 --> 01:14:44,480 Jadi Anda mungkin tidak ingin melakukan itu. Itulah mengapa kita memiliki 1129 01:14:44,480 --> 01:14:48,760 hal berikutnya kita akan bicarakan setelah ini. 1130 01:14:48,760 --> 01:14:52,510 Kuncinya di sini adalah bahwa, baik-baik saja, Anda memiliki semua unsur-unsur ini, kan? 1131 01:14:52,510 --> 01:14:56,400 Jadi mungkin saya dapat mengubah warna dari sesuatu ketika beban halaman. 1132 01:14:56,400 --> 01:14:58,380 Jadi apa? Bagaimana jika pengguna mengklik sesuatu saya? 1133 01:14:58,380 --> 01:15:00,540 Saya ingin melakukan sesuatu yang menarik ketika mereka mengklik sesuatu. 1134 01:15:00,540 --> 01:15:02,600 Itulah mengapa kita memiliki acara. 1135 01:15:02,600 --> 01:15:05,330 Anda dapat, pada dasarnya, menemukan elemen dalam DOM Anda, 1136 01:15:05,330 --> 01:15:08,560 dan kemudian berkata, hey. Ketika ini beban atau seseorang mengklik itu, 1137 01:15:08,560 --> 01:15:11,410 atau ketika mereka mouse di atasnya, melakukan sesuatu dengan itu. 1138 01:15:11,410 --> 01:15:15,330 Dan apa yang Anda miliki, Anda memiliki fungsi yang menangani hal ini untuk Anda. 1139 01:15:15,330 --> 01:15:17,980 Fungsi-fungsi ini event handler. 1140 01:15:17,980 --> 01:15:20,440 Apa Mereka '- itu hanya cara mewah untuk mengatakan, 1141 01:15:20,440 --> 01:15:23,500 fungsi ini hanya dijalankan ketika event ini terjadi. 1142 01:15:23,500 --> 01:15:28,070 Jadi menangani peristiwa yang terjadi. 1143 01:15:28,070 --> 01:15:30,810 Ini adalah bagaimana Anda akan lay out sebuah event handler. 1144 01:15:30,810 --> 01:15:34,750 Saya memiliki beberapa tombol, dan ketika Anda klik, itu meledak. 1145 01:15:34,750 --> 01:15:40,560 Jadi jangan klik tombol. 1146 01:15:40,560 --> 01:15:42,910 Ini adalah salah satu cara untuk mendekati itu, kan? 1147 01:15:42,910 --> 01:15:46,430 Anda memiliki tag tombol, dan klik Anda memiliki string yang mengatakan, 1148 01:15:46,430 --> 01:15:50,460 oh, by the way, saya melakukan hal ini untuk saya meledak. 1149 01:15:50,460 --> 01:15:53,990 Jika tidak, itu hanya seperti tombol biasa yang baru saja dibuat. 1150 01:15:53,990 --> 01:15:56,550 Anda juga dapat melakukan ini dengan cara lain, 1151 01:15:56,550 --> 01:16:02,770 dengan meraih elemen DOM, tetapi kita akan menghemat bahwa setelah kita berbicara tentang jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Ini adalah perpustakaan yang cross-browser. 1153 01:16:07,580 --> 01:16:09,580 Anda dapat menggunakannya dalam apa pun cukup banyak. 1154 01:16:09,580 --> 01:16:12,090 Dan itu hanya memberi Anda banyak alat untuk bekerja dengan. 1155 01:16:12,090 --> 01:16:15,850 Karena JavaScript, sementara yang kuat, tidak memiliki semua alat yang Anda butuhkan 1156 01:16:15,850 --> 01:16:20,550 keluar dari kotak untuk benar-benar menangani aplikasi web Anda mungkin ingin lakukan. 1157 01:16:20,550 --> 01:16:24,650 Jadi menyederhanakan banyak hal, memberikan banyak fungsi 1158 01:16:24,650 --> 01:16:28,760 keluar dari kotak yang biasanya Anda akan harus menulis sendiri, berulang-ulang. 1159 01:16:28,760 --> 01:16:31,600 Dan hanya membuat hal-hal yang sangat sederhana. 1160 01:16:31,600 --> 01:16:35,780 Anda juga memiliki pemilih, yang memungkinkan Anda mengambil semua elemen tersebut 1161 01:16:35,780 --> 01:16:42,800 dari DOM Anda jauh lebih sederhana, daripada harus menggunakan fungsi panggilan yang sangat panjang ini. 1162 01:16:42,800 --> 01:16:46,630 Lebih lanjut tentang penyeleksi ini. Anda miliki, di sana Anda, katakanlah 1163 01:16:46,630 --> 01:16:49,800 Saya ingin mendapatkan elemen dengan ID "batu." 1164 01:16:49,800 --> 01:16:56,450 Nah, di jQuery, itu hanya $ dan kemudian string yang memiliki pound, dan kemudian "rock." 1165 01:16:56,450 --> 01:17:01,960 Ini sangat sederhana dan jauh lebih cepat daripada cara tradisional JavaScript untuk mengatasi masalah ini. 1166 01:17:01,960 --> 01:17:06,120 Dan Anda memiliki hal-hal yang sama untuk kelas dan tipe elemen. 1167 01:17:06,120 --> 01:17:08,140 jQuery adalah - salah satu fitur keren adalah Anda dapat semacam kompres 1168 01:17:08,140 --> 01:17:14,350 bawah pertanyaan Anda pada DOM Anda sangat, sangat cepat. 1169 01:17:14,350 --> 01:17:18,980 Sekarang kita kembali ke penanganan event, dan ini adalah bagaimana Anda akan menangani satu acara di jQuery. 1170 01:17:18,980 --> 01:17:23,090 Jadi apa yang kita akan di sini adalah kita katakan, oke. Saya memiliki tag script, kan? 1171 01:17:23,090 --> 01:17:25,400 Jadi saya punya inline ini JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Apa yang akan kita lakukan adalah kita akan mengatakan, baik-baik saja. 1173 01:17:27,750 --> 01:17:30,860 Ketika dokumen siap, yang berarti dokumen sudah dimuat, 1174 01:17:30,860 --> 01:17:34,660 kita akan pergi ke fungsi tersebut, dan kita akan mengatakan, baik-baik saja, 1175 01:17:34,660 --> 01:17:37,060 fungsi ini benar-benar melakukan sesuatu yang lain. 1176 01:17:37,060 --> 01:17:42,320 Ini pada dasarnya mengatakan, oke, ambilkan elemen dengan ID "myid." 1177 01:17:42,320 --> 01:17:47,960 Dan kemudian memberikan ini handler fungsi yang mengeksekusi ketika Anda klik. 1178 01:17:47,960 --> 01:17:49,820 Pada dasarnya apa yang dilakukan adalah, ia mengatakan, baik-baik saja. 1179 01:17:49,820 --> 01:17:52,630 Halaman ini dimuat, jadi aku akan di, menemukan elemen ini, 1180 01:17:52,630 --> 01:17:56,420 memberikan event handler ini, dan pada dasarnya set up halaman Anda untuk Anda. 1181 01:17:56,420 --> 01:18:00,520 Dan ini adalah bagaimana Anda ingin untuk berpikir tentang penanganan event. 1182 01:18:00,520 --> 01:18:06,310 Anda hanya ingin untuk berpikir tentang, baik-baik saja, ketika sesuatu terjadi, apa yang saya inginkan terjadi? 1183 01:18:06,310 --> 01:18:10,520 Anda tidak ingin untuk berpikir tentang, oke, saya harus memastikan hal ini pembicaraan untuk hal ini, 1184 01:18:10,520 --> 01:18:14,660 Hal ini bla bla bla, karena Anda hanya ingin berbicara hal dalam hal kejadian. 1185 01:18:14,660 --> 01:18:17,650 Ketika ini terjadi, hal ini terjadi. Ketika ini terjadi, itu terjadi. 1186 01:18:17,650 --> 01:18:20,240 Dan jika hal-hal memicu hal-hal lain, itu bagus. 1187 01:18:20,240 --> 01:18:22,150 Tapi Anda tidak ingin mencoba dan melakukan kode yang rumit 1188 01:18:22,150 --> 01:18:24,130 di mana Anda memicu beberapa hal pada saat yang sama, 1189 01:18:24,130 --> 01:18:28,860 karena Anda hanya akan memberikan diri Anda sakit kepala. 1190 01:18:28,860 --> 01:18:32,340 >> Baiklah. Sekarang kita bisa mendapatkan halaman kami untuk menangani peristiwa, 1191 01:18:32,340 --> 01:18:35,640 tapi katakanlah saya pengguna mengklik tombol. 1192 01:18:35,640 --> 01:18:38,040 Bagaimana jika saya ingin mengirim permintaan yang kembali ke server, 1193 01:18:38,040 --> 01:18:41,100 tapi saya tidak ingin kembali halaman tersebut, karena harus reload halaman baru 1194 01:18:41,100 --> 01:18:44,390 setiap kali mendapat semacam membosankan, dan mengapa saya membutuhkannya 1195 01:18:44,390 --> 01:18:47,430 untuk pull down header lagi, dan footer lagi, 1196 01:18:47,430 --> 01:18:49,670 dan semua elemen halaman lagi 1197 01:18:49,670 --> 01:18:53,180 hanya untuk me-refresh ucapan atau waktu? 1198 01:18:53,180 --> 01:18:55,290 Jadi itulah mengapa kita memiliki sesuatu seperti Ajax. 1199 01:18:55,290 --> 01:18:59,150 Apa yang bisa kita lakukan di sini dengan Ajax adalah kita dapat mengatakan, baik-baik saja, 1200 01:18:59,150 --> 01:19:01,290 Saya ingin mengirim beberapa data ke server, 1201 01:19:01,290 --> 01:19:04,010 dan saya ingin mendapatkan respon balik sehingga saya dapat memperbarui halaman saya, 1202 01:19:04,010 --> 01:19:12,120 atau mungkin hanya melakukan beberapa perhitungan algoritmik yang tidak selalu menunjukkan sesuatu kepada pengguna. 1203 01:19:12,120 --> 01:19:15,500 Apa yang perlu Anda lakukan ini? Nah, Anda memerlukan URL Anda perlu berbicara dengan. 1204 01:19:15,500 --> 01:19:18,650 Server anda tidak bisa hanya ajaib mendengarkan entah dari mana. 1205 01:19:18,650 --> 01:19:21,960 Anda perlu memiliki tempat tertentu Anda mengirim data ini untuk. 1206 01:19:21,960 --> 01:19:26,240 Dan Anda juga perlu beberapa data untuk mengirim, atau mungkin itu permintaan dataless. 1207 01:19:26,240 --> 01:19:31,380 Anda hanya ingin ping kembali ke server dan berkata, hei, aku masih hidup, atau sesuatu seperti itu. 1208 01:19:31,380 --> 01:19:35,150 Dan kemudian Anda ingin fungsi yang pada dasarnya menangani dengan sukses. 1209 01:19:35,150 --> 01:19:38,250 Katakanlah Anda mendapatkan kembali beberapa informasi dari server Anda, 1210 01:19:38,250 --> 01:19:42,960 dan Anda ingin mengubah judul pengguna pada halaman mereka. 1211 01:19:42,960 --> 01:19:44,930 Jadi, Anda akan mendapatkan informasi kembali, 1212 01:19:44,930 --> 01:19:48,860 dan Anda akan mendorong itu ke layar. 1213 01:19:48,860 --> 01:19:51,170 Apa yang terjadi adalah, saat halaman siap, 1214 01:19:51,170 --> 01:19:56,500 Anda membuat fungsi klik untuk tombol ini disebut penyambut. 1215 01:19:56,500 --> 01:19:58,810 Apa ini kemudian dilakukan adalah, ketika tombol yang ditekan, 1216 01:19:58,810 --> 01:20:03,700 Anda berbicara dengan greetings.php, Anda membuat permintaan POST, 1217 01:20:03,700 --> 01:20:07,290 dan anda berkata, hei, ambilkan sesuatu dari halaman Anda. 1218 01:20:07,290 --> 01:20:09,890 Kami tidak benar-benar perlu untuk menggambarkan itu, tapi greetings.php, 1219 01:20:09,890 --> 01:20:12,480 katakan saja, memberikan kembali "hello world." 1220 01:20:12,480 --> 01:20:15,650 Jadi kita kembali ini "hello world", dan pada keberhasilan ini, 1221 01:20:15,650 --> 01:20:20,730 dengan asumsi tidak ada yang salah, maka kita hanya pergi ke tempat target ini 1222 01:20:20,730 --> 01:20:25,720 bahwa kita ditentukan dan kami hanya menempel respon di sana. 1223 01:20:25,720 --> 01:20:31,560 Dan ini adalah cara yang sangat sederhana mendirikan sebuah permintaan Ajax. 1224 01:20:31,560 --> 01:20:34,340 >> Sangat cepat, Rob semacam ini sudah disebutkan, 1225 01:20:34,340 --> 01:20:37,170 hal yang bisa salah, hal-hal buruk bisa terjadi, 1226 01:20:37,170 --> 01:20:42,660 sehingga Anda ingin membiasakan diri dengan kode respon HTTP ini. 1227 01:20:42,660 --> 01:20:46,030 Apa ini hanya, seperti, 200, semuanya berjalan baik-baik saja. 1228 01:20:46,030 --> 01:20:48,670 Sesuatu yang lain, hal-hal buruk terjadi. 1229 01:20:48,670 --> 01:20:50,790 Ini umumnya hal yang ingin Anda ingat. 1230 01:20:50,790 --> 01:20:53,440 Tapi itu bagus untuk tahu semua ini. 1231 01:20:53,440 --> 01:20:55,970 Dan akhirnya, setelah kami sudah melalui semua itu, 1232 01:20:55,970 --> 01:20:58,680 kita perlu bicara sangat cepat tentang desain, 1233 01:20:58,680 --> 01:21:00,620 dan kemudian kita dapat memberitahu Anda semua pergi. 1234 01:21:00,620 --> 01:21:03,410 Design. Hal-hal yang ingin Anda ingat. 1235 01:21:03,410 --> 01:21:06,950 Tanyakan kepada diri Anda pertanyaan-pertanyaan ini: Siapa yang akan menggunakan ini? 1236 01:21:06,950 --> 01:21:09,580 Apa yang akan mereka menggunakannya untuk? Apa pengguna saya peduli? 1237 01:21:09,580 --> 01:21:11,750 Apa yang mereka tidak peduli? 1238 01:21:11,750 --> 01:21:14,500 Anda hanya tidak ingin membuat sebuah aplikasi dan biarkan hanya tumbuh 1239 01:21:14,500 --> 01:21:18,270 dan menjadi raksasa ini, semua memakan hal yang Anda bahkan tidak bisa menyelesaikan. 1240 01:21:18,270 --> 01:21:23,900 Anda ingin memiliki tujuan diskrit dan rencana dan hal-hal yang ingin alamat. 1241 01:21:23,900 --> 01:21:29,000 Buatlah mudah. Semua ini mengatakan, pada dasarnya, 1242 01:21:29,000 --> 01:21:34,950 membuatnya mudah bagi pengguna untuk menggunakannya, jangan membuatnya menjadi gumpalan raksasa teks seperti slide ini, sebenarnya. 1243 01:21:34,950 --> 01:21:38,020 Anda hanya ingin menjadi sesuatu di mana itu sangat mudah bagi seseorang untuk masuk 1244 01:21:38,020 --> 01:21:40,800 dan melakukan apa yang mereka ingin lakukan. 1245 01:21:40,800 --> 01:21:42,920 Anda tidak ingin mereka harus menavigasi 5 halaman 1246 01:21:42,920 --> 01:21:45,460 untuk mendapatkan fungsi utama Anda situs Anda. 1247 01:21:45,460 --> 01:21:49,290 Jika Google memiliki 5 halaman sebelum Anda bahkan bisa mencari sesuatu, 1248 01:21:49,290 --> 01:21:53,080 tidak ada yang akan menggunakannya. 1249 01:21:53,080 --> 01:21:55,890 Dan terakhir, prototipe kertas, kelompok fokus. 1250 01:21:55,890 --> 01:21:59,220 Memiliki desain yang baik dan praktek pengujian. 1251 01:21:59,220 --> 01:22:00,730 Hanya karena Anda pikir itu bekerja untuk Anda, 1252 01:22:00,730 --> 01:22:04,860 tidak berarti orang lain berpikir kerjanya. 1253 01:22:04,860 --> 01:22:14,490 Tapi ya, itu saja. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]