1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID Malan: Baiklah. 3 00:00:12,360 --> 00:00:15,970 Ini adalah CS50, dan ini adalah akhir minggu sembilan. 4 00:00:15,970 --> 00:00:18,560 Sudah angin puyuh lebih beberapa hari terakhir. 5 00:00:18,560 --> 00:00:21,580 Dan permasalahan yang tujuh, jika Anda lutut jauh ke dalamnya, menyadari ada cukup 6 00:00:21,580 --> 00:00:23,340 bit baru yang ada di sana. 7 00:00:23,340 --> 00:00:26,660 Tapi mari kita lihat apakah kita tidak bisa potong segala sesuatu bersama-sama di sini sebentar 8 00:00:26,660 --> 00:00:29,230 sebelum kemudian membelok di yet arah lain dan penglihatan 9 00:00:29,230 --> 00:00:30,510 di mana lagi kita bisa pergi. 10 00:00:30,510 --> 00:00:32,630 >> Jadi sejauh ini, kita sudah bicara tentang HTML. 11 00:00:32,630 --> 00:00:33,740 Kami sudah berbicara tentang CSS. 12 00:00:33,740 --> 00:00:34,705 Kita telah berbicara tentang PHP. 13 00:00:34,705 --> 00:00:36,520 Anda sudah mulai mengalami SQL. 14 00:00:36,520 --> 00:00:38,360 Hari ini, kita akan berbicara sedikit tentang JavaScript. 15 00:00:38,360 --> 00:00:41,230 Tapi bagaimana semua ini berbeda bahasa cocok bersama-sama? 16 00:00:41,230 --> 00:00:44,970 >> Jadi kami berbicara minggu lalu tentang gagasan memiliki server. 17 00:00:44,970 --> 00:00:48,470 Jadi mari kita menggambar persegi ini sebagai web server di sini. 18 00:00:48,470 --> 00:00:52,200 Dan web server berfungsi pasti file. 19 00:00:52,200 --> 00:00:54,640 Dan beberapa dari file-file dapat file HTML. 20 00:00:54,640 --> 00:00:58,270 Jadi salah satu hal bahwa server web bisa meludah keluar mungkin file yang 21 00:00:58,270 --> 00:01:01,290 kami hanya akan menggambar seperti ini berisi beberapa HTML. 22 00:01:01,290 --> 00:01:04,786 Jadi dalam istilah awam, apa apakah HTML membiarkan Anda lakukan? 23 00:01:04,786 --> 00:01:06,036 >> AUDIENCE: Halaman tampilan yang bagus. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID Malan: OK, membuat halaman terlihat bagus, meskipun saya pikir saya telah membuktikan 26 00:01:12,310 --> 00:01:13,370 yang lain. 27 00:01:13,370 --> 00:01:18,250 Jadi HTML tidak membiarkan Anda lay out halaman struktural, dan memungkinkan Anda untuk 28 00:01:18,250 --> 00:01:22,410 semacam estetis mark up halaman, mark up konten statis, sehingga Anda 29 00:01:22,410 --> 00:01:23,640 kemudian dapat melihatnya dengan browser web. 30 00:01:23,640 --> 00:01:24,690 >> Tapi itulah kuncinya. 31 00:01:24,690 --> 00:01:26,130 Ini konten statis. 32 00:01:26,130 --> 00:01:28,590 Anda menulis itu, Anda menyimpannya, dan kemudian Anda kapal itu. 33 00:01:28,590 --> 00:01:31,130 Dan web server kemudian berfungsi itu ke pengunjung Anda. 34 00:01:31,130 --> 00:01:35,700 >> Tapi kita menyesuaikan dgn hal-hal yang berbeda menggunakan bahasa sama sekali. 35 00:01:35,700 --> 00:01:40,150 Kami mulai menggunakan atribut style Tags tertentu. 36 00:01:40,150 --> 00:01:43,400 Dan atribut style mari kita mengatur hal-hal seperti ukuran font dan warna. 37 00:01:43,400 --> 00:01:46,460 Dan Anda mungkin mulai menemukan, atau Anda segera kemauan untuk akhir 38 00:01:46,460 --> 00:01:50,160 proyek potensial, namun lain sifat yang dapat Anda gunakan dalam CSS. 39 00:01:50,160 --> 00:01:54,710 Dan dalam istilah awam, apa benar-benar kemudian apakah CSS lakukan? 40 00:01:54,710 --> 00:01:57,810 Mereka hanya contoh tersebut. 41 00:01:57,810 --> 00:02:00,730 Apa membiarkan Anda melakukan itu HTML tampaknya tidak dari apa 42 00:02:00,730 --> 00:02:02,606 kita lihat sejauh ini? 43 00:02:02,606 --> 00:02:04,850 >> AUDIENCE: Tentukan gaya sendiri. 44 00:02:04,850 --> 00:02:06,700 >> DAVID Malan: Tentukan gaya sendiri. 45 00:02:06,700 --> 00:02:10,280 Jadi menentukan hal-hal seperti kelas Anda mungkin mengalami, atau unik 46 00:02:10,280 --> 00:02:13,800 mengidentifikasi node dalam sebuah dokumen sehingga bahwa Anda dapat menyesuaikan dgn mode mereka. 47 00:02:13,800 --> 00:02:16,890 Tapi yang lebih spesifik, saya akan mengatakan bahwa CSS benar-benar memungkinkan Anda mengambil hal-hal yang 48 00:02:16,890 --> 00:02:20,790 last mile dan memungkinkan Anda untuk menentukan banyak lebih tepatnya estetika, 49 00:02:20,790 --> 00:02:24,340 sedangkan HTML untuk sebagian besar memungkinkan Anda struktur halaman Anda. 50 00:02:24,340 --> 00:02:27,310 >> Dan meskipun ada beberapa default, seperti yang kita lihat tag untuk 51 00:02:27,310 --> 00:02:30,690 tag pos, yang berbicara kasar membuat hal-hal besar dan tebal. 52 00:02:30,690 --> 00:02:34,250 Itu definisi yang cukup generik dari tag - besar dan tebal. 53 00:02:34,250 --> 00:02:35,260 Apa ukuran font itu? 54 00:02:35,260 --> 00:02:36,080 Apa warna itu? 55 00:02:36,080 --> 00:02:36,890 Bagaimana berani itu? 56 00:02:36,890 --> 00:02:39,830 Dan CSS memungkinkan Anda lebih halus hal-hal lagu seperti itu. 57 00:02:39,830 --> 00:02:42,150 Serta tata letak, karena beberapa Anda telah melihat. 58 00:02:42,150 --> 00:02:45,180 >> Dan terus terang, CSS sedikit dari bahasa berantakan. 59 00:02:45,180 --> 00:02:48,370 Ini sangat kuat dalam bahwa Anda dapat membuat harfiah setiap situs web yang Anda sudah 60 00:02:48,370 --> 00:02:51,880 dilihat di web hari ini dengan itu, tapi itu semacam rasa sakit di leher. 61 00:02:51,880 --> 00:02:54,440 Dan beberapa dari Anda telah memukul kepala Anda terhadap dinding sudah hanya untuk melakukan 62 00:02:54,440 --> 00:02:58,560 sesuatu yang bodoh seperti pusat menu pada permasalahan yang tujuh jika Anda sudah ke 63 00:02:58,560 --> 00:02:59,470 saat itu sudah. 64 00:02:59,470 --> 00:03:01,530 >> Tapi menyadari, hal-hal lebih mudah dari waktu ke waktu. 65 00:03:01,530 --> 00:03:02,820 Anda mulai melihat pola. 66 00:03:02,820 --> 00:03:06,020 Dan lagi, Google akan menjadi teman Anda untuk berbagai cara di mana Anda dapat 67 00:03:06,020 --> 00:03:07,220 memecahkan jenis-jenis masalah. 68 00:03:07,220 --> 00:03:11,520 >> Dan saya berani mengatakan dengan CSS, dan HTML lebih umumnya, Anda dapat memecahkan masalah dalam 69 00:03:11,520 --> 00:03:15,910 banyak cara, yang semuanya mungkin sangat juga benar, daripada yang Anda bisa 70 00:03:15,910 --> 00:03:18,900 dalam sesuatu seperti C, bahkan sekarang PHP, atau JavaScript. 71 00:03:18,900 --> 00:03:21,080 Hanya ada banyak yang berbeda cara untuk meletakkan hal-hal. 72 00:03:21,080 --> 00:03:22,570 >> Tapi ini mulai mendapatkan berantakan, kita katakan. 73 00:03:22,570 --> 00:03:26,480 Hanya jenis percampuran HTML Anda dan CSS Anda dengan atribut style adalah 74 00:03:26,480 --> 00:03:27,590 sedikit ceroboh. 75 00:03:27,590 --> 00:03:31,460 Dan jadi kita malah berkata, semacam abstrak berbicara, bahwa Anda harus 76 00:03:31,460 --> 00:03:34,050 setidaknya mulai faktor out CSS Anda mungkin. 77 00:03:34,050 --> 00:03:37,430 Bukan gaya Anda atribut, tapi setidaknya menggunakan tag gaya dalam apa yang 78 00:03:37,430 --> 00:03:38,840 bagian dari halaman web? 79 00:03:38,840 --> 00:03:39,560 >> AUDIENCE: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID Malan: Dalam kepala. 81 00:03:40,120 --> 00:03:43,270 Sampai sekarang, kami hanya memiliki judul up ada, tetapi Anda juga dapat menambahkan gaya 82 00:03:43,270 --> 00:03:47,230 tag, dan Anda dapat menempatkan CSS Anda kira-kira berbicara ke arah bagian atas halaman. 83 00:03:47,230 --> 00:03:52,550 Tapi kemudian kami mengambil hal-hal satu langkah lebih lanjut dan kita diperhitungkan bahwa tahu lebih lanjut 84 00:03:52,550 --> 00:03:54,130 ke file terpisah. 85 00:03:54,130 --> 00:03:57,240 >> Dan kedua file yang entah bagaimana sekarang terhubung. 86 00:03:57,240 --> 00:03:59,550 Dan memang itu adalah tag yang melakukannya. 87 00:03:59,550 --> 00:04:02,920 Dan apa adalah salah satu yang menyeluruh motivasi untuk anjak keluar CSS kami 88 00:04:02,920 --> 00:04:04,057 semua lebih? 89 00:04:04,057 --> 00:04:05,280 >> AUDIENCE: Reusability. 90 00:04:05,280 --> 00:04:05,785 >> DAVID Malan: Usabilitas. 91 00:04:05,785 --> 00:04:06,150 Benar? 92 00:04:06,150 --> 00:04:09,470 Anda mungkin telah melihat dalam p-set tujuh sudah bahwa banyak halaman, 93 00:04:09,470 --> 00:04:12,260 Halaman membeli, halaman penjualan, yang Halaman portofolio, mungkin 94 00:04:12,260 --> 00:04:13,550 terstruktur agak sama. 95 00:04:13,550 --> 00:04:17,579 Ada logo CS50 keuangan di atas kecuali jika Anda telah memutuskan untuk mengubahnya. 96 00:04:17,579 --> 00:04:19,839 Ada footer di bawah halaman. 97 00:04:19,839 --> 00:04:24,315 Dan CSS memungkinkan Anda kemudian untuk faktor itu menjadi file terpisah sehingga jika 98 00:04:24,315 --> 00:04:27,780 Anda ingin mengubah sesuatu secara global di seluruh situs Anda, Anda dapat benar-benar 99 00:04:27,780 --> 00:04:29,390 hanya mengubahnya dalam satu tempat. 100 00:04:29,390 --> 00:04:32,750 >> Tapi ada harga yang Anda bayar berpotensi oleh karena faktor luar 101 00:04:32,750 --> 00:04:38,380 CSS dari file HTML saya menjadi terpisah mengajukan referensi itu dengan 102 00:04:38,380 --> 00:04:40,650 tag, yang kita lihat pada hari Senin. 103 00:04:40,650 --> 00:04:43,850 Apa yang mungkin downside menjadi ini? 104 00:04:43,850 --> 00:04:48,830 Berpikir kembali seminggu yang lalu ketika kami berbicara tentang HTTP dan TCP / IP dan bagaimana 105 00:04:48,830 --> 00:04:52,070 internet bekerja. 106 00:04:52,070 --> 00:04:53,530 Sesuatu di sini? 107 00:04:53,530 --> 00:04:54,730 >> AUDIENCE: Ini membutuhkan waktu lebih lama. 108 00:04:54,730 --> 00:04:55,470 >> DAVID Malan: Ini membutuhkan waktu lebih lama. 109 00:04:55,470 --> 00:04:56,750 Mengapa? 110 00:04:56,750 --> 00:04:59,450 >> AUDIENCE: [Tak terdengar]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID Malan: Ya. 112 00:04:59,750 --> 00:05:01,240 Jadi bisa dibilang membutuhkan sedikit lebih banyak waktu. 113 00:05:01,240 --> 00:05:04,290 Karena salah satu, CSS jelas tidak dalam file yang sama. 114 00:05:04,290 --> 00:05:06,920 Jadi sekarang Anda harus membuat tidak satu, tapi dua permintaan. 115 00:05:06,920 --> 00:05:11,230 Dan masing-masing permintaan seperti yang kita lihat di Chrome di apa yang disebut Inspektur, 116 00:05:11,230 --> 00:05:15,740 dan kami melihat tab jaringan, masing-masing file-file memerlukan satu HTTP 117 00:05:15,740 --> 00:05:18,360 permintaan, yang kita lihat mengambil beberapa jumlah waktu. 118 00:05:18,360 --> 00:05:19,290 Sekarang, mungkin itu tidak banyak. 119 00:05:19,290 --> 00:05:20,670 Mungkin itu hanya 20 milidetik. 120 00:05:20,670 --> 00:05:22,260 Mungkin 200 milidetik. 121 00:05:22,260 --> 00:05:25,530 >> Tapi berpikir tentang halaman seperti Facebook, atau CNN, atau Google, yang jauh 122 00:05:25,530 --> 00:05:28,060 lebih besar dari contoh kita sudah melihat sejauh ini. 123 00:05:28,060 --> 00:05:32,070 Halaman tersebut mungkin memiliki puluhan file, masing-masing yang mungkin memerlukan 124 00:05:32,070 --> 00:05:33,550 download file. 125 00:05:33,550 --> 00:05:35,800 Jadi hal-hal dapat berpotensi mulai melambat. 126 00:05:35,800 --> 00:05:39,280 >> Dan terutama hari-hari ini ketika kita semua memiliki ponsel di saku kita dan 127 00:05:39,280 --> 00:05:43,010 koneksi internet lambat, harus tunggu milidetik lebih sedikit, beberapa 128 00:05:43,010 --> 00:05:46,110 lebih milidetik untuk tambahan file sebenarnya bisa lambat. 129 00:05:46,110 --> 00:05:50,430 Latency adalah kata yang menggambarkan jenis menunggu yang Anda miliki bahwa Anda 130 00:05:50,430 --> 00:05:53,110 alami saat menunggu beberapa bagian dari informasi. 131 00:05:53,110 --> 00:05:54,430 >> Tapi ada yang terbalik. 132 00:05:54,430 --> 00:05:56,600 Jadi tidak semua semacam - 133 00:05:56,600 --> 00:05:58,170 sebenarnya sedikit jungkat-jungkit di sini. 134 00:05:58,170 --> 00:06:02,970 Downside sekarang, tapi apa browser dapat melakukan jika mereka pintar untuk menghindari 135 00:06:02,970 --> 00:06:08,870 harus meminta styles.css yang sama file lagi dapat melakukan apa? 136 00:06:08,870 --> 00:06:09,390 >> Cache. 137 00:06:09,390 --> 00:06:10,370 Jadi caching - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 umumnya berarti di sini hanya untuk menyimpan file yang diminta pertama kali, dan 140 00:06:15,810 --> 00:06:17,440 kemudian memeriksa cache untuk itu. 141 00:06:17,440 --> 00:06:20,400 Periksa Anda semacam wadah penyimpanan, dan jika Anda sudah memiliki 142 00:06:20,400 --> 00:06:24,520 salinan styles.css, bahkan jika beberapa lainnya Halaman dalam p-set, atau situs web apapun, 143 00:06:24,520 --> 00:06:28,560 memintanya lagi, hanya untuk memberikan pengguna yang salinan cache yang sama. 144 00:06:28,560 --> 00:06:30,140 Jangan repot-repot meminta itu. 145 00:06:30,140 --> 00:06:32,560 >> Kelemahan di sana, meskipun, karena beberapa dari Anda telah tersandung dalam p-set. 146 00:06:32,560 --> 00:06:35,870 Jika Anda membuat perubahan pada server dan Anda kembali ke browser dan Anda 147 00:06:35,870 --> 00:06:39,250 ulang, kadang-kadang browser tidak Anda nikmat dan tidak mengganggu 148 00:06:39,250 --> 00:06:43,660 kembali men-download file styles.css Anda karena, ayolah, apa yang kemungkinan 149 00:06:43,660 --> 00:06:47,620 bahwa gaya ini yang menggunakan Facebook akan mengubah jam ke jam atau 150 00:06:47,620 --> 00:06:48,140 hari ke hari? 151 00:06:48,140 --> 00:06:48,800 Hal ini cukup rendah. 152 00:06:48,800 --> 00:06:52,260 Mereka mungkin berubah dari waktu ke waktu, tetapi tidak menit ke menit atau per jam. 153 00:06:52,260 --> 00:06:55,810 >> Jadi trik, hanya FYI ketika melakukan web pembangunan, sering tahan 154 00:06:55,810 --> 00:06:59,500 kunci pergeseran misalnya dan kemudian klik ulang di browser Anda, dan kemauan yang 155 00:06:59,500 --> 00:07:03,280 biasanya memberitahu reload Browser segala sesuatu, bahkan jika Anda sudah memiliki 156 00:07:03,280 --> 00:07:04,180 dalam cache. 157 00:07:04,180 --> 00:07:06,630 Jadi sekali lagi, keuntungan dan kerugian, tapi semuanya 158 00:07:06,630 --> 00:07:08,260 akhirnya desain keputusan. 159 00:07:08,260 --> 00:07:11,520 >> Jadi sekarang, kita tidak hanya mengakhiri cerita di sini. 160 00:07:11,520 --> 00:07:15,790 Jika sekarang saya kembali dan kembali dan kembali dan kembali, kami mulai memperkenalkan tidak hanya 161 00:07:15,790 --> 00:07:18,060 HTML, tetapi PHP. 162 00:07:18,060 --> 00:07:20,786 Jadi dalam istilah awam, apa apakah PHP mari kita lakukan? 163 00:07:20,786 --> 00:07:22,770 >> AUDIENCE: [Tak terdengar]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID Malan: Apa itu? 165 00:07:24,258 --> 00:07:25,250 >> AUDIENCE: Perkenalkan logika ke dalam kode. 166 00:07:25,250 --> 00:07:26,620 >> DAVID Malan: Ya, memperkenalkan logika ke dalam kode Anda. 167 00:07:26,620 --> 00:07:29,570 Jadi itu adalah bahasa pemrograman yang benar dengan loop, dan variabel, dan 168 00:07:29,570 --> 00:07:32,620 fungsi, dan kondisi, dan semua hal yang kita telah menggunakan jalan kembali 169 00:07:32,620 --> 00:07:33,780 ketika sejak awal. 170 00:07:33,780 --> 00:07:36,780 Dan PHP, telah kita lihat, dapat digunakan baik pada baris perintah - itu 171 00:07:36,780 --> 00:07:39,190 tidak harus ada hubungannya dengan web, meskipun itu 172 00:07:39,190 --> 00:07:43,150 benar-benar asal-usulnya dan apa yang cenderung untuk menjadi baik dan kondusif untuk - 173 00:07:43,150 --> 00:07:47,130 tetapi Anda dapat menggunakan PHP hanya oleh alam dari fakta bahwa ia memiliki cetak () 174 00:07:47,130 --> 00:07:49,660 fungsi, dan printf () fungsi, atau echo () function. 175 00:07:49,660 --> 00:07:52,440 Ada tandan cara Anda dapat mencetak teks dengan PHP. 176 00:07:52,440 --> 00:07:56,540 >> Oleh karena itu, Anda dapat menggunakan program ini bahasa ke output persis 177 00:07:56,540 --> 00:07:58,460 apa yang kita bicarakan sebelumnya. 178 00:07:58,460 --> 00:08:01,360 Anda dinamis dapat menghasilkan HTML Anda. 179 00:08:01,360 --> 00:08:02,300 Mungkin tidak semuanya. 180 00:08:02,300 --> 00:08:06,460 Mungkin Anda sulit hal kode, seperti header, dan footer, dan logo, 181 00:08:06,460 --> 00:08:07,950 dan style sheet Anda, dan semua itu. 182 00:08:07,950 --> 00:08:11,190 Tapi untuk sesuatu seperti p-set tujuh, di mana Anda memanipulasi saham dan 183 00:08:11,190 --> 00:08:14,690 menampilkan portofolio pengguna, yang akan berubah secara dinamis, Anda bisa 184 00:08:14,690 --> 00:08:18,960 pasti menggunakan PHP dan logika memberikan Anda sebagai bahasa pemrograman untuk 185 00:08:18,960 --> 00:08:22,320 Output dinamis subhimpunan halaman. 186 00:08:22,320 --> 00:08:25,900 >> Jadi, ketika Anda berbicara tentang website dinamis, atau pemrograman web, itu 187 00:08:25,900 --> 00:08:27,200 apa yang Anda benar-benar berbicara tentang. 188 00:08:27,200 --> 00:08:31,450 Menggunakan bahasa seperti PHP, atau hal-hal disebut Python, atau Ruby, atau Java, atau 189 00:08:31,450 --> 00:08:35,900 namun bahasa lain, untuk query database sering, atau server lain, dan 190 00:08:35,900 --> 00:08:38,580 kemudian secara dinamis meludahkan HTML. 191 00:08:38,580 --> 00:08:42,470 >> Sekarang hasil akhirnya, sebagai samping, adalah bahwa HTML dari situs yang paling, 192 00:08:42,470 --> 00:08:45,970 termasuk p-set tujuh Anda, mungkin akan menjadi kekacauan besar jika 193 00:08:45,970 --> 00:08:48,060 Anda melihat sumber kode dalam browser. 194 00:08:48,060 --> 00:08:49,010 Itu bukan masalah besar. 195 00:08:49,010 --> 00:08:51,550 Pada titik ini, ketika kita peduli gaya, kita peduli tentang 196 00:08:51,550 --> 00:08:52,740 hal-hal yang Anda tulis. 197 00:08:52,740 --> 00:08:56,240 Kami tidak akan peduli tentang hal-hal bahwa apa output kode Anda. 198 00:08:56,240 --> 00:08:59,520 Jadi jangan khawatir tentang lekukan di sini jika itu PHP yang 199 00:08:59,520 --> 00:09:01,190 sebenarnya keluaran barang. 200 00:09:01,190 --> 00:09:04,430 Setelah semua, browser tidak akan peduli, dan manusia tidak akan mencari 201 00:09:04,430 --> 00:09:05,400 sumbernya pula. 202 00:09:05,400 --> 00:09:09,000 Kami staf, misalnya, akan akan melihat PHP Anda. 203 00:09:09,000 --> 00:09:13,440 >> Jadi izinkan saya memberikan contoh cepat sekarang mengapa yang lain ini mungkin berguna. 204 00:09:13,440 --> 00:09:18,620 Jadi terus terang, saya tidak bisa ingat kapan terakhir kali saya menggunakan C untuk memecahkan masalah dalam 205 00:09:18,620 --> 00:09:19,620 dunia nyata. 206 00:09:19,620 --> 00:09:22,330 Itu mungkin di sekolah pascasarjana ketika Saya perlu menggunakan bahasa yang 207 00:09:22,330 --> 00:09:26,710 adalah level yang cukup rendah dan memberi saya kesempatan untuk melakukan sesuatu yang sangat tinggi 208 00:09:26,710 --> 00:09:30,720 melakukan untuk benar-benar menyimpan banyak CPU siklus yang saya bisa, sebagian besar 209 00:09:30,720 --> 00:09:33,990 karena saya menggunakan set data yang besar, dan setiap siklus CPU dihitung. 210 00:09:33,990 --> 00:09:37,750 Dan terus terang, bahkan dalam hal-hal seperti telepon hari ini dan perangkat lain 211 00:09:37,750 --> 00:09:39,910 di mana Anda tidak cukup memiliki banyak memori dan Anda tidak cukup memiliki sebagai 212 00:09:39,910 --> 00:09:44,160 banyak CPU, dengan menggunakan bahasa yang lebih cepat masih menarik. 213 00:09:44,160 --> 00:09:47,290 >> Tapi di dunia nyata, ketika Anda hanya ingin melemparkan beberapa program yang sama untuk 214 00:09:47,290 --> 00:09:50,340 menganalisis beberapa data, atau Anda telah dikumpulkan sejumlah besar pendaftaran untuk 215 00:09:50,340 --> 00:09:53,330 beberapa kelompok mahasiswa dan Anda ingin sangat cepat mengotomatisasi pengiriman email 216 00:09:53,330 --> 00:09:56,240 satu per satu untuk setiap salah satu dari mereka pendaftar, Anda akan meraih 217 00:09:56,240 --> 00:09:59,240 bahasa tingkat tinggi dari C sehingga untuk berbicara. 218 00:09:59,240 --> 00:10:04,060 Sesuatu seperti PHP atau Python, atau Ruby, atau setengah lusin orang lain yang ada 219 00:10:04,060 --> 00:10:04,550 hari ini. 220 00:10:04,550 --> 00:10:07,200 Tapi ketiga mungkin paling trendi saat ini. 221 00:10:07,200 --> 00:10:10,840 >> Dan apa artinya ini adalah bahwa Anda dapat membuka up editor teks seperti gedit atau 222 00:10:10,840 --> 00:10:14,030 kebanyakan apa pun dan kemudian hanya mulai menulis kode tanpa harus khawatir 223 00:10:14,030 --> 00:10:17,800 tentang kompilasi, tanpa harus benar-benar khawatir tentang manajemen memori, 224 00:10:17,800 --> 00:10:20,820 menjaga diingat meskipun sedikit Kecerobohan akhirnya akan kembali 225 00:10:20,820 --> 00:10:24,790 menggigit Anda jika kumpulan data akan lebih besar atau masalahnya bertambah besar. 226 00:10:24,790 --> 00:10:27,230 Tapi apa artinya ini bagi kami adalah sebagai berikut. 227 00:10:27,230 --> 00:10:29,860 >> Biarkan aku pergi ke depan dan menjalankan ejaan dari masalah menetapkan enam. 228 00:10:29,860 --> 00:10:33,480 Jadi ini adalah implementasi berbasis trie saya yang saya gunakan pada besar 229 00:10:33,480 --> 00:10:35,500 papan di mana saya tampil tidak begitu baik. 230 00:10:35,500 --> 00:10:38,720 Kami akan kembali dalam waktu seminggu dan kembali orang-orang yang tidak berakhir di atas 231 00:10:38,720 --> 00:10:40,430 papan besar di kuliah terakhir kami. 232 00:10:40,430 --> 00:10:44,520 Tetapi untuk sekarang, biarkan aku pergi ke depan dan hanya menjalankan solusi saya dalam teks, dan kami akan melakukan 233 00:10:44,520 --> 00:10:48,460 King James Bible, dan di sini kita pergi. 234 00:10:48,460 --> 00:10:51,080 >> Jadi mereka adalah semua seharusnya kata yang salah eja dari 235 00:10:51,080 --> 00:10:52,240 King James Bible. 236 00:10:52,240 --> 00:10:55,560 Dan implementasi saya mengambil setengah detik total. 237 00:10:55,560 --> 00:10:58,270 Jadi tidak terlalu buruk ini komputer tertentu. 238 00:10:58,270 --> 00:11:01,540 Tapi pikirkan berapa banyak kode saya harus menulis. 239 00:11:01,540 --> 00:11:02,880 Pikirkan berapa banyak kode Anda harus menulis. 240 00:11:02,880 --> 00:11:06,170 Pikirkan berapa banyak waktu yang Anda habiskan di D-hall atau asrama Anda atau di mana pun 241 00:11:06,170 --> 00:11:07,890 sebenarnya coding up solusi itu. 242 00:11:07,890 --> 00:11:11,850 >> Yah, kalau aku benar-benar memiliki tingkat yang lebih tinggi bahasa seperti PHP, perhatikan 243 00:11:11,850 --> 00:11:13,350 apa yang bisa saya lakukan di sini. 244 00:11:13,350 --> 00:11:16,410 Pertama, anggaplah bahwa ini adalah bukan kode distribusi Anda. 245 00:11:16,410 --> 00:11:17,790 Ini adalah sebuah file yang bernama ejaan. 246 00:11:17,790 --> 00:11:20,220 Ini tersedia sebagai bagian dari hari ini kode distribusi. 247 00:11:20,220 --> 00:11:22,670 Dan aku akan melambaikan tangan saya di paling rincian, tapi ini sebenarnya 248 00:11:22,670 --> 00:11:25,500 contoh menarik tentang bagaimana Anda mungkin pelabuhan bahasa 249 00:11:25,500 --> 00:11:28,870 seperti C ke PHP. 250 00:11:28,870 --> 00:11:33,420 Aku benar-benar membuka dua jendela teks, satu dengan versi C saya speller.c, 251 00:11:33,420 --> 00:11:36,960 dan saya hanya mulai menerjemahkan dalam saya kepala ke PHP dan mengetik dengan menggunakan 252 00:11:36,960 --> 00:11:38,840 fungsi yang paling dekat. 253 00:11:38,840 --> 00:11:40,100 >> Jadi beberapa hal ini berbeda. 254 00:11:40,100 --> 00:11:43,730 Kami melihat terakhir kali PHP tidak menggunakan termasuk dalam cukup dengan cara yang sama. 255 00:11:43,730 --> 00:11:47,050 Menggunakan membutuhkan biasanya, meskipun termasuk tidak ada. 256 00:11:47,050 --> 00:11:50,330 Tentukan sedikit berbeda dari # Define di C, tapi itu 257 00:11:50,330 --> 00:11:51,890 bagaimana kita membuat sebuah konstanta. 258 00:11:51,890 --> 00:11:55,860 $ Argc ternyata ada di PHP, jadi kami telah melihat itu sebelumnya. 259 00:11:55,860 --> 00:11:58,650 Ini hanya variabel, semua yang dimulai dengan tanda dolar. 260 00:11:58,650 --> 00:12:00,590 Ingat ini hanya sekelompok titik mengambang. 261 00:12:00,590 --> 00:12:03,970 >> Jadi cerita panjang pendek, Anda dipersilakan untuk membolak-balik ini jika penasaran, ini 262 00:12:03,970 --> 00:12:10,010 hampir konversi dari garis-untuk-line Versi C dari speller.c ke PHP. 263 00:12:10,010 --> 00:12:12,630 Dan Anda bisa melakukan ini lagi untuk setengah lusin bahasa lain. 264 00:12:12,630 --> 00:12:14,910 >> Namun yang menarik adalah ini. 265 00:12:14,910 --> 00:12:16,910 Atau apa terus terang menyedihkan adalah ini. 266 00:12:16,910 --> 00:12:20,790 Biarkan aku pergi ke depan dan ketik about dictionary.php, dan klaim bahwa aku 267 00:12:20,790 --> 00:12:23,670 akan pergi ke depan dan melaksanakan re- Masalah menetapkan enam di sini. 268 00:12:23,670 --> 00:12:27,530 >> Jadi mari kita mengusulkan pertama yang dalam hal ini File, yang akan dilaksanakan di 269 00:12:27,530 --> 00:12:30,550 PHP, jadi biarkan aku membuka tag saya seperti itu. 270 00:12:30,550 --> 00:12:34,780 Biarkan saya memberi diriku global variabel, $ size mendapat nol. 271 00:12:34,780 --> 00:12:36,710 Dan aku akan memberikan diriku tabel hash. 272 00:12:36,710 --> 00:12:38,110 Saya akan menggunakan tabel hash untuk hal ini. 273 00:12:38,110 --> 00:12:42,070 Bagaimana cara mendeklarasikan sebuah tabel hash di PHP? 274 00:12:42,070 --> 00:12:42,990 Selesai. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> Braket begitu terbuka braket dekat mewakili apa di PHP, seperti yang kita lihat? 277 00:12:48,870 --> 00:12:51,850 Array, tetapi sebuah array yang bisa menjadi array asosiatif. 278 00:12:51,850 --> 00:12:54,320 Array asosiatif adalah struktur data yang 279 00:12:54,320 --> 00:12:55,860 menghubungkan kunci dengan nilai-nilai. 280 00:12:55,860 --> 00:12:59,430 >> Sekarang di sederhana numerik diindeks array, orang-orang kunci adalah apa? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Nol, satu, dua, tiga, kan? 283 00:13:03,960 --> 00:13:08,780 Old school barang kembali dari C. Tapi itu bisa juga menjadi string seperti foo, dan bar, 284 00:13:08,780 --> 00:13:12,210 atau Maxwell, atau string tersebut. 285 00:13:12,210 --> 00:13:14,240 Jadi aku bisa memanfaatkan itu hanya dalam beberapa saat. 286 00:13:14,240 --> 00:13:17,550 >> Biarkan aku pergi ke depan dan menyatakan fungsi seperti - 287 00:13:17,550 --> 00:13:19,020 mari kita lakukan load () pertama. 288 00:13:19,020 --> 00:13:20,690 Jadi fungsi load (). 289 00:13:20,690 --> 00:13:23,440 Dan PHP adalah sedikit berbeda dalam Anda benar-benar tipe fungsi, tetapi Anda 290 00:13:23,440 --> 00:13:24,930 jangan mengetik jenis kembali. 291 00:13:24,930 --> 00:13:28,760 Aku akan pergi ke depan dan mengatakan bahwa load () fungsi harus mengambil 292 00:13:28,760 --> 00:13:31,000 argumen $ kamus, hanya seperti versi C lakukan. 293 00:13:31,000 --> 00:13:32,510 Saya melakukan itu dari memori. 294 00:13:32,510 --> 00:13:34,910 >> Dan saya mengusulkan bahwa saya akan melakukan hal ini. 295 00:13:34,910 --> 00:13:37,080 Saya hanya akan melakukan foreach. 296 00:13:37,080 --> 00:13:40,710 Aku akan memanggil fungsi yang disebut file (), lewat di atas nama yang 297 00:13:40,710 --> 00:13:44,990 mengajukan, yang merupakan variabel $ Kamus sebagai $ kata. 298 00:13:44,990 --> 00:13:49,410 Dan kemudian dalam saya untuk loop di sini, aku akan pergi ke depan dan simpan di saya 299 00:13:49,410 --> 00:13:57,440 $ $ Tabel yang kata mendapatkan benar. 300 00:13:57,440 --> 00:13:57,918 Selesai. 301 00:13:57,918 --> 00:14:01,264 Oh, tunggu. 302 00:14:01,264 --> 00:14:02,422 Selesai. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> Itu adalah beban () function mengatakan di PHP. 305 00:14:04,970 --> 00:14:05,865 Sekarang, mengapa yang bekerja? 306 00:14:05,865 --> 00:14:07,010 Dan Aku agak curang di sini. 307 00:14:07,010 --> 00:14:09,980 >> Jadi, satu, foreach kita lihat sebentar terakhir kali. 308 00:14:09,980 --> 00:14:13,680 Ini hanya berarti bahwa Anda dapat iterate atas array tanpa mengganggu dengan i 309 00:14:13,680 --> 00:14:16,150 dan n dan plus plus, dan semua itu. 310 00:14:16,150 --> 00:14:21,350 Kamus ini tentu saja nama file, sesuatu seperti besar atau kecil, dua 311 00:14:21,350 --> 00:14:22,830 kamus kita gunakan terakhir kali. 312 00:14:22,830 --> 00:14:26,715 File adalah fungsi yang membuka teks berkas, membacanya dalam baris demi baris, dan 313 00:14:26,715 --> 00:14:29,840 tangan Anda kembali array besar, masing-masing elemen yang merupakan 314 00:14:29,840 --> 00:14:31,340 baris dari file tersebut. 315 00:14:31,340 --> 00:14:36,040 Jadi itulah kombinasi fopen, dan fread, dan while loop, dan fclose, 316 00:14:36,040 --> 00:14:37,080 dan semua itu. 317 00:14:37,080 --> 00:14:40,150 Akhirnya, seperti kata hanya berarti itulah variabel Aku akan memiliki akses ke 318 00:14:40,150 --> 00:14:41,890 pada setiap iterasi dalam lingkaran ini. 319 00:14:41,890 --> 00:14:46,910 >> Jadi singkatnya, ini satu kapal di sini berarti membuka file yang namanya di 320 00:14:46,910 --> 00:14:50,750 kamus, variabel, iterate atas baris demi baris, dan setiap kali Anda mendapatkan 321 00:14:50,750 --> 00:14:54,290 baris, simpan dalam variabel yang disebut kata, dan kemudian melakukan sesuatu dengan kata. 322 00:14:54,290 --> 00:14:55,280 Apa yang ingin saya lakukan? 323 00:14:55,280 --> 00:14:58,110 Saya ingin menempatkan kata ke dalam tabel hash saya. 324 00:14:58,110 --> 00:15:00,860 >> Yah, aku bisa memasukkan sesuatu ke dalam saya hash table seperti di C 325 00:15:00,860 --> 00:15:02,140 menggunakan tanda kurung siku. 326 00:15:02,140 --> 00:15:03,660 Ini adalah nama untuk tabel hash saya. 327 00:15:03,660 --> 00:15:07,180 Aku akan indeks ke hash yang tabel di lokasi ini. 328 00:15:07,180 --> 00:15:08,920 Jadi tidak braket nol, tidak braket satu. 329 00:15:08,920 --> 00:15:11,990 Bracket kutipan tanda kutip sesuatu, apa kata itu. 330 00:15:11,990 --> 00:15:15,200 Dan seperti yang mungkin Anda miliki di Anda trie kerja tabel hash, Anda hanya toko 331 00:15:15,200 --> 00:15:17,650 efektif Boolean, secara implisit atau secara eksplisit. 332 00:15:17,650 --> 00:15:18,260 Selesai. 333 00:15:18,260 --> 00:15:20,000 Aku menyimpan nilai benar. 334 00:15:20,000 --> 00:15:23,150 >> Sekarang ada beberapa hal Aku memotong sudut di sini. 335 00:15:23,150 --> 00:15:27,720 Secara teknis, ada akan menjadi baris baru mengganggu, / n, pada akhir 336 00:15:27,720 --> 00:15:28,820 masing-masing kata-kata ini. 337 00:15:28,820 --> 00:15:31,770 Jadi saya mungkin harus memanggil fungsi PHP disebut chop (), yang akan 338 00:15:31,770 --> 00:15:33,460 secara harfiah memotong yang off. 339 00:15:33,460 --> 00:15:35,020 Dan aku benar-benar perlu melakukan satu hal lain. 340 00:15:35,020 --> 00:15:38,380 Aku mungkin harus kenaikan ukuran pada masing-masing iterasi, jadi aku melacak 341 00:15:38,380 --> 00:15:39,560 global dari apa itu. 342 00:15:39,560 --> 00:15:43,180 Dan terus terang, dan ini adalah salah satu aspek bodoh PHP, jika Anda 343 00:15:43,180 --> 00:15:46,950 menggunakan variabel global, Anda perlu secara eksplisit mengatakan bahwa Anda. 344 00:15:46,950 --> 00:15:51,670 Jadi aku akan benar-benar ketik dunia $ Ukuran, $ tabel global, dan sekarang 345 00:15:51,670 --> 00:15:52,690 fungsi saya selesai. 346 00:15:52,690 --> 00:15:57,475 >> Jadi tidak sesederhana seperti sebelumnya, tetapi mungkin mengambil waktu kurang dari C 347 00:15:57,475 --> 00:15:58,220 versi, mungkin? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> Jadi sekarang mari kita lakukan cek () function. 350 00:16:00,390 --> 00:16:04,300 Mari kita lihat apakah ini setidaknya mengambil berjam-jam yang membawa kami di C. Jadi 351 00:16:04,300 --> 00:16:06,500 biarkan aku pergi ke depan dan menyatakan periksa sebagai fungsi. 352 00:16:06,500 --> 00:16:09,070 Membawa dalam kata argumen, yang akan datang dari ejaan. 353 00:16:09,070 --> 00:16:13,410 Dan aku hanya akan memeriksa apakah berikut isset variabel, tabel 354 00:16:13,410 --> 00:16:18,400 braket strtolower kata - 355 00:16:18,400 --> 00:16:20,590 mari kita menyeimbangkan semua kurung saya - 356 00:16:20,590 --> 00:16:24,275 kemudian kembali benar. 357 00:16:24,275 --> 00:16:27,020 358 00:16:27,020 --> 00:16:28,460 Lain - 359 00:16:28,460 --> 00:16:30,330 itu benar-benar keras bagian dari program ini. 360 00:16:30,330 --> 00:16:31,940 Lain, kembali palsu. 361 00:16:31,940 --> 00:16:32,630 Selesai. 362 00:16:32,630 --> 00:16:33,460 Itu cek (). 363 00:16:33,460 --> 00:16:34,520 >> Sekarang, mengapa hal ini bekerja? 364 00:16:34,520 --> 00:16:37,040 Nah, yang saya lulus dalam kata, yang merupakan string. 365 00:16:37,040 --> 00:16:41,400 Dua, aku memeriksa dalam hash tabel, yang disebut $ tabel. 366 00:16:41,400 --> 00:16:45,470 Aku memaksanya untuk huruf kecil dengan menelepon fungsi sangat mirip tolower () di 367 00:16:45,470 --> 00:16:48,580 C, tapi ini tidak seluruh kata, bukan karakter tunggal. 368 00:16:48,580 --> 00:16:52,680 Dan jika itu diatur, dengan kata lain ada adalah nilai yang ditetapkan, dengan kata lain, 369 00:16:52,680 --> 00:16:54,880 jika itu benar, maka ya, ini adalah sebuah kata. 370 00:16:54,880 --> 00:16:56,530 Karena aku menaruhnya di sana dengan beban (). 371 00:16:56,530 --> 00:16:59,100 Dan jika tidak, aku akan kembali palsu. 372 00:16:59,100 --> 00:17:00,090 >> Sekarang yang lain mudah. 373 00:17:00,090 --> 00:17:03,570 Ukuran function (), bagaimana saya melakukan ini? 374 00:17:03,570 --> 00:17:05,230 Pada dasarnya saya kembali $ ukuran. 375 00:17:05,230 --> 00:17:07,770 Tapi aku secara teknis perlu melakukan hal ini menjengkelkan. 376 00:17:07,770 --> 00:17:10,640 Dan sebenarnya sampai mendengar, saya memotong salah satu sudut terlalu banyak. 377 00:17:10,640 --> 00:17:12,920 Aku benar-benar perlu melakukan $ tabel global. 378 00:17:12,920 --> 00:17:16,260 >> Tapi itu dikatakan, membongkar). 379 00:17:16,260 --> 00:17:17,380 Membongkar () menakjubkan. 380 00:17:17,380 --> 00:17:20,500 Fungsi membongkar (). 381 00:17:20,500 --> 00:17:23,990 Bagaimana saya ingin menerapkan membongkar ()? 382 00:17:23,990 --> 00:17:25,079 Selesai. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> Jadi membongkar (), manajemen memori benar-benar diambil dari perawatan untuk Anda dalam 385 00:17:28,900 --> 00:17:31,800 sesuatu seperti PHP dan banyak dari bahasa tingkat tinggi. 386 00:17:31,800 --> 00:17:32,600 Jadi ini luar biasa. 387 00:17:32,600 --> 00:17:36,080 Seperti mengapa sih kita menghabiskan masa lalu delapan minggu ditambah pada penulisan C 388 00:17:36,080 --> 00:17:41,030 rupanya benar-benar lambat, benar-benar waktu mengkonsumsi masalah dengan puluhan jam 389 00:17:41,030 --> 00:17:42,530 dari bekerja di bawah ikat pinggang kita? 390 00:17:42,530 --> 00:17:46,110 >> Nah, untuk satu hal, ini dapat bekerja baik untuk program kecil. 391 00:17:46,110 --> 00:17:47,840 Ini tentu mempercepat saya waktu pengembangan. 392 00:17:47,840 --> 00:17:49,790 Tapi mari kita lihat apa yang terjadi di dunia nyata. 393 00:17:49,790 --> 00:17:52,370 >> Biarkan aku pergi ke direktori ini di jendela terminal. 394 00:17:52,370 --> 00:17:53,370 Ada ejaan. 395 00:17:53,370 --> 00:17:56,570 Dan perhatikan sebagai samping, dan Anda mungkin telah mengalami ini dalam masalah set 396 00:17:56,570 --> 00:17:58,190 enam atau tujuh set masalah. 397 00:17:58,190 --> 00:18:01,610 Anda tidak benar-benar perlu mengakhiri file PHP dengan php.. 398 00:18:01,610 --> 00:18:05,250 Jika Anda menempatkan sebuah baris seperti yang pertama di bagian paling atas, itu adalah jalur khusus 399 00:18:05,250 --> 00:18:10,980 sintaks yang pada dasarnya berarti menemukan program yang disebut PHP dan menggunakannya untuk 400 00:18:10,980 --> 00:18:12,270 menafsirkan file ini. 401 00:18:12,270 --> 00:18:15,410 Jadi sekarang tidak ada yang benar-benar tahu bahwa Aku sedang menjalankan program PHP. 402 00:18:15,410 --> 00:18:19,860 Saya bisa menjalankannya hanya seolah-olah itu yang sesuatu disusun dalam C. 403 00:18:19,860 --> 00:18:20,650 >> Tapi ada satu hal. 404 00:18:20,650 --> 00:18:21,600 Sebenarnya, mari kita lakukan ini lagi. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Ada ejaan. 407 00:18:25,390 --> 00:18:26,720 OK, 0,44 detik. 408 00:18:26,720 --> 00:18:28,080 Hal ini menjadi lebih cepat saat ini. 409 00:18:28,080 --> 00:18:29,745 >> Sekarang mari kita pergi ke versi PHP. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Bagus sekali sentuh. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Tapi hanya berpikir berapa banyak waktu Aku disimpan pada jam-jam kantor. 414 00:18:53,285 --> 00:18:56,990 415 00:18:56,990 --> 00:18:57,790 OK. 416 00:18:57,790 --> 00:19:01,020 >> Jadi 3.59 detik, yang sebenarnya tidak terdengar akurat baik. 417 00:19:01,020 --> 00:19:03,710 Tapi itu karena cerita panjang pendek, ketika Anda mencetak sejumlah besar 418 00:19:03,710 --> 00:19:06,840 hal untuk layar, yang sendiri memperlambat segalanya. 419 00:19:06,840 --> 00:19:11,260 Apa yang benar-benar mengambil CPU dalam alat adalah 3,59 detik, di 420 00:19:11,260 --> 00:19:15,260 Berbeda dengan C, yang mengambil 0,44 detik yang paling baru. 421 00:19:15,260 --> 00:19:17,620 Itu benar-benar sebuah urutan besarnya berbeda. 422 00:19:17,620 --> 00:19:20,280 >> Jadi di mana harga itu berasal? 423 00:19:20,280 --> 00:19:21,790 Mengapa begitu jauh lebih lambat? 424 00:19:21,790 --> 00:19:24,220 Mengapa PHP melakukan begitu buruk? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> AUDIENCE: Anda tidak benar-benar menggunakan tabel hash. 427 00:19:26,550 --> 00:19:27,710 >> DAVID Malan: Aku tidak benar-benar menggunakan tabel hash. 428 00:19:27,710 --> 00:19:28,760 Jadi aku agak lakukan. 429 00:19:28,760 --> 00:19:29,870 Jadi array asosiatif. 430 00:19:29,870 --> 00:19:33,650 Kemungkinan besar jika orang-orang di PHP benar-benar pintar, mereka digunakan di bawah 431 00:19:33,650 --> 00:19:39,520 kap meja yang sebenarnya hash diimplementasikan dalam sesuatu seperti C atau C + +. 432 00:19:39,520 --> 00:19:41,290 Tapi. 433 00:19:41,290 --> 00:19:42,760 Ya. 434 00:19:42,760 --> 00:19:44,010 >> AUDIENCE: [Tak terdengar]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID Malan: Ya. 437 00:19:47,080 --> 00:19:50,780 Jadi masing-masing fungsi yang saya tulis sekarang - sebenarnya, Anda dapat mengatakan bahwa sekali lagi a 438 00:19:50,780 --> 00:19:51,480 sedikit lebih keras? 439 00:19:51,480 --> 00:19:54,509 >> AUDIENCE: Setiap fungsi yang Anda termasuk memiliki lebih banyak penuh 440 00:19:54,509 --> 00:19:56,610 Kapasitas dari - 441 00:19:56,610 --> 00:19:57,550 >> DAVID Malan: Jadi itu sangat benar. 442 00:19:57,550 --> 00:20:01,490 Ada lebih banyak overhead bahwa kita tidak benar-benar melihat dengan berfokus hanya pada 443 00:20:01,490 --> 00:20:03,730 dictionary.php, yang saya baru saja menulis. 444 00:20:03,730 --> 00:20:08,020 Sebaliknya, ada seluruh interpreter terjadi di latar belakang. 445 00:20:08,020 --> 00:20:12,040 Memang, ketika saya menjalankan program ini, tidak berjalan nol disusun dan orang-orang 446 00:20:12,040 --> 00:20:14,290 dirancang untuk CPU Intel saya. 447 00:20:14,290 --> 00:20:19,270 Sebaliknya, itu adalah menjalankan baris demi baris Kode PHP yang terlihat persis 448 00:20:19,270 --> 00:20:20,350 seperti kita mengetik. 449 00:20:20,350 --> 00:20:22,475 Jadi setiap kali Anda menggunakan bahasa ditafsirkan, Anda 450 00:20:22,475 --> 00:20:23,850 sebenarnya membayar harga ini. 451 00:20:23,850 --> 00:20:27,010 Ini akan memakan waktu untuk membaca atas file Anda ke bawah, kiri ke 452 00:20:27,010 --> 00:20:30,740 kanan, dan kemudian mengeksekusi setiap baris lagi dan lagi. 453 00:20:30,740 --> 00:20:34,250 >> Sekarang dalam kenyataannya, khususnya di web, Anda benar-benar dapat mempercepat proses ini 454 00:20:34,250 --> 00:20:38,660 dengan caching hasil Kode PHP ditafsirkan. 455 00:20:38,660 --> 00:20:41,640 Dan itu masuk akal di web, karena jika Anda belum satu pengguna seperti 456 00:20:41,640 --> 00:20:46,300 saya di sini, tapi 1.000 atau 10.000 pengguna, maka mungkin pertama kali file tersebut 457 00:20:46,300 --> 00:20:49,050 diakses itu lambat, tetapi setelah itu itu jauh lebih cepat. 458 00:20:49,050 --> 00:20:51,000 >> Tapi ini juga, sekali lagi, adalah trade off. 459 00:20:51,000 --> 00:20:53,870 Dan untuk sesuatu seperti data penelitian mengatur, atau bahkan sesuatu yang besar seperti 460 00:20:53,870 --> 00:20:58,330 ini, pengguna akhirnya akan mulai merasakan perlambatan itu. 461 00:20:58,330 --> 00:21:02,670 >> Jadi singkatnya, ditafsirkan bahasa yang sangat banyak dalam mode, yang sangat populer, dan 462 00:21:02,670 --> 00:21:06,710 terus terang mungkin bahasa Anda harus meraih ketika memecahkan masalah 463 00:21:06,710 --> 00:21:08,200 setelah CS50. 464 00:21:08,200 --> 00:21:12,720 Tapi menyadari betapa Anda benar-benar mengambil untuk diberikan di bawah tenda 465 00:21:12,720 --> 00:21:15,910 benar-benar mereka beberapa minggu terakhir di hash tabel, dan pohon-pohon, dan mencoba, 466 00:21:15,910 --> 00:21:20,770 yang digunakan pada akhirnya untuk benar-benar melaksanakan hal-hal seperti braket terbuka, 467 00:21:20,770 --> 00:21:24,200 braket persegi, yang sekarang kita bisa syukur mengambil untuk diberikan. 468 00:21:24,200 --> 00:21:26,360 >> Jadi mari kita lihat sekarang dalam konteks web ini. 469 00:21:26,360 --> 00:21:29,890 Dan saya sebutkan terakhir kali bahwa ada sekelompok superglobals di PHP yang 470 00:21:29,890 --> 00:21:32,490 tidak benar-benar relevan pada baris perintah. 471 00:21:32,490 --> 00:21:36,210 Mereka lebih relevan dalam konteks menggunakan PHP dalam konteks web. 472 00:21:36,210 --> 00:21:41,220 Jadi menjalankan PHP pada server web dalam rangka untuk menghasilkan hal-hal seperti HTML. 473 00:21:41,220 --> 00:21:44,540 >> Dan kami melirik $ _GET dan $ _POST, dan di situlah otomatis pengguna 474 00:21:44,540 --> 00:21:49,100 masukan berakhir hanya jika Anda mengirimkan membentuk ke file berakhiran. php di web 475 00:21:49,100 --> 00:21:50,460 server seperti alat. 476 00:21:50,460 --> 00:21:53,310 Tapi mari kita lihat secara singkat $ _COOKIE Dan $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> Dalam istilah awam, apa itu cookie sebagai Anda memahaminya dalam konteks 478 00:21:56,670 --> 00:21:58,220 menggunakan web? 479 00:21:58,220 --> 00:21:59,450 >> AUDIENCE: Berkas pada komputer. 480 00:21:59,450 --> 00:21:59,920 >> DAVID Malan: Ya. 481 00:21:59,920 --> 00:22:03,500 Ini adalah file di komputer pengguna ditanam oleh situs web apapun 482 00:22:03,500 --> 00:22:04,410 Anda kebetulan mengunjungi. 483 00:22:04,410 --> 00:22:07,334 Jadi, ketika Anda pergi ke Facebook, ketika Anda pergi untuk bankofamerica.com, ketika Anda pergi 484 00:22:07,334 --> 00:22:10,330 ke google.com, ketika Anda pergi ke hampir semua situs di dunia hari ini, 485 00:22:10,330 --> 00:22:14,850 termasuk cs50.net, cookie yang ditanam pada komputer Anda, yang 486 00:22:14,850 --> 00:22:19,800 baik nilai yang tersimpan dalam RAM dalam Anda komputer dalam memori browser Anda, atau 487 00:22:19,800 --> 00:22:22,800 kadang-kadang memang file yang tersimpan pada hard drive Anda. 488 00:22:22,800 --> 00:22:26,960 >> Dan apa yang biasanya disimpan dalam file yang bukan nama pengguna Anda, bukan Anda 489 00:22:26,960 --> 00:22:31,060 password, biasanya bukan sesuatu sensitif kecuali website ini tidak begitu 490 00:22:31,060 --> 00:22:35,040 baik dengan keamanan mereka, melainkan itu adalah sebuah identifikasi unik besar di antara 491 00:22:35,040 --> 00:22:35,680 hal-hal lain. 492 00:22:35,680 --> 00:22:38,920 Ini adalah nomor acak yang besar ditanam pada Anda komputer tetapi Anda dapat anggap sebagai 493 00:22:38,920 --> 00:22:42,740 semacam cap tangan virtual seperti dari klub atau taman hiburan yang 494 00:22:42,740 --> 00:22:47,160 memungkinkan staf, pemilik yang layanan, untuk mengingat siapa Anda. 495 00:22:47,160 --> 00:22:51,030 Jadi jika nomor acak yang besar seperti 12345678, walaupun itu jelas 496 00:22:51,030 --> 00:22:54,180 tidak terlalu acak, memikirkan bahwa sebagai cap tangan bahwa ketika Anda mengunjungi 497 00:22:54,180 --> 00:22:57,930 facebook.com untuk pertama kalinya, mereka cap nomor yang di tangan Anda. 498 00:22:57,930 --> 00:23:01,510 Dan kemudian karena Anda berbicara HTTP, Anda menjadi browser, dan karena Facebook 499 00:23:01,510 --> 00:23:06,440 jelas berbicara sama seperti web server, HTTP protocol mengatakan bahwa 500 00:23:06,440 --> 00:23:09,930 kapan saja Anda kemudian mengunjungi facebook.com, apakah itu kedua 501 00:23:09,930 --> 00:23:13,560 kemudian, satu jam kemudian, bahkan pada hari berikutnya, asalkan Anda tidak secara eksplisit 502 00:23:13,560 --> 00:23:17,050 log out, yang secara efektif seperti mencuci tangan Anda. 503 00:23:17,050 --> 00:23:20,280 HTTP mengatakan Anda harus hadir Anda cap tangan setiap kali Anda 504 00:23:20,280 --> 00:23:22,020 kembali ke situs web tersebut. 505 00:23:22,020 --> 00:23:24,390 >> Apa Facebook kemudian tidak adalah mereka melihat bahwa cap tangan dan 506 00:23:24,390 --> 00:23:26,850 mereka mengatakan, oh, 123456789. 507 00:23:26,850 --> 00:23:30,260 Saya tidak tahu pada pandangan pertama bahwa ini adalah David Malan di Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, tetapi mereka dapat memeriksa mereka database dan berkata, oh, orang 509 00:23:34,690 --> 00:23:39,930 pada komputer yang kami menanam 123456789 adalah David Malan dari Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Mari kita tunjukkan bahwa pengguna maka profilnya Halaman atau News Feed-nya. 512 00:23:46,000 --> 00:23:49,660 >> Tapi ada masalah di sini jika ini adalah bagaimana web memang bekerja. 513 00:23:49,660 --> 00:23:51,390 Mari kita lihat contoh cepat. 514 00:23:51,390 --> 00:23:55,190 Mari kita benar-benar pergi untuk mengatakan facebook.com. 515 00:23:55,190 --> 00:23:58,130 Tapi sebelum kita bisa pergi ke sana, biarkan aku pergi ke depan dan membuka Chrome 516 00:23:58,130 --> 00:23:59,790 Inspektur di sini. 517 00:23:59,790 --> 00:24:01,140 Biarkan aku melihat tab jaringan. 518 00:24:01,140 --> 00:24:06,020 Dan sekarang mari kita pergi ke depan dan ketik di https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 Dan aku melakukan hal itu sehingga kita tidak melihat semua orang pengalihan dan limbah 520 00:24:09,410 --> 00:24:10,660 waktu melihat melalui mereka. 521 00:24:10,660 --> 00:24:12,690 Mari saya tekan enter. 522 00:24:12,690 --> 00:24:13,130 >> Baik. 523 00:24:13,130 --> 00:24:14,580 Kita melihat sejumlah besar permintaan. 524 00:24:14,580 --> 00:24:15,640 Ada datang Facebook. 525 00:24:15,640 --> 00:24:16,930 Ada sejumlah besar file. 526 00:24:16,930 --> 00:24:19,290 Dan di sini, per menyebutkan saya latency terakhir kali, itu 527 00:24:19,290 --> 00:24:21,240 banyak permintaan HTTP. 528 00:24:21,240 --> 00:24:23,700 Tapi yang pertama mungkin yang paling menarik. 529 00:24:23,700 --> 00:24:26,420 >> Jadi mari kita gulir ke bawah sini, dan Aku akan memperbesar dalam detik. 530 00:24:26,420 --> 00:24:29,090 Ini akan menjadi semacam berantakan, tapi mari kita lihat. 531 00:24:29,090 --> 00:24:31,660 Facebook mengirim kami Seluruh banyak hal. 532 00:24:31,660 --> 00:24:33,490 >> Tapi tunggu, menarik. 533 00:24:33,490 --> 00:24:37,880 Mereka menanam tidak satu, tapi empat perangko tangan ke tangan saya di sini. 534 00:24:37,880 --> 00:24:40,400 Set-cookie, Set-cookie, set-cookie, set-cookie. 535 00:24:40,400 --> 00:24:44,030 Dan ada beberapa fitur di sini. 536 00:24:44,030 --> 00:24:46,170 Semua dari mereka menyebutkan beberapa jenis kedaluwarsa. 537 00:24:46,170 --> 00:24:50,090 Dan sepertinya Facebook berharap mengingat saya sampai 2015. 538 00:24:50,090 --> 00:24:53,670 Jadi itu mungkin waktu dimana Aku harus log out atau mereka hanya akan 539 00:24:53,670 --> 00:24:55,710 otomatis menganggap aku tidak akan kembali. 540 00:24:55,710 --> 00:24:57,840 Jadi itu benar-benar layak jumlah waktu. 541 00:24:57,840 --> 00:24:59,170 >> Dan ada beberapa lainnya hal yang terjadi di sini. 542 00:24:59,170 --> 00:25:03,036 Cookie ini tampaknya paksa dihapus dengan mengatakan itu berakhir pada tahun 1970 543 00:25:03,036 --> 00:25:04,460 sebelum cookies ada. 544 00:25:04,460 --> 00:25:06,510 Sehingga browser hanya akan untuk menganggap OK, itu seperti 545 00:25:06,510 --> 00:25:07,910 mencuci tangan cap. 546 00:25:07,910 --> 00:25:11,240 >> Tapi sekarang ketika browser saya membuat permintaan berikutnya - 547 00:25:11,240 --> 00:25:14,340 biarkan aku pergi ke depan dan melakukan hal ini lagi dan reload. 548 00:25:14,340 --> 00:25:18,170 Sekarang mari saya gulir kembali ke atas permintaan dan turun 549 00:25:18,170 --> 00:25:20,760 sini, header permintaan. 550 00:25:20,760 --> 00:25:21,390 Perhatikan ini. 551 00:25:21,390 --> 00:25:25,280 Jadi sekarang aku tidak di bawah header respon, tetapi pemberitahuan itu mengatakan header permintaan. 552 00:25:25,280 --> 00:25:29,220 Dan melihat bahwa browser saya sebagai bagian dari permintaannya setelah ulang memukul memiliki 553 00:25:29,220 --> 00:25:32,780 dikirim setidaknya berikut informasi. 554 00:25:32,780 --> 00:25:34,670 Tidak set-cookie, tapi kue. 555 00:25:34,670 --> 00:25:38,750 Jadi ini adalah garis, header HTTP sehingga untuk berbicara, di mana browser saya adalah semacam 556 00:25:38,750 --> 00:25:43,340 dari tanpa saya sadari menyajikan tanganku untuk pemeriksaan Facebook. 557 00:25:43,340 --> 00:25:46,020 >> Jadi cookie ini dapat digunakan maka untuk apa? 558 00:25:46,020 --> 00:25:49,420 Untuk mengingat siapa Anda, atau ingat bagaimana banyak kali Anda sudah ada, atau 559 00:25:49,420 --> 00:25:50,280 benar-benar sesuatu. 560 00:25:50,280 --> 00:25:52,742 >> Jadi di sini adalah counter.php. 561 00:25:52,742 --> 00:25:53,780 Dan biarkan aku memperbesar font. 562 00:25:53,780 --> 00:25:58,380 Dan setiap kali saya reload halaman ini, perhatikan itu mengingat berapa kali 563 00:25:58,380 --> 00:25:59,250 Aku pernah ke sana. 564 00:25:59,250 --> 00:26:00,570 Nah, itu tidak semua yang mengesankan. 565 00:26:00,570 --> 00:26:03,140 Mari kita hanya menutup tab tersebut, dan sekarang mari kita kembali ke 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Oh, itu menarik. 568 00:26:08,970 --> 00:26:10,960 Masih ingat, bahkan meskipun aku menutup tab. 569 00:26:10,960 --> 00:26:14,010 Dan terus terang, jika saya menutup browser, jika diterapkan dengan cara yang benar, saya 570 00:26:14,010 --> 00:26:18,950 masih bisa ingat bahwa pengguna ini siapa dia atau dia adalah pertama kalinya, dan 571 00:26:18,950 --> 00:26:22,840 hanya sekali saya masuk ke menu Chrome, yang di sini di sini, dan pergi ke 572 00:26:22,840 --> 00:26:25,990 Sejarah, dan klik Clear Browsing Data, karena beberapa dari Anda mungkin memiliki dalam 573 00:26:25,990 --> 00:26:33,050 masa lalu, hanya kemudian akan cookie sebenarnya bisa dihapus selama web 574 00:26:33,050 --> 00:26:33,970 pembangunan. 575 00:26:33,970 --> 00:26:35,340 >> Jadi, jika kita pergi - 576 00:26:35,340 --> 00:26:37,080 mari kita menutup gedit sini. 577 00:26:37,080 --> 00:26:38,910 Dan jika kita pergi sekarang ke berkas ini. 578 00:26:38,910 --> 00:26:44,210 Biarkan aku pergi ke kami vhosts / localhost / publik, dan biarkan aku melakukan 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Perhatikan bahwa ini adalah cukup program sederhana. 581 00:26:48,350 --> 00:26:50,250 Ini adalah situs yang cukup sederhana. 582 00:26:50,250 --> 00:26:51,770 >> Jadi atas file hanya komentar. 583 00:26:51,770 --> 00:26:54,930 Tapi di sini adalah garis baru yang Anda mungkin telah melihat sudah p-set tujuh, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Ini adalah baris kode PHP yang dasarnya memberitahu server web, membuat 586 00:27:00,380 --> 00:27:03,400 Pastikan untuk cap tangan dan membuat Pastikan untuk memeriksa prangko tangan. 587 00:27:03,400 --> 00:27:06,810 Itu semua baris yang tidak, dan melakukan semua proses yang bagi kita. 588 00:27:06,810 --> 00:27:09,510 Kemudian perhatikan saya hanya punya dua cabang di sini. 589 00:27:09,510 --> 00:27:14,150 Jika loket masuk utama dari variabel global khusus yang disebut 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Diatur - dengan kata lain, jika ada beberapa nilai di sana - 591 00:27:18,010 --> 00:27:22,440 mari kita mendapatkannya dan menyimpannya di lokal variabel yang disebut $ kontra. 592 00:27:22,440 --> 00:27:27,000 Lain, mari kita menetapkan $ kontra nilai default 0. 593 00:27:27,000 --> 00:27:30,320 >> Sekarang inilah salah satu aspek dari PHP itu baik berkat dan kutukan. 594 00:27:30,320 --> 00:27:32,080 PHP adalah sedikit ceroboh. 595 00:27:32,080 --> 00:27:35,160 Jadi sedangkan di C, apa yang akan lingkup kontra telah 596 00:27:35,160 --> 00:27:36,725 baik di sini atau di sini? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Ini akan telah terbatas bagi kurung kurawal. 599 00:27:41,690 --> 00:27:42,090 Coba tebak? 600 00:27:42,090 --> 00:27:46,920 Dalam PHP, itu ada bahkan di luar dari mereka kurung kurawal, di sini, dan di sini, 601 00:27:46,920 --> 00:27:49,120 dan di sini, dan di sini, dan bahkan di bawah. 602 00:27:49,120 --> 00:27:52,400 Jadi saya mengatakan ini adalah berkah dalam arti bahwa Anda tidak harus berpikir sebagai 603 00:27:52,400 --> 00:27:54,070 keras seperti yang kita lakukan minggu lalu. 604 00:27:54,070 --> 00:27:56,880 Tapi itu juga sedikit kutukan dalam tidak peduli di mana Anda menggunakan variabel dalam 605 00:27:56,880 --> 00:28:00,020 PHP, setidaknya dalam program seperti ini, itu dapat diakses secara global untuk 606 00:28:00,020 --> 00:28:01,170 baik atau buruk. 607 00:28:01,170 --> 00:28:06,130 Jadi, Anda harus diingat bahwa sekarang variabel Anda mungkin tidak terdefinisi. 608 00:28:06,130 --> 00:28:07,640 Anda mungkin telah menetapkan mereka di tempat lain. 609 00:28:07,640 --> 00:28:09,460 >> Tapi apa yang akan saya lakukan pada akhirnya? 610 00:28:09,460 --> 00:28:13,160 Aku akan menyimpan itu dalam dunia variabel sebagai nilai 611 00:28:13,160 --> 00:28:17,060 kunci counter hasil melakukan kontra ditambah 1. 612 00:28:17,060 --> 00:28:18,910 Jadi ini hanya aritmetik yang melakukan 613 00:28:18,910 --> 00:28:20,590 incrementation counter itu. 614 00:28:20,590 --> 00:28:24,850 Dan fakta bahwa aku menyimpan yang Nilai kembali di sini adalah sarana untuk 615 00:28:24,850 --> 00:28:29,970 dasarnya memperbarui database untuk ingat bahwa pengguna telah 123456789 616 00:28:29,970 --> 00:28:31,010 di sini dua kali. 617 00:28:31,010 --> 00:28:33,780 Dan ketika saya melakukannya lagi setiap kali saya reload halaman, itu akan memeriksa 618 00:28:33,780 --> 00:28:36,710 tanganku cap dan berkata, oh, pengguna 123456789 kini 619 00:28:36,710 --> 00:28:38,410 di sini tiga kali. 620 00:28:38,410 --> 00:28:43,390 >> Dan jadi apa bahasa PHP dan serupa lakukan bagi kita adalah mereka mencari 621 00:28:43,390 --> 00:28:47,720 tahu bagaimana dan di mana dan untuk berapa lama untuk menyimpan nilai dalam khusus ini 622 00:28:47,720 --> 00:28:48,830 superglobal. 623 00:28:48,830 --> 00:28:52,750 Dan ini superglobal waktu berikutnya saya kunjungi halaman adalah semacam ajaib 624 00:28:52,750 --> 00:28:57,440 pra-penduduk, diisi dengan nilai-nilai yang berada di sana terakhir kali Anda mengunjunginya, 625 00:28:57,440 --> 00:29:02,310 apakah yang kedua yang lalu, seminggu lalu, atau pada 2013 dan sekarang kita berbicara 626 00:29:02,310 --> 00:29:03,790 sekitar 2015. 627 00:29:03,790 --> 00:29:07,600 PHP dan web server mengurus semua itu untuk Anda. 628 00:29:07,600 --> 00:29:08,850 >> AUDIENCE: [Tak terdengar]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID Malan: Variabel dalam PHP dasarnya selalu dunia kecuali Anda 631 00:29:15,760 --> 00:29:18,400 menyatakan mereka dalam fungsi, dan kemudian mereka lokal untuk 632 00:29:18,400 --> 00:29:19,420 fungsi saja. 633 00:29:19,420 --> 00:29:22,300 Tetapi karena saya sudah tidak menulis apapun fungsi, mereka sekarang secara efektif 634 00:29:22,300 --> 00:29:25,090 global sepanjang seluruh file saya di sini. 635 00:29:25,090 --> 00:29:26,040 >> AUDIENCE: Apakah ada cara untuk membuat mereka lokal? 636 00:29:26,040 --> 00:29:28,470 >> DAVID Malan: Apakah ada cara untuk membuat mereka lokal? 637 00:29:28,470 --> 00:29:30,680 Hanya dengan membungkus mereka ke fungsi. 638 00:29:30,680 --> 00:29:32,790 Yang dalam versi terbaru PHP, Anda dapat melakukan ini dengan 639 00:29:32,790 --> 00:29:34,130 fungsi anonim. 640 00:29:34,130 --> 00:29:35,930 Tapi lebih pada bahwa dalam konteks JavaScript. 641 00:29:35,930 --> 00:29:37,260 Tapi Jawaban singkatnya adalah tidak. 642 00:29:37,260 --> 00:29:40,888 Jawaban lagi adalah ya. 643 00:29:40,888 --> 00:29:42,380 Nice. 644 00:29:42,380 --> 00:29:43,380 Baik pertanyaan kuis. 645 00:29:43,380 --> 00:29:43,930 Baik. 646 00:29:43,930 --> 00:29:47,760 >> Jadi terakhir, halaman itu sendiri adalah sebenarnya cukup sederhana. 647 00:29:47,760 --> 00:29:51,470 Perhatikan bahwa setelah saya keluar dari mode PHP, mengingat bahwa semua hal ini turun 648 00:29:51,470 --> 00:29:53,700 di bawah ini hanya akan mendapatkan meludah keluar mentah ke browser. 649 00:29:53,700 --> 00:29:57,050 Yang baik-baik saja, karena saya ingin mengirim pengguna beberapa HTML, tetapi saya ingin 650 00:29:57,050 --> 00:29:59,140 untuk secara dinamis memperbarui HTML. 651 00:29:59,140 --> 00:30:03,930 Dan salah satu cara saya bisa melakukan ini adalah untuk memilah yang sangat cepat jatuh kembali ke PHP 652 00:30:03,930 --> 00:30:07,730 modus, menggunakan open braket tanda tanya tanda sama, dan kemudian output nilai 653 00:30:07,730 --> 00:30:08,650 counter. 654 00:30:08,650 --> 00:30:12,360 >> Atau jika ini tampak agak samar, ini tanda sama sebenarnya hanya beberapa 655 00:30:12,360 --> 00:30:16,190 sintaksis gula untuk ini printf ($ counter). 656 00:30:16,190 --> 00:30:19,160 Tapi terus terang, itu hanya sedikit jelek dan sedikit mengganggu untuk mengetik. 657 00:30:19,160 --> 00:30:23,660 Jadi PHP sangat baik menawarkan fitur ini di mana Anda hanya bisa mengatakan lebih 658 00:30:23,660 --> 00:30:25,450 singkat dengan cara yang sama. 659 00:30:25,450 --> 00:30:26,940 >> Jadi apa yang terjadi di bawah kap? 660 00:30:26,940 --> 00:30:31,210 Mari kita cepat-cepat melihat jaringan tab di sini untuk counter.php. 661 00:30:31,210 --> 00:30:35,090 Dan biarkan aku pergi ke depan dan pertama mari kita hapus cookie. 662 00:30:35,090 --> 00:30:38,670 Mari kita jelas data penjelajahan sejak awal waktu. 663 00:30:38,670 --> 00:30:39,680 Sekarang mari kita kembali ke sini. 664 00:30:39,680 --> 00:30:41,340 Sekarang mari kita kembali halaman tersebut. 665 00:30:41,340 --> 00:30:42,170 Dan aku kembali nol. 666 00:30:42,170 --> 00:30:44,810 Karena cap tangan saya telah dicuci, Sekarang saya mendapatkan cookie yang baru. 667 00:30:44,810 --> 00:30:48,780 >> Memang jika saya melihat tab jaringan dan melihat header respon, perhatikan 668 00:30:48,780 --> 00:30:51,960 bahwa alat sedang mengirim saya cookie yang namanya agak 669 00:30:51,960 --> 00:30:55,820 sewenang-wenang, tetapi jenis cukup, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 Dan itu mengirimkan saya ini benar-benar nomor acak yang besar. 671 00:30:58,440 --> 00:30:59,440 Ini tidak cukup nomor. 672 00:30:59,440 --> 00:31:00,390 Ini tidak cukup heksadesimal. 673 00:31:00,390 --> 00:31:03,600 Ini semacam rangkaian alfanumerik tapi mungkin itu acak. 674 00:31:03,600 --> 00:31:06,830 Dan itu adalah cap tangan sehingga untuk berbicara bahwa saya maksudkan. 675 00:31:06,830 --> 00:31:11,960 >> Sementara jika saya klik kembali dan kemudian melihat baris ini kedua untuk kedua saya 676 00:31:11,960 --> 00:31:17,600 permintaan, perhatikan sekarang bahwa permintaan saya header termasuk PHPSESSID sama ini, 677 00:31:17,600 --> 00:31:19,390 tidak set-cookie, tapi hanya kue. 678 00:31:19,390 --> 00:31:22,950 Dan itulah presentasi browser saya cap tangan saya. 679 00:31:22,950 --> 00:31:28,820 >> Jadi sekarang sebagai penggoda, dan kita akan berbicara lebih tentang hal ini dalam satu minggu atau lebih, tapi 680 00:31:28,820 --> 00:31:31,590 dengan cara apa hal ini membuat Anda rentan, akun Facebook Anda 681 00:31:31,590 --> 00:31:34,137 rentan, dan lainnya seperti account rentan? 682 00:31:34,137 --> 00:31:35,510 >> AUDIENCE: Jika seseorang memiliki cookie Anda. 683 00:31:35,510 --> 00:31:36,750 >> DAVID Malan: Ya, jika seseorang memiliki cookie Anda. 684 00:31:36,750 --> 00:31:39,920 Maksudku benar-benar, seperti beberapa dari Anda mungkin telah mencoba pada seperti sebuah klub atau 685 00:31:39,920 --> 00:31:44,030 taman hiburan, jika Anda mencoba sesuatu seperti ini untuk menyalin cap, meskipun 686 00:31:44,030 --> 00:31:47,560 mundur ke tangan orang lain, dan kemudian ia menyajikan sebagai 687 00:31:47,560 --> 00:31:53,250 mereka sendiri, jika itu benar-benar tidak terlihat identik, 123456789, maka web 688 00:31:53,250 --> 00:31:57,980 server tampaknya hanya akan percaya bahwa pengguna yang Anda. 689 00:31:57,980 --> 00:32:01,450 >> Dan ini memang mendasar ancaman setiap kali Anda menggunakan cookie 690 00:32:01,450 --> 00:32:05,420 karena jika seseorang hanya parodi sehingga untuk berbicara cookie, angka keluar apa 691 00:32:05,420 --> 00:32:08,660 adalah, baik dengan benar-benar menyalin dengan melihat komputer Anda 692 00:32:08,660 --> 00:32:09,890 dan menjadi seperti, OK. 693 00:32:09,890 --> 00:32:14,520 Cookie David adalah JJ3JIK dan sebagainya, dan kemudian mereka cukup pintar untuk mengetahui 694 00:32:14,520 --> 00:32:18,080 cara untuk menyortir secara manual mengirim bahwa cookie dari browser atau dari 695 00:32:18,080 --> 00:32:22,350 Program yang mereka tulis, mereka bisa benar-benar login ke situs seperti Anda. 696 00:32:22,350 --> 00:32:28,560 Hal ini tidak sulit untuk berpura-pura menjadi orang lain kecuali kita kembali p-set 697 00:32:28,560 --> 00:32:30,790 dua, yang memperkenalkan apa? 698 00:32:30,790 --> 00:32:32,065 >> AUDIENCE: Kriptografi. 699 00:32:32,065 --> 00:32:33,860 >> DAVID Malan: Sedikit sedikit kriptografi. 700 00:32:33,860 --> 00:32:36,550 Kriptografi sederhana, setidaknya dalam edisi standar, tapi kripto 701 00:32:36,550 --> 00:32:36,870 tetap. 702 00:32:36,870 --> 00:32:37,410 kurang. 703 00:32:37,410 --> 00:32:41,440 Jadi ternyata jika Anda mengenkripsi semua header ini menggunakan sesuatu yang Anda 704 00:32:41,440 --> 00:32:48,770 sekarang mungkin tahu lebih akrab sebagai SSL, secure socket layer, atau URL https://, 705 00:32:48,770 --> 00:32:51,890 maka semua hal ini kita sudah melirik sebenarnya dienkripsi, 706 00:32:51,890 --> 00:32:54,800 yang berarti bahwa itu seperti Anda tidak dapat membaca cap tangan. 707 00:32:54,800 --> 00:32:59,350 Hanya facebook.com bisa, atau google.com, atau dalam hal ini, alat bisa 708 00:32:59,350 --> 00:33:00,550 membaca bahwa cap tangan. 709 00:33:00,550 --> 00:33:04,020 >> Tragisnya meskipun, dan lagi, ini adalah semua terlalu sesuai dengan hal-hal NSA 710 00:33:04,020 --> 00:33:06,410 akhir-akhir ini, bahkan SSL yang pecah. 711 00:33:06,410 --> 00:33:09,850 Dan itu sebenarnya tidak sulit bahkan memecahkan enkripsi tersebut. 712 00:33:09,850 --> 00:33:12,040 Tidak begitu banyak yang dirusak oleh enkripsi, tetapi dengan menipu 713 00:33:12,040 --> 00:33:15,720 browser ke dalam mendekripsi data sebelum waktunya. 714 00:33:15,720 --> 00:33:17,880 Tapi sekali lagi, kami akan menggoda Anda dengan lama. 715 00:33:17,880 --> 00:33:21,242 Untuk saat ini, hanya takut. 716 00:33:21,242 --> 00:33:23,070 Ini tragis semacam benar. 717 00:33:23,070 --> 00:33:23,760 >> Baik. 718 00:33:23,760 --> 00:33:27,910 Jadi, mana sekarang ini meninggalkan kita? 719 00:33:27,910 --> 00:33:29,010 Nah, mari kita lakukan ini. 720 00:33:29,010 --> 00:33:31,790 Mari kita pergi ke depan dan mengambil cepat teaser sebelum kita istirahat. 721 00:33:31,790 --> 00:33:33,790 Dan saya pikir kita akan berlama-lama sedikit lebih lama hari ini, tapi kita akan menyelam ke 722 00:33:33,790 --> 00:33:37,850 sesuatu yang baru dan seksi, yang akan merangsang selera Anda untuk lebih. 723 00:33:37,850 --> 00:33:38,950 Jadi itulah penggoda. 724 00:33:38,950 --> 00:33:41,520 >> Jadi SQL, kita mulai berbicara tentang pernah begitu singkat terakhir kali. 725 00:33:41,520 --> 00:33:44,670 Anda benar-benar akan mendapatkan tangan Anda kotor dengan beberapa di p-set tujuh. 726 00:33:44,670 --> 00:33:46,480 Dan dalam istilah awam, apa SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 lakukan untuk Anda? 729 00:33:49,850 --> 00:33:50,310 Apa itu? 730 00:33:50,310 --> 00:33:51,546 Ya. 731 00:33:51,546 --> 00:33:53,240 >> AUDIENCE: Mari kita mengakses data Anda. 732 00:33:53,240 --> 00:33:53,360 >> DAVID Malan: Ya. 733 00:33:53,360 --> 00:33:55,120 Ini mari kita mengakses data Anda dalam database. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 Dan ini pada dasarnya adalah bahasa pemrograman. 736 00:33:59,890 --> 00:34:03,400 Ada fitur itu yang kita bahkan tidak akan menggunakan di kelas. 737 00:34:03,400 --> 00:34:04,710 Tapi Anda dapat secara efektif mendefinisikan fungsi. 738 00:34:04,710 --> 00:34:06,870 Mereka disebut disimpan prosedur di SQL. 739 00:34:06,870 --> 00:34:09,860 Tapi kita akan tetap cukup sederhana dan hanya menggunakannya untuk beberapa operasi dasar 740 00:34:09,860 --> 00:34:14,320 seperti memilih data, memasukkan data, pemutakhiran data, dan menghapus data. 741 00:34:14,320 --> 00:34:17,400 >> Dan Anda benar-benar bisa memikirkan database, seperti database SQL, hanya sebagai 742 00:34:17,400 --> 00:34:18,800 menjadi Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Karena SQL mengacu pada relasional database, dimana 744 00:34:21,989 --> 00:34:23,480 hubungan hanya berarti tabel. 745 00:34:23,480 --> 00:34:24,739 Baris dan kolom. 746 00:34:24,739 --> 00:34:27,929 Jadi apa pun yang Anda dapat dimasukkan ke dalam spreadsheet seperti ini atau Google Docs, 747 00:34:27,929 --> 00:34:32,460 Anda bisa dimasukkan ke dalam database SQL dengan menyatakan meja. 748 00:34:32,460 --> 00:34:34,800 >> Sekarang, bagaimana Anda benar-benar mengakses informasi itu? 749 00:34:34,800 --> 00:34:38,239 Nah, dengan perintah atau pertanyaan seperti ini. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, UPDATE, dan DELETE. 751 00:34:40,199 --> 00:34:44,489 Dan untuk sebagian besar, mereka adalah empat hanya bahan yang Anda harus 752 00:34:44,489 --> 00:34:47,370 melakukan sesuatu yang sangat kuat dalam permasalahan yang tujuh. 753 00:34:47,370 --> 00:34:49,940 >> Sekarang kembali pada hari, Anda akan benar-benar berinteraksi dengan database di 754 00:34:49,940 --> 00:34:52,730 hitam dan putih jendela terminal prompt berkedip seperti ini. 755 00:34:52,730 --> 00:34:56,370 Dan database kita berjalan pada alat ini disebut MySQL, yang merupakan 756 00:34:56,370 --> 00:34:58,560 mesin database bebas dan open source. 757 00:34:58,560 --> 00:35:02,240 Jika Anda Google dan membaca Wikipedia artikel, Anda akan tahu bahwa nama itu 758 00:35:02,240 --> 00:35:05,060 sedikit transisi untuk beberapa versi Linux. 759 00:35:05,060 --> 00:35:10,460 Maria database sebenarnya garpu sehingga untuk berbicara dari MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Singkat cerita, Oracle membeli MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle adalah perusahaan besar. 762 00:35:13,870 --> 00:35:17,010 Orang-orang telah khawatir bahwa itu akan tidak lagi tetap cukup sebagai open source, 763 00:35:17,010 --> 00:35:20,930 jadi ini hanya salinan MySQL yang masih gratis, masih open source, dan 764 00:35:20,930 --> 00:35:23,550 dipasang di Fedora Linux secara default. 765 00:35:23,550 --> 00:35:26,130 >> Tapi ini adalah jenis rasa sakit di leher untuk berkenalan dengan 766 00:35:26,130 --> 00:35:27,310 Database dengan cara ini. 767 00:35:27,310 --> 00:35:30,560 Jadi kita termasuk dalam alat CS50 alat open source gratis yang disebut 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Hanya kebetulan bahwa itu ditulis dalam PHP. 770 00:35:33,940 --> 00:35:36,450 Tidak ada dasar perlu untuk PHP di sini. 771 00:35:36,450 --> 00:35:40,090 Tapi ini hanyalah sebuah alat berbasis web yang kita download secara gratis, yang dipasang di 772 00:35:40,090 --> 00:35:43,850 alat, yang memungkinkan kita untuk memiliki antarmuka pengguna grafis dengan yang 773 00:35:43,850 --> 00:35:48,610 untuk mengeksplorasi p-set tujuh database dengan yang untuk membuat database baru, 774 00:35:48,610 --> 00:35:51,980 mengatakan untuk proyek akhir Anda sendiri kalau kau lebih seperti, dan akhirnya menciptakan 775 00:35:51,980 --> 00:35:55,900 website dinamis seperti CS50 Keuangan yang memungkinkan Anda untuk query data dan 776 00:35:55,900 --> 00:35:58,140 update data dinamis. 777 00:35:58,140 --> 00:36:01,420 >> Anda tidak akan harus menggunakan hanya file teks sederhana atau CSV. 778 00:36:01,420 --> 00:36:05,950 Anda benar-benar dapat menggunakan database cerdas Program sehingga Anda dapat menjalankan lebih 779 00:36:05,950 --> 00:36:10,240 query canggih daripada hanya membaca melalui segala sesuatu linear. 780 00:36:10,240 --> 00:36:14,150 >> Jadi misalnya, ini adalah apa yang kita berikan Anda keluar dari kotak untuk p-set tujuh. 781 00:36:14,150 --> 00:36:18,280 Ini adalah tabel dengan rupanya setidaknya tiga kolom, salah satunya adalah 782 00:36:18,280 --> 00:36:21,450 nama pengguna, salah satunya adalah hash, dan lainnya yang merupakan ID. 783 00:36:21,450 --> 00:36:26,200 >> Tapi yang menarik, dan hanya untuk menggoda satu pikiran di sini, username 784 00:36:26,200 --> 00:36:29,270 diduga sudah unik, kan? 785 00:36:29,270 --> 00:36:31,190 Maksudku, sebagian besar situs web apapun, jika Anda memiliki username, ada 786 00:36:31,190 --> 00:36:32,370 tidak bisa dua caesars. 787 00:36:32,370 --> 00:36:33,440 Tidak bisa ada dua Malans. 788 00:36:33,440 --> 00:36:34,950 Tidak bisa ada dua jharvards. 789 00:36:34,950 --> 00:36:35,600 Yang unik. 790 00:36:35,600 --> 00:36:38,610 Jika tidak, mereka tidak tahu mana jharvard sebenarnya. 791 00:36:38,610 --> 00:36:42,710 Jadi apa yang mungkin menjadi motivasi untuk juga memiliki kolom ketiga di sebelah kiri 792 00:36:42,710 --> 00:36:46,970 ada yang disebut ID, yang terlihat seperti jumlah yang sama yang unik? 793 00:36:46,970 --> 00:36:51,300 Rasanya sedikit berlebihan bagi saya pada pandangan pertama. 794 00:36:51,300 --> 00:36:54,910 Mengapa itu menjadi menarik untuk memiliki tidak hanya nama pengguna yang unik, 795 00:36:54,910 --> 00:36:56,837 tetapi juga nomor unik? 796 00:36:56,837 --> 00:36:59,460 >> AUDIENCE: Mereka bisa memiliki password yang sama. 797 00:36:59,460 --> 00:37:01,720 >> DAVID Malan: Orang-orang mungkin memiliki password yang sama, yakin. 798 00:37:01,720 --> 00:37:03,900 Itu benar-benar bisa terjadi. 799 00:37:03,900 --> 00:37:08,270 Tapi jika mereka memiliki nama yang unik ini, saya akan berpendapat bahwa itu tidak benar-benar 800 00:37:08,270 --> 00:37:11,630 materi, karena jika mereka mengetik mereka nama pengguna, saya hanya perlu memeriksa mereka 801 00:37:11,630 --> 00:37:15,060 password, hash mereka daripadanya. 802 00:37:15,060 --> 00:37:15,970 Kenapa lagi? 803 00:37:15,970 --> 00:37:17,950 >> AUDIENCE: Cepat pencarian. 804 00:37:17,950 --> 00:37:18,680 >> DAVID Malan: Cepat pencarian. 805 00:37:18,680 --> 00:37:19,548 Kenapa? 806 00:37:19,548 --> 00:37:21,460 >> AUDIENCE: ID hanya satu. 807 00:37:21,460 --> 00:37:24,040 >> DAVID Malan: ID hanya satu karakter, atau lebih tepatnya, itu nomor, 808 00:37:24,040 --> 00:37:26,910 jadi mungkin 32 bit atau sesuatu seperti itu. 809 00:37:26,910 --> 00:37:30,270 Sedangkan username, tampaknya Jason Hirschhorn terserah ada semacam 810 00:37:30,270 --> 00:37:33,900 ridiculously lama, dan itu akan membawa saya lebih banyak waktu ke string 811 00:37:33,900 --> 00:37:40,910 membandingkan H-I-R-S-C-H-H-O-R-N, dan mungkin a / 0 atau sesuatu seperti itu, dalam rangka 812 00:37:40,910 --> 00:37:45,100 untuk mencari Jason, sebagai lawan hanya mengatakan memberikan pengguna nomor dua. 813 00:37:45,100 --> 00:37:46,510 Itu 32 bit. 814 00:37:46,510 --> 00:37:48,550 Ini adalah INT tunggal yang Anda harus membandingkan. 815 00:37:48,550 --> 00:37:52,150 Dan memang, itulah mengapa database cenderung untuk menetapkan ID unik untuk 816 00:37:52,150 --> 00:37:53,710 baris di dalamnya. 817 00:37:53,710 --> 00:37:56,280 >> Sekarang apa tipe data lain yang ada selain INT dan tampaknya 818 00:37:56,280 --> 00:37:57,160 string seperti ini? 819 00:37:57,160 --> 00:37:59,700 Nah, untuk lebih tepat, Database SQL, seperti 820 00:37:59,700 --> 00:38:02,060 MySQL, memiliki bidang CHAR. 821 00:38:02,060 --> 00:38:05,320 Dan CHAR sedikit menyesatkan bukan CHAR tunggal. 822 00:38:05,320 --> 00:38:10,290 Bidang CHAR dalam database MySQL satu atau lebih karakter, tapi itu 823 00:38:10,290 --> 00:38:11,780 jumlah tetap karakter. 824 00:38:11,780 --> 00:38:15,710 >> Jadi misalnya, jika saya pergi ke phpMyAdmin karena Anda mungkin sudah, atau 825 00:38:15,710 --> 00:38:21,340 segera akan masalah memisahkan tujuh, dan aku pergi ke database saya, dan hanya untuk bersenang-senang, 826 00:38:21,340 --> 00:38:25,700 mari kita membuat tabel baru yang disebut menguji dengan hanya dua kolom. 827 00:38:25,700 --> 00:38:27,160 Saya kemudian akan klik Go. 828 00:38:27,160 --> 00:38:30,070 Dan ini akan menjadi cukup akrab, terutama karena Anda bermain-main 829 00:38:30,070 --> 00:38:31,130 di sekitar Anda sendiri. 830 00:38:31,130 --> 00:38:34,140 Di sini saya bisa mengetik ID untuk membuat tabel baru tipe INT. 831 00:38:34,140 --> 00:38:37,770 Tapi di sini saya bisa mengetikkan username untuk menciptakan bahwa tabel sebelumnya. 832 00:38:37,770 --> 00:38:40,700 Dan perhatikan bahwa saya memiliki seluruh banyak jenis untuk memilih dari. 833 00:38:40,700 --> 00:38:43,610 >> Dan ini juga adalah mengapa phpMyAdmin adalah jenis yang baik. 834 00:38:43,610 --> 00:38:46,770 Ini semacam self-mengajar dalam bahwa Anda bisa hanya semacam titik, dan klik, dan 835 00:38:46,770 --> 00:38:50,730 melihat menu dropdown, dan menyimpulkan dari bahwa apa kekuatan SQL memberi Anda. 836 00:38:50,730 --> 00:38:54,090 >> Dan memang, jika saya memilih CHAR, saya kemudian harus menentukan panjang, atau bagaimana 837 00:38:54,090 --> 00:38:55,940 banyak nilai, berapa banyak karakter. 838 00:38:55,940 --> 00:39:00,090 Jadi nilai-nilai yang sangat umum adalah hal-hal seperti 255, tapi itu agak panjang. 839 00:39:00,090 --> 00:39:02,250 Umumnya adalah delapan untuk nama pengguna. 840 00:39:02,250 --> 00:39:03,590 Tapi itu sedikit kecil hari ini. 841 00:39:03,590 --> 00:39:05,430 Jadi ini adalah keputusan desain. 842 00:39:05,430 --> 00:39:08,630 Apakah 8 karakter max, 32, 255, 1.000? 843 00:39:08,630 --> 00:39:09,830 Ini benar-benar terserah pada Anda. 844 00:39:09,830 --> 00:39:12,350 Tapi lapangan CHAR adalah nomor tetap. 845 00:39:12,350 --> 00:39:16,420 Jadi memilih terlalu sedikit dan Anda jenis kacau jika Anda ingin username lagi. 846 00:39:16,420 --> 00:39:19,132 Pilih terlalu banyak dan apa downside? 847 00:39:19,132 --> 00:39:20,820 >> AUDIENCE: [Tak terdengar]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID Malan: Ini boros. 849 00:39:21,620 --> 00:39:24,835 Sama seperti di C, jika Anda memiliki lebih besar sepotong memori dari yang Anda butuhkan, Anda 850 00:39:24,835 --> 00:39:27,190 hanya membuang-buang waktu dan membuang-buang ruang. 851 00:39:27,190 --> 00:39:31,430 Jadi sebagai alternatif, terdapat VARCHAR, yang memecahkan masalah ini dengan 852 00:39:31,430 --> 00:39:36,390 mengobati panjang bukan sebagai panjang tetap, tetapi sebagai panjang maksimum, dan menggunakan 853 00:39:36,390 --> 00:39:40,990 variabel jumlah karakter, yang kemudian cenderung menggunakan hanya sebagai banyak karakter yang Anda 854 00:39:40,990 --> 00:39:42,710 benar-benar membutuhkan. 855 00:39:42,710 --> 00:39:43,670 Kedengarannya sempurna. 856 00:39:43,670 --> 00:39:45,640 >> Mengapa kita tidak menyingkirkan Data CHAR tipe itu? 857 00:39:45,640 --> 00:39:48,500 Apa yang mungkin menjadi sisi buruk menggunakan varchars, yang terdengar 858 00:39:48,500 --> 00:39:51,644 seperti itu adalah kemenangan yang bagus? 859 00:39:51,644 --> 00:39:52,596 Ya? 860 00:39:52,596 --> 00:39:53,846 >> AUDIENCE: [Tak terdengar]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID Malan: OK, baik. 863 00:39:57,790 --> 00:40:01,101 Jadi, jika semua data adalah sama panjang, apa kekhawatiran? 864 00:40:01,101 --> 00:40:05,250 >> AUDIENCE: Karena Anda membuang-buang Data dengan mengatakan kepada mereka semua. 865 00:40:05,250 --> 00:40:09,060 >> DAVID Malan: Jadi, jika semua data Anda panjang yang sama, meskipun, saya berpendapat 866 00:40:09,060 --> 00:40:12,300 yang menentukan panjang maksimum pada VARCHAR tidak berbeda dari 867 00:40:12,300 --> 00:40:16,070 menentukan panjang tetap pada CHAR jika Anda tahu nomor yang di muka. 868 00:40:16,070 --> 00:40:19,500 Tapi memang ada, dan aku akan semacam ekstrak dari jawaban bahwa realitas 869 00:40:19,500 --> 00:40:22,610 bahwa masih ada max, yang bisa mengganggu, terutama jika Anda 870 00:40:22,610 --> 00:40:25,920 menemukan nama seseorang yang luar biasa panjang bahwa Anda tidak 871 00:40:25,920 --> 00:40:26,860 mengantisipasi. 872 00:40:26,860 --> 00:40:31,420 Dan itu juga sedikit kurang efisien untuk benar-benar mencari di varchars sebagai 873 00:40:31,420 --> 00:40:35,620 bertentangan dengan mencari karakter, terutama untuk meja-meja panjang yang memiliki banyak dan 874 00:40:35,620 --> 00:40:36,510 banyak data. 875 00:40:36,510 --> 00:40:40,060 Jadi di sini juga, tematik lagi tidak ada pilihan yang jelas. 876 00:40:40,060 --> 00:40:42,870 >> Jadi hanya untuk memberikan rasa lainnya tipe data yang mungkin menarik 877 00:40:42,870 --> 00:40:45,400 baik untuk p-set tujuh atau di masa depan, ada INT. 878 00:40:45,400 --> 00:40:47,270 Ada BIGINT, yang adalah seperti lama. 879 00:40:47,270 --> 00:40:48,880 Ini cenderung menjadi 64 bit. 880 00:40:48,880 --> 00:40:51,640 Ada DECIMAL, yang akan Anda lihat di set masalah, yang merupakan banyak 881 00:40:51,640 --> 00:40:55,300 jawaban cleaner untuk masalah yang kita ditemui dengan mengambang dan mengambang 882 00:40:55,300 --> 00:40:55,980 titik ketidaktepatan. 883 00:40:55,980 --> 00:40:57,390 Dan kemudian ada DATETIME. 884 00:40:57,390 --> 00:41:01,530 Ada harfiah tipe data yang memiliki terlihat seperti satu tahun, satu bulan, satu hari, 885 00:41:01,530 --> 00:41:03,730 dan satu jam, menit, dan detik. 886 00:41:03,730 --> 00:41:07,470 >> Tapi database SQL juga memiliki hal yang kita akan menelepon indeks. 887 00:41:07,470 --> 00:41:11,630 Dan indeks adalah sesuatu yang Anda tentukan saat membuat meja untuk 888 00:41:11,630 --> 00:41:15,720 membuat pencarian dan operasi lainnya lebih efisien. 889 00:41:15,720 --> 00:41:18,550 Secara khusus, ada sesuatu yang disebut PRIMARY indeks yang Anda bisa 890 00:41:18,550 --> 00:41:19,440 menyatakan sebagai berikut. 891 00:41:19,440 --> 00:41:22,330 >> Kami melakukan ini untuk Anda dengan tabel pengguna kami memberikan. 892 00:41:22,330 --> 00:41:26,160 Tapi perhatikan jika aku menciptakan manual tabel pengguna di sini memberikan 893 00:41:26,160 --> 00:41:27,110 itu nama pengguna. 894 00:41:27,110 --> 00:41:28,125 Aku sudah ditentukan ID. 895 00:41:28,125 --> 00:41:29,330 Saya ditentukan INT. 896 00:41:29,330 --> 00:41:32,000 Saya ditentukan nama pengguna dengan maksimum 32 karakter. 897 00:41:32,000 --> 00:41:36,140 Tetapi jika kita terus bergulir dalam hal ini cukup jendela lebar, pemberitahuan ada 898 00:41:36,140 --> 00:41:38,260 banyak hal-hal lain yang bisa saya tentukan. 899 00:41:38,260 --> 00:41:40,950 >> Satu, saya dapat menentukan atribut seperti, Anda tahu apa, ini 900 00:41:40,950 --> 00:41:42,190 INT harus UNSIGNED. 901 00:41:42,190 --> 00:41:45,510 Saya tidak ingin angka negatif, jadi mari kita membuatnya UNSIGNED. 902 00:41:45,510 --> 00:41:48,660 Null tidak relevan di sini karena Saya ingin setiap pengguna untuk 903 00:41:48,660 --> 00:41:49,640 memiliki nomor unik. 904 00:41:49,640 --> 00:41:50,830 Saya tidak ingin menjadi null. 905 00:41:50,830 --> 00:41:52,330 >> Tapi ini menarik. 906 00:41:52,330 --> 00:41:57,780 Saya dapat menentukan bahwa ID adalah baik primary key dari database ini, atau itu 907 00:41:57,780 --> 00:42:00,620 unik, atau itu diindeks, atau teks lengkap. 908 00:42:00,620 --> 00:42:05,630 Jadi untuk tujuan hari ini, cerita panjang pendek, PRIMARY berarti bahwa ini akan 909 00:42:05,630 --> 00:42:10,570 menjadi baik secara konseptual dan teknis bidang yang kita gunakan untuk secara unik 910 00:42:10,570 --> 00:42:12,140 mengidentifikasi pengguna. 911 00:42:12,140 --> 00:42:16,140 >> Jadi ketika kita mencari pengguna, ini adalah semacam dari janji untuk melihat mereka kebanyakan oleh 912 00:42:16,140 --> 00:42:17,370 bahwa identifier unik. 913 00:42:17,370 --> 00:42:21,930 Dan database akan memastikan bahwa jika Anda memiliki nomor pengguna 3, Anda tidak bisa 914 00:42:21,930 --> 00:42:25,400 secara fisik memasukkan pengguna lain dengan nomor yang sama 3. 915 00:42:25,400 --> 00:42:28,380 Database hanya akan menolak untuk menyimpan perubahan. 916 00:42:28,380 --> 00:42:32,310 Yang merupakan hal yang baik, karena Anda dapat melindungi diri dari diri sendiri. diri 917 00:42:32,310 --> 00:42:34,270 >> Atau, untuk username. 918 00:42:34,270 --> 00:42:37,670 Jadi baris kedua, ingat, adalah kolom username. 919 00:42:37,670 --> 00:42:41,860 Jadi baris kedua di sini adalah nama pengguna, seperti yang kita lakukan di paling kiri di sana. 920 00:42:41,860 --> 00:42:43,940 >> Jadi apa lagi yang mungkin saya ingin menentukan? 921 00:42:43,940 --> 00:42:47,840 Saya tidak diperbolehkan, menurut SQL, untuk menentukan dua kunci primer. 922 00:42:47,840 --> 00:42:50,750 Anda dapat menentukan kunci bersama di mana Anda melihat kedua bidang, tetapi mereka tidak bisa 923 00:42:50,750 --> 00:42:52,260 individual menjadi kunci utama. 924 00:42:52,260 --> 00:42:54,750 Jadi itu keluar dari pertanyaan. 925 00:42:54,750 --> 00:42:56,040 Jadi yang mungkin saya ingin memilih? 926 00:42:56,040 --> 00:42:59,710 >> Nah, UNIK adalah semangat yang sama dengan primary key di mana Anda menentukan ini 927 00:42:59,710 --> 00:43:03,570 lapangan harus unik, tapi itu tidak akan menjadi satu 928 00:43:03,570 --> 00:43:04,410 Saya menggunakan semua waktu. 929 00:43:04,410 --> 00:43:08,450 Dan kita tidak akan menggunakan satu ini semua waktu untuk alasan apa lagi? 930 00:43:08,450 --> 00:43:10,490 Ini lebih lambat jika berpotensi itu adalah nama panjang. 931 00:43:10,490 --> 00:43:11,740 Itu hanya membuang-buang waktu. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, sementara itu, menentukan bahwa itu tidak akan menjadi unik, tapi aku ingin 933 00:43:16,140 --> 00:43:19,470 Anda untuk bekerja sihir Anda di bawah hood untuk membuatnya lebih cepat bagi saya untuk 934 00:43:19,470 --> 00:43:21,420 mencari di bidang ini. 935 00:43:21,420 --> 00:43:23,320 Jadi ini mungkin tidak relevan di sini. 936 00:43:23,320 --> 00:43:26,500 Untuk nama, aku berpendapat bahwa UNIK adalah jawaban yang baik. 937 00:43:26,500 --> 00:43:31,200 Tapi misalkan kita membuat lebih banyak pengguna menarik daripada username adil, 938 00:43:31,200 --> 00:43:32,430 hash, dan nomor ID. 939 00:43:32,430 --> 00:43:33,860 Bagaimana jika kita memberi orang nama lengkap? 940 00:43:33,860 --> 00:43:37,700 Bagaimana jika kita memberi mereka alamat dan data lain tentang mereka? 941 00:43:37,700 --> 00:43:43,360 >> Nah, jika Anda menentukan bahwa sebuah kolom dalam database diindeks, itu berarti bahwa 942 00:43:43,360 --> 00:43:47,730 MySQL, atau Oracle, atau apa pun Database Anda gunakan, harus bekerja sihir 943 00:43:47,730 --> 00:43:51,300 dan menggunakan beberapa jenis data mewah struktur seperti pohon, atau trie, atau 944 00:43:51,300 --> 00:43:55,940 tabel hash, atau sesuatu untuk menjamin bahwa ketika Anda mencari data menggunakan 945 00:43:55,940 --> 00:43:58,150 pilih pada bidang tertentu - 946 00:43:58,150 --> 00:44:01,310 seperti menunjukkan semua orang bahwa kehidupan di Oxford Street. 947 00:44:01,310 --> 00:44:02,540 Sebuah query seperti itu. 948 00:44:02,540 --> 00:44:06,250 Jika Anda telah menetapkan sebelumnya bahwa Anda ingin indeks di lapangan itu, 949 00:44:06,250 --> 00:44:09,050 pencarian akan jauh, jauh lebih cepat. 950 00:44:09,050 --> 00:44:12,090 >> Jika Anda tidak menentukan indeks, yang terbaik dapat Anda lakukan adalah pencarian linear jika 951 00:44:12,090 --> 00:44:13,030 itu tidak diurutkan. 952 00:44:13,030 --> 00:44:16,220 Tapi jika Anda menentukan INDEX, smart orang yang membuat database - 953 00:44:16,220 --> 00:44:19,340 orang seperti Anda yang sekarang tahu pohon dan mencoba dan tabel hash - 954 00:44:19,340 --> 00:44:23,220 otomatis akan membangun data tersebut Struktur dalam RAM memastikan bahwa 955 00:44:23,220 --> 00:44:26,050 mereka pencarian yang lebih cepat. 956 00:44:26,050 --> 00:44:29,660 >> Sementara fulltext mirip dalam roh, tetapi memungkinkan Anda untuk melakukan wildcard 957 00:44:29,660 --> 00:44:35,480 pencarian, seperti menunjukkan semua orang bahwa hidup di jalan-jalan yang dimulai dengan 958 00:44:35,480 --> 00:44:36,960 huruf O untuk alasan apa pun. 959 00:44:36,960 --> 00:44:38,850 Anda dapat melakukan pencarian wildcard seperti itu. 960 00:44:38,850 --> 00:44:45,880 Atau, hal yang lebih menarik seperti acara saya orang yang memiliki kata - 961 00:44:45,880 --> 00:44:49,400 menunjukkan orang yang namanya dimulai dengan huruf tertentu. 962 00:44:49,400 --> 00:44:51,880 Anda dapat mencari kata kunci dengan cara ini. 963 00:44:51,880 --> 00:44:52,630 Baik. 964 00:44:52,630 --> 00:44:55,760 >> Jadi, peluang desain ada berpotensi. 965 00:44:55,760 --> 00:44:57,740 Ada yang lain yang aku akan melambaikan tangan saya di. 966 00:44:57,740 --> 00:45:00,530 Ternyata bahwa Anda dapat memiliki mesin penyimpanan yang berbeda. 967 00:45:00,530 --> 00:45:04,390 Dan ini lebih misterius daripada yang kita butuhkan tentu saja untuk masalah memisahkan tujuh. 968 00:45:04,390 --> 00:45:06,920 Secara default, kalian menggunakan sesuatu yang disebut InnoDB. 969 00:45:06,920 --> 00:45:10,910 Anda akan melihat menyebutkan ini di suatu tempat di antarmuka phpMyAdmin kemungkinan besar. 970 00:45:10,910 --> 00:45:14,130 Tapi tahu bahwa ada desain lainnya keputusan yang potensial 971 00:45:14,130 --> 00:45:18,030 bunga datang proyek akhir jika Anda melakukan sesuatu berbasis web. 972 00:45:18,030 --> 00:45:19,330 >> Tapi mari kita lakukan ini. 973 00:45:19,330 --> 00:45:23,130 Mari kita pergi ke depan dan menempatkan ini pada layar sebagai teaser untuk sebuah cerita 974 00:45:23,130 --> 00:45:26,330 melibatkan Anda, teman sekamar, dan segelas susu. 975 00:45:26,330 --> 00:45:28,240 Mari kita mengambil dua menit atau jadi istirahat di sini. 976 00:45:28,240 --> 00:45:31,060 Dan jika Anda bisa tetap tinggal, mari kita kembali, terlihat sedikit lebih di SQL, dan 977 00:45:31,060 --> 00:45:35,160 maka sedikit JavaScript dengan p-set delapan dalam pikiran. 978 00:45:35,160 --> 00:45:36,120 >> Baik. 979 00:45:36,120 --> 00:45:40,420 Jadi, mari kita Anda berpikir tentang sudut kasus yang dapat sangat mudah timbul 980 00:45:40,420 --> 00:45:44,240 dalam konteks menggunakan database, atau terus terang, bahkan menggunakan hal-hal dunia nyata 981 00:45:44,240 --> 00:45:46,280 seperti ATM untuk mendapatkan uang. 982 00:45:46,280 --> 00:45:47,640 Jadi, inilah kulkas. 983 00:45:47,640 --> 00:45:50,040 Misalkan Anda punya satu juga di asrama atau rumah Anda. 984 00:45:50,040 --> 00:45:54,990 Dan Anda punya satu teman sekamar, dan kedua Anda benar-benar seperti susu misalnya. 985 00:45:54,990 --> 00:45:57,210 >> Jadi Anda pulang dari kelas satu hari. 986 00:45:57,210 --> 00:45:58,490 Dia atau dia belum kembali. 987 00:45:58,490 --> 00:45:59,180 Anda membuka kulkas. 988 00:45:59,180 --> 00:46:00,870 Anda benar-benar ingin segelas besar susu. 989 00:46:00,870 --> 00:46:01,820 Tidak ada susu. 990 00:46:01,820 --> 00:46:02,920 Jadi apa yang Anda lakukan? 991 00:46:02,920 --> 00:46:03,840 Anda menutup lemari es. 992 00:46:03,840 --> 00:46:04,670 Anda ambil kunci Anda. 993 00:46:04,670 --> 00:46:05,930 Anda pergi ke alun-alun. 994 00:46:05,930 --> 00:46:09,240 Dan Anda mendapatkan dalam antrean di CVS pada saat- hal checkout diri, yang selalu 995 00:46:09,240 --> 00:46:11,180 memakan waktu lebih lama daripada benar-benar memiliki kasir. 996 00:46:11,180 --> 00:46:11,820 Bagaimanapun. 997 00:46:11,820 --> 00:46:15,490 >> Jadi, sementara itu, dot dot dot, Anda teman sekamar pulang dan dia 998 00:46:15,490 --> 00:46:17,440 sama memiliki keinginan besar beberapa susu. 999 00:46:17,440 --> 00:46:20,380 Jadi dia membuka lemari es, terlihat di dalam, dan oh, sialan. 1000 00:46:20,380 --> 00:46:21,160 Tidak ada susu. 1001 00:46:21,160 --> 00:46:24,750 Jadi ia kepala keluar, terjadi untuk pergi ke CVS lainnya, yang hanya 1002 00:46:24,750 --> 00:46:27,900 blok jauhnya untuk beberapa alasan, dan dia atau dia mendapat dalam antrean untuk membeli susu. 1003 00:46:27,900 --> 00:46:30,480 >> Sementara itu, Anda pulang ke rumah, ia atau ia datang, dan apa yang dilakukan 1004 00:46:30,480 --> 00:46:31,980 Anda akhirnya punya? 1005 00:46:31,980 --> 00:46:33,080 Dua kali lebih banyak susu. 1006 00:46:33,080 --> 00:46:34,620 Tapi Anda tidak benar-benar seperti susu yang banyak. 1007 00:46:34,620 --> 00:46:37,300 Jadi sekarang Anda memiliki begitu banyak susu yang sekarang salah satu dari mereka hanya akan pergi asam 1008 00:46:37,300 --> 00:46:37,820 akhirnya. 1009 00:46:37,820 --> 00:46:39,370 Jadi ini adalah masalah benar-benar buruk. 1010 00:46:39,370 --> 00:46:39,900 Benar? 1011 00:46:39,900 --> 00:46:41,990 >> Jadi apa yang terjadi? 1012 00:46:41,990 --> 00:46:44,810 Jadi pada dasarnya, ini adalah jenis dari contoh konyol. 1013 00:46:44,810 --> 00:46:48,580 Tapi di balik kap mesin, apa yang kita punya terjadi di sini adalah Anda berdua diperiksa 1014 00:46:48,580 --> 00:46:52,390 keadaan beberapa bagian dari memori, kulkas. 1015 00:46:52,390 --> 00:46:54,420 Anda berdua diperiksa negara beberapa variabel. 1016 00:46:54,420 --> 00:46:57,360 Anda berdua menarik kesimpulan itu maka Anda bertindak. 1017 00:46:57,360 --> 00:47:01,420 Namun sayangnya, sementara teman sekamar Anda berada di toko, keadaan yang 1018 00:47:01,420 --> 00:47:05,670 variabel berubah, dia kembali dan sekarang ingin mengubah negara, tetapi 1019 00:47:05,670 --> 00:47:07,480 itu sudah berubah pada dirinya. 1020 00:47:07,480 --> 00:47:11,120 Dan tentu saja, ia tidak akan memiliki pergi ke toko jika mereka tahu 1021 00:47:11,120 --> 00:47:13,010 bahwa Anda sudah dalam perjalanan. 1022 00:47:13,010 --> 00:47:16,430 >> Jadi di dunia nyata, bagaimana kau bisa menghindari masalah ini, dengan asumsi Anda memiliki 1023 00:47:16,430 --> 00:47:18,940 kulkas, Anda memiliki teman sekamar, dan Anda benar-benar suka susu? 1024 00:47:18,940 --> 00:47:19,760 >> AUDIENCE: Berkomunikasi. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID Malan: Berkomunikasi. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Tapi bagaimana mungkin Anda berkomunikasi? 1028 00:47:22,500 --> 00:47:23,990 >> AUDIENCE: Tinggalkan catatan. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID Malan: Tinggalkan catatan, kan? 1030 00:47:25,480 --> 00:47:28,025 Selalu meninggalkan catatan, untuk penggemar dari pertunjukan. 1031 00:47:28,025 --> 00:47:31,580 Baiklah, jadi selalu meninggalkan catatan, atau menempatkan benar-benar seperti gembok atau sesuatu 1032 00:47:31,580 --> 00:47:35,440 pada lemari es yang membuat Anda teman sekamar dari memeriksa keadaan 1033 00:47:35,440 --> 00:47:36,540 bahwa variabel. 1034 00:47:36,540 --> 00:47:40,800 >> Sekarang, mengapa hal ini menjadi erat dengan permasalahan yang tujuh, atau ATM. 1035 00:47:40,800 --> 00:47:46,780 Nah, bayangkan sebuah dunia di mana ATM Anda mungkin bisa pergi ke ATM 1036 00:47:46,780 --> 00:47:48,920 mesin di sini, dan ATM lain di sini. 1037 00:47:48,920 --> 00:47:50,680 Dan ini terjadi cukup sering. 1038 00:47:50,680 --> 00:47:54,150 Dan misalkan Anda memiliki dua kartu ATM, yang mungkin untuk mendapatkan. 1039 00:47:54,150 --> 00:47:57,420 Dan Anda login ke kedua mesin efektif secara bersamaan, mudah-mudahan 1040 00:47:57,420 --> 00:47:58,660 sementara tidak ada yang melihat. 1041 00:47:58,660 --> 00:48:01,260 Dan kemudian Anda ketik PIN Anda kira-kira bersamaan. 1042 00:48:01,260 --> 00:48:06,280 Dan kemudian Anda melakukan query keseimbangan untuk melihat berapa banyak uang tunai yang Anda miliki. 1043 00:48:06,280 --> 00:48:08,920 Dan katakanlah anda $ 100 tersisa dalam account Anda. 1044 00:48:08,920 --> 00:48:13,310 Jadi pada dasarnya secara bersamaan, Anda mengatakan satu, nol, nol, masukkan. 1045 00:48:13,310 --> 00:48:16,000 Dan mudah-mudahan Anda mendapatkan kembali uang. 1046 00:48:16,000 --> 00:48:18,440 >> Tapi berapa banyak uang yang mungkin Anda dapatkan kembali? 1047 00:48:18,440 --> 00:48:21,710 Sekarang komputer di akhir hari, terutama jika mereka sedang berbicara dengan 1048 00:48:21,710 --> 00:48:27,360 server, tidak perlu melakukan hal-hal dalam urutan yang diharapkan. 1049 00:48:27,360 --> 00:48:30,860 >> Jadi misalkan apa yang terjadi, karena jaringan apapun masalah kecepatan ada 1050 00:48:30,860 --> 00:48:34,530 adalah, atau masalah CPU ada, atau sesuatu seperti itu, anggaplah bahwa 1051 00:48:34,530 --> 00:48:38,530 ATM pertama cek saldo dan melihat, oh, orang ini memiliki $ 100. 1052 00:48:38,530 --> 00:48:41,840 Tapi kemudian akan terganggu karena mungkin cadangan yang terjadi dan jadi 1053 00:48:41,840 --> 00:48:42,500 melambat. 1054 00:48:42,500 --> 00:48:45,080 Atau mungkin saat memeriksa, jaringan koneksi mendapat sedikit lebih lambat karena 1055 00:48:45,080 --> 00:48:45,910 ini terjadi begitu saja. 1056 00:48:45,910 --> 00:48:47,100 Mereka perangkat fisik. 1057 00:48:47,100 --> 00:48:49,330 Jadi sementara itu, ATM kedua adalah mengajukan pertanyaan yang sama. 1058 00:48:49,330 --> 00:48:53,030 Berapa banyak uang yang David miliki? $ 100 jawabannya. 1059 00:48:53,030 --> 00:48:58,930 Tetapi karena ATM pertama belum mengirim pesan kurangi $ 100, baik 1060 00:48:58,930 --> 00:49:03,000 ATM telah memeriksa lemari besi bank, melihat ada $ 100 di sana, dan sekarang 1061 00:49:03,000 --> 00:49:07,160 kedua mesin berpotensi adalah akan memuntahkan jawaban. 1062 00:49:07,160 --> 00:49:12,240 >> Sekarang, ini sangat bagus untuk Anda dalam beberapa hal jika apa yang bank tidak akhirnya 1063 00:49:12,240 --> 00:49:17,200 adalah mengubah jumlah yang minus 100 oleh pengaturan variabel sama dengan Anda 1064 00:49:17,200 --> 00:49:21,570 Bank rekening sama dengan 0, sebagai lawan untuk melakukan minus 100. 1065 00:49:21,570 --> 00:49:24,410 Sekarang dalam kasus terburuk untuk bank - 1066 00:49:24,410 --> 00:49:27,470 atau yang terbaik untuk bank, sementara itu, mereka memberi Anda $ 200, dan 1067 00:49:27,470 --> 00:49:31,690 rekening bank Anda sekarang menunjukkan negatif $ 100, yang benar-benar tidak 1068 00:49:31,690 --> 00:49:32,950 menguntungkan Anda sama sekali. 1069 00:49:32,950 --> 00:49:36,500 Tetapi intinya adalah bahwa lomba ini kondisi dua teman sekamar mendapatkan 1070 00:49:36,500 --> 00:49:40,660 susu, atau untuk dua ATM mencoba untuk mendapatkan uang tunai dan mengubah keadaan lemari besi 1071 00:49:40,660 --> 00:49:44,510 pada saat yang sama ada setiap waktu Anda memiliki sebuah database. 1072 00:49:44,510 --> 00:49:48,290 >> Sekarang dalam masalah menetapkan tujuh, masalah ini muncul dalam arti bahwa jika Anda membeli 1073 00:49:48,290 --> 00:49:52,110 lembar saham Facebook, dan kemudian untuk Misalnya Anda membeli saham kedua 1074 00:49:52,110 --> 00:49:55,160 Saham Facebook, Anda perlu membuat keputusan sebagai programmer. 1075 00:49:55,160 --> 00:49:58,710 Dalam rangka untuk memutuskan bagaimana untuk memperbarui Database, kemungkinan Anda akan 1076 00:49:58,710 --> 00:50:02,250 memiliki satu baris untuk saham itu, dan ini adalah salah satu cara untuk menerapkannya. 1077 00:50:02,250 --> 00:50:06,640 Dan Anda akan memiliki satu saham FB, yang merupakan simbol ticker saham mereka 1078 00:50:06,640 --> 00:50:10,120 username ini, atau pengguna ini ID, pengenal unik. 1079 00:50:10,120 --> 00:50:12,340 >> Tapi cerita yang sama bisa terjadi di sini. 1080 00:50:12,340 --> 00:50:15,800 Jika Anda melakukan SELECT di SQL, seperti yang Anda akan melihat dalam masalah menetapkan tujuh ketika Anda melihat, 1081 00:50:15,800 --> 00:50:18,460 oh, David memiliki satu saham saham Facebook. 1082 00:50:18,460 --> 00:50:23,240 Sekarang saya mengubah ini menjadi dua bagian, karena dia ingin membeli 1083 00:50:23,240 --> 00:50:24,120 saham kedua. 1084 00:50:24,120 --> 00:50:27,860 Tapi misalkan David benar-benar memiliki dua jendela browser terbuka, atau menganggap bahwa 1085 00:50:27,860 --> 00:50:32,150 itu rekening bersama dengan dua pasangan, dan keduanya berusaha untuk melakukan 1086 00:50:32,150 --> 00:50:36,770 operasi yang sama, ada juga, ada potensi untuk keputusan untuk menjadi 1087 00:50:36,770 --> 00:50:39,670 dibuat berdasarkan sebelumnya keadaan dunia - 1088 00:50:39,670 --> 00:50:41,290 account memiliki satu saham - 1089 00:50:41,290 --> 00:50:45,630 dan kedua orang atau kedua server, sekarang mencoba untuk mengatakan kenaikan itu menjadi dua saham. 1090 00:50:45,630 --> 00:50:49,020 Tapi dalam kasus ini, Anda mungkin telah dibebankan saya uang untuk kedua saham, tetapi 1091 00:50:49,020 --> 00:50:50,830 bertambah hanya satu kali. 1092 00:50:50,830 --> 00:50:54,730 >> Jadi singkatnya, masalah mendasar di sini, seperti dengan lelucon tentang meninggalkan 1093 00:50:54,730 --> 00:50:58,750 catatan, atau menempatkan gembok di atasnya, adalah jika dua orang, atau dua thread - 1094 00:50:58,750 --> 00:50:59,930 berpikir kembali ke awal - 1095 00:50:59,930 --> 00:51:03,220 dapat memeriksa keadaan beberapa variabel dan kemudian mencoba untuk mengubah variabel itu, 1096 00:51:03,220 --> 00:51:07,950 tetapi kedua hal tidak terjadi pada waktu yang sama tetapi bisa terganggu 1097 00:51:07,950 --> 00:51:11,500 oleh hal-hal lain yang terjadi, data yang dapat masuk ke keadaan yang sangat aneh. 1098 00:51:11,500 --> 00:51:15,450 Dan Anda bisa mendapatkan keuntungan atau Anda bisa menderita dalam arti contoh uang. 1099 00:51:15,450 --> 00:51:18,110 >> Jadi dalam masalah set tujuh, kami memberikan baris ini salah satu kode, yang panjang 1100 00:51:18,110 --> 00:51:21,000 cerita pendek, memecahkan ini masalah dalam MySQL. 1101 00:51:21,000 --> 00:51:24,950 Instruksi ini sangat panjang yang tidak bahkan masuk dalam satu garis pada 1102 00:51:24,950 --> 00:51:30,370 layar di sini memastikan bahwa operasi Anda adalah apa yang disebut atom. 1103 00:51:30,370 --> 00:51:33,720 Itu semua terjadi sekaligus, atau itu tidak terjadi sama sekali. 1104 00:51:33,720 --> 00:51:37,530 Ungkapan yang sangat panjang ini tidak bisa mendapatkan terganggu sebagian. 1105 00:51:37,530 --> 00:51:39,840 >> Dan apa yang dilakukannya adalah benar apa yang dikatakannya. 1106 00:51:39,840 --> 00:51:44,200 Masukkan ke dalam beberapa tabel berikut tiga bidang nilai-nilai tertentu, 1107 00:51:44,200 --> 00:51:47,280 tetapi pada duplikat kunci, tidak melakukan insert. 1108 00:51:47,280 --> 00:51:48,280 Melakukan update. 1109 00:51:48,280 --> 00:51:52,450 Jadi ini seperti melakukan SELECT dan INSERT sehingga untuk berbicara pada waktu yang sama. 1110 00:51:52,450 --> 00:51:55,150 Dan apa adalah kunci yang mungkin yang dimaksud di sini? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Ternyata, dan Anda akan melihat ini dalam permasalahan yang tujuh itu spec, karena 1113 00:52:01,380 --> 00:52:06,040 kami telah menyatakan ada menjadi kunci yang unik di meja tertentu sehingga 1114 00:52:06,040 --> 00:52:08,480 Anda tidak dapat memiliki beberapa baris untuk pengguna yang sama dengan 1115 00:52:08,480 --> 00:52:10,150 sama simbol saham penny - 1116 00:52:10,150 --> 00:52:13,780 dalam contoh ini di sini, adalah DVN.V saham penny konyol yang kita 1117 00:52:13,780 --> 00:52:14,980 lihat di spec. 1118 00:52:14,980 --> 00:52:17,860 Karena kita sudah menyatakan itu menjadi unik, apa artinya ini adalah bahwa jika Anda 1119 00:52:17,860 --> 00:52:23,580 mencoba untuk menyisipkan baris duplikat, Anda bukannya akan memperbaruinya tanpa 1120 00:52:23,580 --> 00:52:27,020 orang lain memiliki kesempatan untuk mengubah keadaan dunia baik. 1121 00:52:27,020 --> 00:52:29,400 Jadi singkatnya, ini memastikan hal-hal yang atom. 1122 00:52:29,400 --> 00:52:32,530 >> Secara umum meskipun, database seperti MySQL - 1123 00:52:32,530 --> 00:52:35,460 dan Anda tidak perlu fitur ini untuk p-set tujuh, tapi menyimpannya dalam pikiran untuk 1124 00:52:35,460 --> 00:52:36,200 masa depan - 1125 00:52:36,200 --> 00:52:38,870 mendukung apa yang disebut transaksi, di mana Anda dapat mengatakan 1126 00:52:38,870 --> 00:52:40,990 MULAI TRANSAKSI harfiah. 1127 00:52:40,990 --> 00:52:43,270 Anda kemudian dapat mengeksekusi dua pernyataan SQL. 1128 00:52:43,270 --> 00:52:45,710 Dan pernyataan SQL, seperti yang Anda akan melihat dalam p-set tujuh, terlihat sedikit 1129 00:52:45,710 --> 00:52:46,750 sesuatu seperti ini. 1130 00:52:46,750 --> 00:52:48,820 Memperbarui tabel yang disebut akun. 1131 00:52:48,820 --> 00:52:52,550 Mengatur kolom saldo sebesar apapun kolom saldo saat ini 1132 00:52:52,550 --> 00:52:57,280 minus 1.000 di mana nomor tersebut, nomor rekening, seperti ID pengguna, 1133 00:52:57,280 --> 00:53:00,830 sama dengan 2, dan kemudian memperbarui akun dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> Jadi dalam istilah awam, apa yang kedua query tampaknya akan melakukan dalam 1135 00:53:04,350 --> 00:53:05,840 arti dunia nyata perbankan? 1136 00:53:05,840 --> 00:53:07,440 >> AUDIENCE: Mentransfer tabungan. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID Malan: Tepat. 1138 00:53:08,020 --> 00:53:10,470 Mentransfer dana dari satu akun yang lain. 1139 00:53:10,470 --> 00:53:14,400 Dan ini adalah contoh lain di mana Anda benar-benar ingin dua hal ini terjadi 1140 00:53:14,400 --> 00:53:15,570 atau tidak terjadi. 1141 00:53:15,570 --> 00:53:18,880 Anda tidak ingin sesuatu untuk mendapatkan di tengah-tengah mereka dan berpotensi mengacaukan 1142 00:53:18,880 --> 00:53:22,220 matematika, atau mengacaukan berapa banyak uang yang Anda miliki, atau berapa banyak 1143 00:53:22,220 --> 00:53:23,170 uang bank memiliki. 1144 00:53:23,170 --> 00:53:26,890 Jadi apa yang benar-benar baik tentang transaksi di MySQL adalah bahwa, dan 1145 00:53:26,890 --> 00:53:30,160 database lebih umum, adalah bahwa mereka dan orang-orang pintar yang pernah diimplementasikan 1146 00:53:30,160 --> 00:53:33,670 fitur ini mencari cara untuk membuat memastikan bahwa kedua hal terjadi 1147 00:53:33,670 --> 00:53:35,120 atau tidak sama sekali. 1148 00:53:35,120 --> 00:53:38,580 >> Dan jika Anda benar-benar bercita-cita untuk membuat sebuah website yang digunakan oleh orang-orang di 1149 00:53:38,580 --> 00:53:41,490 kampus, orang-orang di dunia nyata, melakukan sesuatu dalam arti startup, 1150 00:53:41,490 --> 00:53:43,300 ini adalah jenis keputusan desain yang 1151 00:53:43,300 --> 00:53:45,020 menjadi pernah begitu penting. 1152 00:53:45,020 --> 00:53:48,240 Jika tidak, Anda mulai kehilangan data, kehilangan pengguna, atau dalam kasus terburuk sebagai 1153 00:53:48,240 --> 00:53:51,800 kita lihat di sini, berpotensi kehilangan uang. 1154 00:53:51,800 --> 00:53:56,180 Jadi sekali lagi, lebih pada bahwa dalam permasalahan yang tujuh, serta mungkin untuk beberapa 1155 00:53:56,180 --> 00:53:57,530 Anda dalam proyek akhir. 1156 00:53:57,530 --> 00:54:01,870 >> Jadi mari kita mengubah gambar yang kita miliki saat lalu hanya dalam satu cara. 1157 00:54:01,870 --> 00:54:04,070 Jadi biarkan aku benar-benar melihat apakah saya bisa - 1158 00:54:04,070 --> 00:54:06,030 nope, yang sudah pergi. 1159 00:54:06,030 --> 00:54:06,690 Ada itu. 1160 00:54:06,690 --> 00:54:09,020 >> Jadi ini adalah di mana kami meninggalkan terakhir kali. 1161 00:54:09,020 --> 00:54:12,390 Dan ternyata kita akan melemparkan satu hal lagi ke dalam campuran di sini - 1162 00:54:12,390 --> 00:54:14,510 bahasa yang disebut JavaScript. 1163 00:54:14,510 --> 00:54:18,060 Jadi benar-benar cocok JavaScript ke dalam bagian ini - 1164 00:54:18,060 --> 00:54:22,086 dan aku tidak cukup meninggalkan ruang yang cukup, jadi ini bukan sekarang untuk skala. 1165 00:54:22,086 --> 00:54:23,900 OK, ini benar-benar menyedihkan. 1166 00:54:23,900 --> 00:54:27,075 OK, jadi itu JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Baik. 1168 00:54:27,340 --> 00:54:28,760 Aku benar-benar melakukan tindakan merugikan. 1169 00:54:28,760 --> 00:54:29,390 Baik. 1170 00:54:29,390 --> 00:54:34,790 >> Jadi JavaScript adalah pemrograman lain bahasa, dan terakhir kami, Jika yang membantu 1171 00:54:34,790 --> 00:54:37,770 meyakinkan bahwa tidak ada lebih banyak dari hidran kebakaran di sini. 1172 00:54:37,770 --> 00:54:41,100 Jadi JavaScript juga ditafsirkan bahasa, yang berarti Anda tidak 1173 00:54:41,100 --> 00:54:42,670 compile menjadi nol dan satu. 1174 00:54:42,670 --> 00:54:43,690 Anda hanya menjalankannya. 1175 00:54:43,690 --> 00:54:47,680 Tapi apa dasarnya berbeda dengan JavaScript biasanya adalah bahwa Anda 1176 00:54:47,680 --> 00:54:49,815 tidak berjalan di server web Anda. 1177 00:54:49,815 --> 00:54:52,570 Ini tidak bisa dijalankan dalam alat per se. 1178 00:54:52,570 --> 00:54:57,490 Sebaliknya, hal itu akan di-download oleh pengguna melalui HTTP ke browser mereka - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, apa pun - 1180 00:55:00,260 --> 00:55:03,860 dan itu browser yang mengeksekusi ini bahasa pemrograman tertentu. 1181 00:55:03,860 --> 00:55:08,000 >> Jadi harus jelas, PHP sejauh ini telah dijalankan baik pada baris perintah di 1182 00:55:08,000 --> 00:55:11,290 jendela hitam dan putih, pada server seperti alat, komputer 1183 00:55:11,290 --> 00:55:14,490 seperti alat, atau sudah dieksekusi oleh server web 1184 00:55:14,490 --> 00:55:15,860 berjalan pada komputer. 1185 00:55:15,860 --> 00:55:20,490 Tapi tema di sini adalah PHP yang sejauh ini telah dieksekusi di sisi server, sehingga 1186 00:55:20,490 --> 00:55:24,820 pengguna dan browser pengguna tidak pernah melihat baris kode PHP. 1187 00:55:24,820 --> 00:55:28,530 >> Bahkan, jika Anda pernah membuka browser untuk website atau lain dan Anda 1188 00:55:28,530 --> 00:55:32,400 benar-benar melihat kode PHP di jendela Anda, seseorang telah kacau. 1189 00:55:32,400 --> 00:55:34,950 Karena itu tidak dimaksudkan untuk menjadi dikirim ke browser langsung. 1190 00:55:34,950 --> 00:55:38,150 Ini seharusnya akan dieksekusi dan berbalik menjadi sesuatu seperti HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Tapi JavaScript pada dasarnya sebaliknya. 1192 00:55:40,120 --> 00:55:44,350 Ini dimaksudkan untuk dijalankan biasanya dalam jendela browser pengguna. 1193 00:55:44,350 --> 00:55:46,840 Dan apa jenis website menggunakan JavaScript kemudian hari ini? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Seperti harfiah setiap situs populer. 1196 00:55:52,180 --> 00:55:55,430 Setiap situs web yang kalian mungkin gunakan sehari-hari menggunakan JavaScript untuk 1197 00:55:55,430 --> 00:55:57,330 sederhana dan bahkan fitur terseksi. 1198 00:55:57,330 --> 00:55:59,800 >> Jadi sesuatu seperti Facebook Chatting jika Anda menggunakan itu. 1199 00:55:59,800 --> 00:56:01,040 Bagaimana yang benar-benar bekerja? 1200 00:56:01,040 --> 00:56:05,090 Nah sejauh ini, semua barang-barang kami sudah dilakukan dengan HTML dan PHP mengasumsikan bahwa 1201 00:56:05,090 --> 00:56:08,750 Anda menarik sebuah URL, dan Anda tekan Enter, dan Anda melihat beberapa konten HTML. 1202 00:56:08,750 --> 00:56:11,970 Dan Anda klik link, yang mengubah URL, mengubah halaman, dan reload 1203 00:56:11,970 --> 00:56:12,740 beberapa konten baru. 1204 00:56:12,740 --> 00:56:16,340 Klik URL lain atau mengirimkan formulir, Anda bisa dibawa ke halaman lain dan 1205 00:56:16,340 --> 00:56:17,420 Anda melihat beberapa konten baru. 1206 00:56:17,420 --> 00:56:22,710 >> Tetapi menggunakan sesuatu seperti Facebook Chat, atau Gchat, atau Google Maps, jarang 1207 00:56:22,710 --> 00:56:27,350 tidak seluruh halaman menyegarkan sehingga Anda melihat layar putih sebentar dan 1208 00:56:27,350 --> 00:56:28,470 maka konten baru. 1209 00:56:28,470 --> 00:56:32,610 Sebaliknya, halaman web saat ini dinamis mendapatkan diperbarui lagi dan 1210 00:56:32,610 --> 00:56:35,570 lagi dan lagi semua jenis dari belakang layar. 1211 00:56:35,570 --> 00:56:38,560 Dan ternyata bahwa ketika Anda pergi ke sesuatu seperti Facebook, atau Gchat, 1212 00:56:38,560 --> 00:56:43,050 atau Gmail, dan update halaman otomatis tanpa reload 1213 00:56:43,050 --> 00:56:47,630 seluruh layar, apa yang terjadi adalah bahwa browser Anda telah membuat semacam diam-diam 1214 00:56:47,630 --> 00:56:49,410 permintaan HTTP tambahan - 1215 00:56:49,410 --> 00:56:52,740 bukan untuk halaman web secara keseluruhan, tetapi hanya untuk potongan kecil dari data, seperti 1216 00:56:52,740 --> 00:56:55,740 pesan instan bahwa teman Anda hanya mengirimkan, atau status update yang 1217 00:56:55,740 --> 00:56:58,210 seseorang hanya mengirimi Anda, atau tweet bahwa seseorang hanya dikirim. 1218 00:56:58,210 --> 00:57:02,120 Ini hanya membuat permintaan sedikit untuk data, dan kemudian menggunakan JavaScript, ini 1219 00:57:02,120 --> 00:57:06,370 bahasa pemrograman, untuk mengubah apa halaman web terlihat seperti tanpa 1220 00:57:06,370 --> 00:57:09,860 Server membantu, tanpa server menghasilkan HTML itu. 1221 00:57:09,860 --> 00:57:13,820 >> Jadi singkatnya, JavaScript dapat digunakan kemudian untuk tidak hanya mengambil data baru dari 1222 00:57:13,820 --> 00:57:16,750 server tanpa reload keseluruhan Halaman atau mengirimkan formulir. 1223 00:57:16,750 --> 00:57:20,060 Hal ini juga dapat digunakan untuk perubahan yang disebut DOM - 1224 00:57:20,060 --> 00:57:21,520 dokumen objek model - 1225 00:57:21,520 --> 00:57:24,620 yang hanya cara mewah untuk mengatakan pohon HTML 1226 00:57:24,620 --> 00:57:26,220 bahwa kita melihat terakhir kali. 1227 00:57:26,220 --> 00:57:31,640 >> Jadi untuk meyakinkan, JavaScript adalah sintaksis sangat mirip dengan C juga. 1228 00:57:31,640 --> 00:57:32,820 Tidak ada fungsi utama. 1229 00:57:32,820 --> 00:57:35,430 Anda hanya mulai menulis kode dan itu akan dieksekusi, atau 1230 00:57:35,430 --> 00:57:36,900 ditafsirkan lebih tepat. 1231 00:57:36,900 --> 00:57:38,660 Kondisi akan terlihat seperti ini. 1232 00:57:38,660 --> 00:57:41,230 Tidak ada yang berbeda dari C atau PHP dalam hal ini. 1233 00:57:41,230 --> 00:57:43,890 Ekspresi Boolean atau-ed bersama-sama akan terlihat seperti ini. 1234 00:57:43,890 --> 00:57:45,590 Anded bersama-sama terlihat seperti ini. 1235 00:57:45,590 --> 00:57:47,750 >> Switch akan terlihat seperti ini. 1236 00:57:47,750 --> 00:57:49,440 Untuk loop akan terlihat seperti ini. 1237 00:57:49,440 --> 00:57:51,060 Sementara loop akan terlihat seperti ini. 1238 00:57:51,060 --> 00:57:53,316 Lakukan perulangan while akan terlihat seperti ini. 1239 00:57:53,316 --> 00:57:54,780 >> Ini baru. 1240 00:57:54,780 --> 00:57:58,753 Jadi JavaScript belum foreach membangun per se, tetapi konstruksi ini 1241 00:57:58,753 --> 00:58:03,870 untuk variabel i dalam array, dan saya dalam hal ini kasus menjadi nilai indeks. 1242 00:58:03,870 --> 00:58:06,880 Jadi itu sedikit berbeda dari yang foreach, meskipun versi baru 1243 00:58:06,880 --> 00:58:10,280 JavaScript yang keluar sepanjang waktu, sehingga bahkan fitur bahasa ini 1244 00:58:10,280 --> 00:58:10,880 berkembang. 1245 00:58:10,880 --> 00:58:16,920 >> Dan sebagai samping, JavaScript hari ini juga dapat digunakan pada server seperti 1246 00:58:16,920 --> 00:58:19,920 PHP menggunakan kerangka kerja yang disebut Node.js. 1247 00:58:19,920 --> 00:58:24,670 Salah satu CS50 di TF, Kevin, telah memimpin seminar tentang Node.js yang tersedia di 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Jadi, jika Anda penasaran, tahu bahwa Anda dapat menggunakan ini pada sisi server sebagai 1250 00:58:28,830 --> 00:58:33,870 baik, tapi itu tren yang lumayan baru, tapi satu yang kuat pada saat itu. 1251 00:58:33,870 --> 00:58:35,270 >> Ini adalah sedikit berbeda. 1252 00:58:35,270 --> 00:58:37,910 Ini adalah sebuah array di JavaScript. 1253 00:58:37,910 --> 00:58:40,115 Dan apa yang mengejutkan Anda sebagai berbeda dibandingkan C atau PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Ada sebuah cerita cepat beberapa kita bisa mengatakan di sini. 1256 00:58:47,420 --> 00:58:49,367 Apa yang hilang dibandingkan PHP? 1257 00:58:49,367 --> 00:58:51,652 >> AUDIENCE: [Tak terdengar]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID Malan: Ya? 1259 00:58:52,110 --> 00:58:53,322 Maaf, katakan lagi? 1260 00:58:53,322 --> 00:58:54,740 >> AUDIENCE: Tidak menyatakan jenis variabel. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID Malan: Kami tidak menyatakan jenis variabel. 1262 00:58:56,390 --> 00:58:59,630 Jadi sebenarnya cukup seperti PHP, kita tidak menentukan jenis variabel ini. 1263 00:58:59,630 --> 00:59:02,670 Sebaliknya, kita lebih umum mengatakan var untuk variabel. 1264 00:59:02,670 --> 00:59:06,690 Kami tidak memiliki gangguan PHP dari tanda dolar, yang sementara membosankan untuk 1265 00:59:06,690 --> 00:59:09,160 jenis, tidak membuat lebih jelas bahwa sesuatu yang variabel. 1266 00:59:09,160 --> 00:59:11,830 Sedangkan di sini, kami semacam kembali ke Pendekatan C dengan hanya memanggil 1267 00:59:11,830 --> 00:59:14,500 variabel dengan nama yang kita inginkan untuk memberikan, seperti nomor. 1268 00:59:14,500 --> 00:59:17,170 Dan juga seperti PHP, kita memiliki kurung persegi untuk 1269 00:59:17,170 --> 00:59:19,170 nilai-nilai dalam array itu. 1270 00:59:19,170 --> 00:59:22,490 >> Jadi variabel dalam JavaScript juga mungkin terlihat seperti ini. 1271 00:59:22,490 --> 00:59:26,900 Perhatikan di sini ini adalah sebuah string disebut s, tapi sama memiliki kita tidak ditentukan 1272 00:59:26,900 --> 00:59:28,750 bahwa itu string. 1273 00:59:28,750 --> 00:59:33,160 Di sini meskipun adalah fitur yang tidak ada dengan cara yang persis sama di PHP, 1274 00:59:33,160 --> 00:59:34,460 tapi agak sama. 1275 00:59:34,460 --> 00:59:36,530 Ini adalah obyek dalam JavaScript. 1276 00:59:36,530 --> 00:59:42,110 Dan objek semacam Swiss Army Pisau dari struktur data dalam bahwa Anda 1277 00:59:42,110 --> 00:59:43,900 dapat menggunakannya untuk banyak hal. 1278 00:59:43,900 --> 00:59:46,860 >> Di sini, misalnya, kita menyatakan variabel yang disebut quote. 1279 00:59:46,860 --> 00:59:49,110 Jenis variabel yang adalah obyek. 1280 00:59:49,110 --> 00:59:53,550 Anda dapat menganggap ini sebagai struct C yang memiliki kunci dan nilai. 1281 00:59:53,550 --> 00:59:55,250 Simbol adalah kunci. 1282 00:59:55,250 --> 00:59:57,350 FB adalah nilai, rupanya simbol saham. 1283 00:59:57,350 --> 00:59:57,930 Koma. 1284 00:59:57,930 --> 01:00:02,180 Harga adalah kunci lain, dan nilainya rupanya floating point, atau 1285 01:00:02,180 --> 01:00:06,510 jumlah yang lebih umum di JavaScript, dari $ 49,26. 1286 01:00:06,510 --> 01:00:09,030 >> Jadi PHP tidak memiliki - 1287 01:00:09,030 --> 01:00:12,980 kami belum melihat dalam objek PHP cukup seperti ini, tapi kami melihat analog, 1288 01:00:12,980 --> 01:00:14,093 yang adalah apa? 1289 01:00:14,093 --> 01:00:14,980 >> AUDIENCE: [Tak terdengar]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID Malan: Associative array. 1291 01:00:16,110 --> 01:00:19,990 Jadi sedangkan PHP memiliki array asosiatif yang sintaks yang pernah sedikit sehingga 1292 01:00:19,990 --> 01:00:20,370 berbeda - 1293 01:00:20,370 --> 01:00:21,780 kami melihat tanda kurung siku. 1294 01:00:21,780 --> 01:00:23,860 Kami melihat aneh panah simbol. 1295 01:00:23,860 --> 01:00:27,330 JavaScript memiliki objek, tapi ini sebagian besar perbedaan semantik dan 1296 01:00:27,330 --> 01:00:29,260 sinonim yang berbeda untuk saat ini. 1297 01:00:29,260 --> 01:00:35,060 Namun, sebagai samping, PHP juga memiliki objek dalam cara yang Java dan lainnya 1298 01:00:35,060 --> 01:00:37,810 bahasa memiliki benda-benda di pemrograman berorientasi objek. 1299 01:00:37,810 --> 01:00:40,440 Tapi kita akan menggunakan ini hanya untuk tipe data untuk saat ini. 1300 01:00:40,440 --> 01:00:42,170 Obyek dan array asosiatif. 1301 01:00:42,170 --> 01:00:44,140 >> Yang satu ini mungkin membuatnya sedikit lebih jelas. 1302 01:00:44,140 --> 01:00:45,890 Inilah mengapa sebuah benda berguna. 1303 01:00:45,890 --> 01:00:48,760 Bila Anda ingin mendeklarasikan mahasiswa, seperti Zamyla, kita bisa benar-benar 1304 01:00:48,760 --> 01:00:52,630 merangkum sehingga untuk berbicara dalam yang objek menggunakan kurung keriting seperti 1305 01:00:52,630 --> 01:00:55,060 sebelum sejumlah besar kunci dan nilai-nilai di sini. 1306 01:00:55,060 --> 01:00:59,150 Kami memiliki ID, rumah, dan nama Zamyla, diikuti dengan titik koma sebagai 1307 01:00:59,150 --> 01:01:00,690 biasanya di akhir. 1308 01:01:00,690 --> 01:01:04,840 >> Di sini juga, ini sedikit berbeda, tetapi juga sangat kuat 1309 01:01:04,840 --> 01:01:05,690 hari ini. 1310 01:01:05,690 --> 01:01:08,780 Berikut ini adalah array, dan aku tahu bahwa karena ada braket persegi up 1311 01:01:08,780 --> 01:01:11,090 atas dan braket persegi di bagian bawah. 1312 01:01:11,090 --> 01:01:16,050 Dan ini adalah array dari data apa ketik rupanya di JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Ini adalah sebuah array terlihat seperti tiga obyek. 1314 01:01:21,260 --> 01:01:24,580 Dan aku tahu itu adalah sebuah objek hanya karena kurung kurawal. 1315 01:01:24,580 --> 01:01:28,760 Dan melihat ada terbuka keriting brace, beberapa hal, dekat keriting brace, koma, 1316 01:01:28,760 --> 01:01:31,180 kemudian lagi, koma, dan kemudian beberapa lagi. 1317 01:01:31,180 --> 01:01:33,800 Jadi itulah tiga argumen dipisahkan oleh dua koma. 1318 01:01:33,800 --> 01:01:36,810 >> Jadi ini adalah sebuah array dari tiga objek. 1319 01:01:36,810 --> 01:01:39,940 Dan masing-masing obyek tampaknya anggota mahasiswa atau staf perusahaan tertentu 1320 01:01:39,940 --> 01:01:42,370 macam, masing-masing dengan ID, rumah, dan nama. 1321 01:01:42,370 --> 01:01:45,060 Tapi aku sudah disebut sesuatu ini disebut JSON - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 Dan ini adalah format data yang benar-benar begitu sangat populer dan di 1324 01:01:52,060 --> 01:01:55,100 vogue hari ini bahwa jika Anda menulis aplikasi yang menggunakan Facebook 1325 01:01:55,100 --> 01:01:59,150 API, API Twitter, benar-benar hampir setiap API luar sana hari ini, 1326 01:01:59,150 --> 01:02:02,820 termasuk beberapa CS50 sendiri, yang Data Anda kembali tidak di 1327 01:02:02,820 --> 01:02:04,720 Format CSV sekolah tua. 1328 01:02:04,720 --> 01:02:06,780 >> Karena ingat bahwa CSV super sederhana. 1329 01:02:06,780 --> 01:02:10,230 Ini hanya kolom dipisahkan dengan koma. 1330 01:02:10,230 --> 01:02:13,190 JSON Data memberi Anda lebih banyak metadata. 1331 01:02:13,190 --> 01:02:17,800 Ini asosiasi kunci dengan setiap nilai sehingga mereka tidak harus hanya berasumsi bahwa 1332 01:02:17,800 --> 01:02:22,460 kolom ke nol adalah satu nilai, kolom satu sama lain, dua kolom adalah hal lain. 1333 01:02:22,460 --> 01:02:26,790 Segala sesuatu di objek JSON di sini adalah semacam dari self-describing, karena setiap 1334 01:02:26,790 --> 01:02:30,940 salah satu nama dalam file ini telah benar-benar Nama di depannya sebagai 1335 01:02:30,940 --> 01:02:32,510 string yang dikutip. 1336 01:02:32,510 --> 01:02:34,950 >> Jadi mari kita melihat sebuah beberapa contoh di sini. 1337 01:02:34,950 --> 01:02:36,800 Biarkan aku pergi ke dalam alat. 1338 01:02:36,800 --> 01:02:41,000 Dan biarkan aku pergi ke vhost kami direktori ke publik. 1339 01:02:41,000 --> 01:02:45,590 Dan biarkan aku pergi ke Direktori JavaScript. 1340 01:02:45,590 --> 01:02:49,610 Dan mari kita pergi ke depan dan membuka dom-0.html, di mana DOM hanya berarti 1341 01:02:49,610 --> 01:02:51,010 dokumen objek model. 1342 01:02:51,010 --> 01:02:53,490 Ini adalah hal pohon yang Saya sebut sebelumnya. 1343 01:02:53,490 --> 01:02:54,950 >> Dan biarkan aku mengusulkan berikut. 1344 01:02:54,950 --> 01:02:57,720 Berikut adalah halaman web yang tubuh sangat sederhana. 1345 01:02:57,720 --> 01:03:00,170 Jadi di sini di bagian bawah, Saya perhatikan memiliki bentuk. 1346 01:03:00,170 --> 01:03:01,500 Kami telah melihat mereka sebelumnya. 1347 01:03:01,500 --> 01:03:07,600 Ini memiliki dua input, salah satunya memiliki ID nama, salah satunya memiliki jenis 1348 01:03:07,600 --> 01:03:09,830 submit, dan yang pertama jenis satu adalah teks. 1349 01:03:09,830 --> 01:03:11,900 Jadi ini benar-benar terdengar sangat sederhana. 1350 01:03:11,900 --> 01:03:13,090 >> Mari kita pergi di sini. 1351 01:03:13,090 --> 01:03:15,390 Mari kita kembali ke halaman ini di sini. 1352 01:03:15,390 --> 01:03:21,030 Mari kita pergi ke localhost, dan pergi ke direktori JavaScript kami, dan pergi ke 1353 01:03:21,030 --> 01:03:24,640 dom-0, dan di sini kita memiliki formulir ini. 1354 01:03:24,640 --> 01:03:26,550 Jadi itu rupanya semua halaman ini tidak. 1355 01:03:26,550 --> 01:03:28,740 Ia memiliki nama field dengan tombol Submit. 1356 01:03:28,740 --> 01:03:30,340 Tapi aku tidak akan menggunakan PHP sini. 1357 01:03:30,340 --> 01:03:34,310 Aku akan melakukan segala sisi client sehingga untuk berbicara dalam JavaScript sebagai berikut. 1358 01:03:34,310 --> 01:03:39,100 >> Perhatikan bahwa saya memang diberi nama bidang masukan ini unik 1359 01:03:39,100 --> 01:03:42,350 identifier, yang sebenarnya akan menyelamatkan saya beberapa waktu dalam sekejap. 1360 01:03:42,350 --> 01:03:45,480 Dan perhatikan saya telah memperkenalkan tag lain di kepala halaman web saya, 1361 01:03:45,480 --> 01:03:46,565  tag. 1362 01:03:46,565 --> 01:03:50,120 >> Jadi dalam pengertian ini bahwa JavaScript bahasa pemrograman sisi klien. 1363 01:03:50,120 --> 01:03:55,020 Dalam hal ini, seperti CSS, saya telah menempatkan langsung dalam HTML saya. 1364 01:03:55,020 --> 01:03:58,810 Tapi perhatikan aku sudah menyatakan fungsi yang terlihat sedikit seperti PHP 1365 01:03:58,810 --> 01:04:01,530 sintaksis, tapi ini sebenarnya JavaScript, karena sekali lagi, itu 1366 01:04:01,530 --> 01:04:03,920 sisi klien dalam browser. 1367 01:04:03,920 --> 01:04:07,590 Dan mengambil menebak apa ini akan lakukan, meskipun beberapa sintaks 1368 01:04:07,590 --> 01:04:09,338 di sini adalah baru. 1369 01:04:09,338 --> 01:04:11,760 >> AUDIENCE: Menyapa siapapun. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID Malan: Ini akan menyapa kepada siapa pun yang mengunjungi halaman ini. 1371 01:04:14,020 --> 01:04:15,120 Jadi bagaimana? 1372 01:04:15,120 --> 01:04:18,070 >> Jadi pemberitahuan, ternyata dalam JavaScript ada fungsi alert (). 1373 01:04:18,070 --> 01:04:22,840 Ini adalah sangat semacam fungsi sedih bahwa benar-benar hanya cenderung mengganggu pengguna. 1374 01:04:22,840 --> 01:04:25,440 Ini bukan yang Anda benar-benar harus menggunakan biasanya, tapi itu cepat dan kotor 1375 01:04:25,440 --> 01:04:27,710 cara semacam mencetak sesuatu ke pengguna grafis 1376 01:04:27,710 --> 01:04:29,180 antarmuka, seperti browser. 1377 01:04:29,180 --> 01:04:31,400 Perhatikan di sini bahwa saya punya string dalam tanda kutip tunggal. 1378 01:04:31,400 --> 01:04:36,010 Ternyata tidak seperti C, JavaScript dapat benar-benar telah Anda gunakan tunggal 1379 01:04:36,010 --> 01:04:38,730 kutipan, dan terus terang itu hanya jenis konvensi gaya antara 1380 01:04:38,730 --> 01:04:41,180 Programmer JavaScript menggunakan tanda kutip tunggal. 1381 01:04:41,180 --> 01:04:43,750 PHP, mereka benar-benar memiliki sedikit arti yang berbeda. 1382 01:04:43,750 --> 01:04:45,810 Tetapi untuk sekarang, hanya tahu bahwa itulah satu-satunya alasan. 1383 01:04:45,810 --> 01:04:49,270 Konvensi dalam JavaScript yang sering menggunakan tanda kutip tunggal, tetapi kita bisa menggunakan 1384 01:04:49,270 --> 01:04:50,950 tanda kutip ganda di kedua tempat juga. 1385 01:04:50,950 --> 01:04:52,610 >> Jadi ini menarik. 1386 01:04:52,610 --> 01:04:56,430 Ingat terakhir kali kita punya gambar di layar yang menarik pohon 1387 01:04:56,430 --> 01:04:59,720 di mana Anda memiliki node HTML, dan kepala node, dan node tubuh, 1388 01:04:59,720 --> 01:05:00,800 dan kemudian beberapa teks. 1389 01:05:00,800 --> 01:05:04,700 Tapi ada satu node khusus di paling atas yang saya disebut dokumen. 1390 01:05:04,700 --> 01:05:08,260 Nah, ternyata dalam JavaScript, setiap kali Anda menulis sebuah program dalam JavaScript 1391 01:05:08,260 --> 01:05:11,040 dalam browser, Anda memiliki akses ke variabel global khusus. 1392 01:05:11,040 --> 01:05:14,130 Semangat yang sama superglobals PHP, satu ini disebut dalam 1393 01:05:14,130 --> 01:05:16,050 semua dokumen huruf kecil. 1394 01:05:16,050 --> 01:05:21,480 >> Ini seperti struct, tapi struct ini juga memiliki fungsi di dalamnya. 1395 01:05:21,480 --> 01:05:23,790 Jadi struct C hanya memiliki data yang biasanya. 1396 01:05:23,790 --> 01:05:29,060 Tapi objek JavaScript karena ini secara teknis juga memiliki fungsi, 1397 01:05:29,060 --> 01:05:31,830 atau dikenal sebagai metode, di dalamnya. 1398 01:05:31,830 --> 01:05:35,750 Dan Anda dapat memanggil fungsi dalam objek ini secara harfiah melakukan nya 1399 01:05:35,750 --> 01:05:39,610 nama, dot, dan kemudian nama fungsi, atau lagi metode. 1400 01:05:39,610 --> 01:05:41,160 Ini hanya sinonim, benar-benar. 1401 01:05:41,160 --> 01:05:42,450 >> Dan apa fungsi ini lakukan? 1402 01:05:42,450 --> 01:05:43,840 Anda dapat jenis menebak dari namanya. 1403 01:05:43,840 --> 01:05:45,590 Dapatkan elemen dengan ID. 1404 01:05:45,590 --> 01:05:50,040 Jadi ini akan mencari halaman web, mencari pohon itu, mencari 1405 01:05:50,040 --> 01:05:55,210 apapun node, elemen AKA, memiliki ID unik kutipan nama tanda kutip. 1406 01:05:55,210 --> 01:05:56,560 Lalu apa yang akan saya lakukan? 1407 01:05:56,560 --> 01:06:00,350 Aku akan mendapatkan nilai dalam bahwa node di pohon, dan aku akan 1408 01:06:00,350 --> 01:06:02,580 entah bagaimana menyapa nama itu. 1409 01:06:02,580 --> 01:06:05,360 >> Jadi mengambil menebak, meskipun kita sudah tidak melihat ini belum, apa yang ditambah 1410 01:06:05,360 --> 01:06:07,396 simbol maksud di sini dan di sini mungkin? 1411 01:06:07,396 --> 01:06:08,230 >> AUDIENCE: concatenate. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID Malan: concatenate. 1413 01:06:09,220 --> 01:06:11,290 Benar, dan ini hanya semacam keputusan desain 1414 01:06:11,290 --> 01:06:12,280 orang membuat tahun yang lalu. 1415 01:06:12,280 --> 01:06:15,190 Di PHP, Anda menggabungkan hal dengan titik-titik. 1416 01:06:15,190 --> 01:06:18,800 Dalam C, Anda melompat melalui beberapa simpai dan memanggil fungsi seperti strcopy () atau 1417 01:06:18,800 --> 01:06:20,600 strcat () atau fungsi seperti lainnya. 1418 01:06:20,600 --> 01:06:22,060 Tapi dalam JavaScript, Anda menggunakan plus. 1419 01:06:22,060 --> 01:06:24,770 Jadi ini hanya concatenating tiga senar - 1420 01:06:24,770 --> 01:06:27,850 halo, nama, dan kemudian tanda seru. 1421 01:06:27,850 --> 01:06:30,390 >> Jadi kapan dan mengapa fungsi ini disebut meskipun? 1422 01:06:30,390 --> 01:06:33,150 Nah, mengambil menebak dari HTML di bagian bawah. 1423 01:06:33,150 --> 01:06:35,810 Mengapa menyapa () disebut, atau kapan? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Rupanya, seperti terbaik yang bisa saya katakan, pada submit, ketika formulir ini diajukan, 1426 01:06:44,030 --> 01:06:47,200 Aku akan melakukan apa pun yang dalam kutipan ini. 1427 01:06:47,200 --> 01:06:50,900 Dan secara khusus, aku akan menelepon menyapa () dan kemudian kembali palsu. 1428 01:06:50,900 --> 01:06:53,090 >> Nah, mari kita lihat apa net Efek sini pertama. 1429 01:06:53,090 --> 01:06:58,290 Jadi biarkan aku pergi ke depan dan ketik dalam, katakanlah, Loren, Submit. 1430 01:06:58,290 --> 01:06:59,440 Hello Loren. 1431 01:06:59,440 --> 01:07:02,990 Mari kita lihat apakah mungkin ini hanya implementasi beruntung. 1432 01:07:02,990 --> 01:07:03,200 Tidak. 1433 01:07:03,200 --> 01:07:05,990 Jadi itu mengetik apapun nama saya benar-benar diletakkan di sana. 1434 01:07:05,990 --> 01:07:07,970 >> Tapi perhatikan apa yang tidak berubah. 1435 01:07:07,970 --> 01:07:10,360 URL masih dom-0.html. 1436 01:07:10,360 --> 01:07:11,820 Tidak ada register.php. 1437 01:07:11,820 --> 01:07:13,110 Tidak ada file kedua. 1438 01:07:13,110 --> 01:07:14,930 Tidak ada atribut aksi. 1439 01:07:14,930 --> 01:07:19,720 Jadi apa ini kembali palsu mungkin lakukan? 1440 01:07:19,720 --> 01:07:23,660 Mengapa saya memanggil menyapa () dan kemudian kembali palsu mungkin? 1441 01:07:23,660 --> 01:07:26,420 Apa yang biasanya terjadi bila Anda mengklik Kirim pada formulir yang bahkan kita miliki 1442 01:07:26,420 --> 01:07:27,854 terlihat dalam seminggu terakhir? 1443 01:07:27,854 --> 01:07:29,900 >> AUDIENCE: [Tak terdengar]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID Malan: It goes suatu tempat, kan? 1445 01:07:30,860 --> 01:07:32,720 It goes beberapa URL tujuan. 1446 01:07:32,720 --> 01:07:34,120 Tapi aku tidak ingin hal itu terjadi di sini. 1447 01:07:34,120 --> 01:07:37,620 Saya ingin halaman web saya harus benar-benar dinamis seperti Gmail, di mana setelah Anda 1448 01:07:37,620 --> 01:07:38,650 ada, Anda tinggal di sana. 1449 01:07:38,650 --> 01:07:42,900 URL tidak berubah dengan cara yang menunjukkan seluruh halaman reload. 1450 01:07:42,900 --> 01:07:46,680 Sebaliknya, saya hanya ingin mengubah sesuatu seperti mencetak sesuatu 1451 01:07:46,680 --> 01:07:48,320 di sini di layar. 1452 01:07:48,320 --> 01:07:49,630 >> Yah biarkan aku membersihkan ini up sedikit. 1453 01:07:49,630 --> 01:07:55,370 Mari saya membuka dom-tidak 0, tetapi biarkan aku membuka dom-2. 1454 01:07:55,370 --> 01:07:57,350 Hanya jadi Anda telah melihat beberapa sintaks di sini. 1455 01:07:57,350 --> 01:08:02,080 >> Ternyata apa yang kita hanya tidak menggunakan baku JavaScript. 1456 01:08:02,080 --> 01:08:04,420 Jadi ini benar-benar bahasa JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Beberapa dari Anda mungkin tahu perpustakaan disebut jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> Jadi jQuery tidak sama hal seperti JavaScript. 1459 01:08:09,980 --> 01:08:14,110 Ini hanya sebuah perpustakaan yang benar-benar cerdas Orang menulis dan dipopulerkan seperti 1460 01:08:14,110 --> 01:08:18,100 bahwa hampir semua orang di dunia sekarang menggunakan jQuery ketika menggunakan JavaScript. 1461 01:08:18,100 --> 01:08:20,890 Dan pada pandangan pertama, jujur, terlihat sedikit lebih samar. 1462 01:08:20,890 --> 01:08:24,990 Tapi Anda akan menemukan, terutama jika Anda pergi ada untuk proyek akhir Anda dengan web 1463 01:08:24,990 --> 01:08:29,029 pengembangan, Anda akan menemukan bahwa ini membersihkan hal-hal dan menghemat cukup 1464 01:08:29,029 --> 01:08:30,229 beberapa baris kode. 1465 01:08:30,229 --> 01:08:33,189 >> Jadi mari kita melirik bagaimana Bentuk ini bekerja. 1466 01:08:33,189 --> 01:08:35,664 Perhatikan apa yang saya menghapus rupanya dari HTML saya? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Tidak ada di submit handler sehingga untuk berbicara. 1469 01:08:40,630 --> 01:08:41,470 Tidak ada atribut. 1470 01:08:41,470 --> 01:08:43,359 Karena Anda tahu, apa yang Aku tidak benar-benar suka? 1471 01:08:43,359 --> 01:08:45,640 Saya merasa seperti kita jatuh ke kebiasaan lama di sana. 1472 01:08:45,640 --> 01:08:49,340 Sama seperti itu mulai merasa ceroboh untuk berbaur baik dengan CSS 1473 01:08:49,340 --> 01:08:52,149 HTML, karena kau jenis melemparkan bahasa yang berbeda di seluruh 1474 01:08:52,149 --> 01:08:56,180 tempat, sama hal ini bisa mulai merasa seperti jalan yang buruk untuk turun di mana 1475 01:08:56,180 --> 01:09:01,069 Aku menempatkan kode JavaScript dalam saya HTML daripada anjak keluar. 1476 01:09:01,069 --> 01:09:02,279 >> Jadi itulah pelajaran di sini. 1477 01:09:02,279 --> 01:09:05,080 Dalam dom-2.html, aku anjak keluar. 1478 01:09:05,080 --> 01:09:07,399 Dan aku melakukan hal-hal yang sedikit berbeda. 1479 01:09:07,399 --> 01:09:09,630 Untuk saat ini, aku akan melambaikan tangan saya apa ini benar-benar 1480 01:09:09,630 --> 01:09:10,590 bawah tenda. 1481 01:09:10,590 --> 01:09:14,210 Tapi untuk saat ini menganggap bahwa yang pertama kali baris kode di perpustakaan ini 1482 01:09:14,210 --> 01:09:18,170 disebut jQuery hanya berarti ketika dokumen siap, lakukan langkah berikut. 1483 01:09:18,170 --> 01:09:20,080 >> Karena halaman web dapat mengambil beberapa waktu untuk memuat. 1484 01:09:20,080 --> 01:09:23,029 Anda mungkin pada internet lambat koneksi, dan mungkin akan berputar 1485 01:09:23,029 --> 01:09:25,290 dan berputar, dan akhirnya itu dimuat. 1486 01:09:25,290 --> 01:09:29,060 Itu baris kode hanya mengatakan menunggu sampai seluruh halaman siap, dokumen 1487 01:09:29,060 --> 01:09:31,189 siap, sebelum mengeksekusi kode ini. 1488 01:09:31,189 --> 01:09:34,390 >> Dan sekarang pemberitahuan, ini mungkin yang paling berguna pertama 1489 01:09:34,390 --> 01:09:36,189 mengambil dari jQuery. 1490 01:09:36,189 --> 01:09:42,140 Baris ini di sini sangat mirip dalam roh ini lebih lama line di sini. 1491 01:09:42,140 --> 01:09:46,920 Sedangkan dalam kode JavaScript baku, ada ada sebuah obyek global dokumen yang 1492 01:09:46,920 --> 01:09:50,460 memiliki fungsi yang disebut getElementById (), orang-orang yang menulis 1493 01:09:50,460 --> 01:09:55,720 jQuery disederhanakan bahwa hanya mengatakan tanda dolar, dan kemudian dalam 1494 01:09:55,720 --> 01:10:00,250 kurung menempatkan dua tanda kutip, dan kemudian menaruh simbol hash diikuti oleh 1495 01:10:00,250 --> 01:10:02,250 ID unik Anda ingin mengambil. 1496 01:10:02,250 --> 01:10:06,170 Jadi ini adalah setara dengan document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Sementara itu,. Mengirimkan hanya berarti pada pengajuan bentuk apapun Anda 1498 01:10:11,090 --> 01:10:14,240 mengacu pada sebelah kiri, pergi depan dan melaksanakan ini. 1499 01:10:14,240 --> 01:10:16,600 Tapi ini sekarang rasa ingin tahu juga. 1500 01:10:16,600 --> 01:10:19,560 Apa yang aneh tentang apa Aku sudah disorot di sini? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Tidak hanya itu jenis sintaksis baru, ada juga sesuatu yang hilang. 1503 01:10:28,594 --> 01:10:29,558 >> AUDIENCE: Ini hanya disebut fungsi? 1504 01:10:29,558 --> 01:10:31,970 Itu tidak disebut waspada? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID Malan: Ya. 1506 01:10:32,440 --> 01:10:35,450 Nah, jadi waspada () turun di sini, untuk menjadi adil. 1507 01:10:35,450 --> 01:10:39,520 Tetapi tidak ada disebutkan tentang nama, seperti Anda tahu, foo atau 1508 01:10:39,520 --> 01:10:40,980 sesuatu di sini. 1509 01:10:40,980 --> 01:10:43,830 Dan memang, ini adalah salah satu fitur JavaScript yang cukup 1510 01:10:43,830 --> 01:10:45,370 kuat, tetapi juga cukup baru. 1511 01:10:45,370 --> 01:10:47,460 Dan PHP sebenarnya memiliki ini juga. 1512 01:10:47,460 --> 01:10:49,500 >> Biarkan aku pergi ke depan dan melakukan sesuatu yang nyata cepat. 1513 01:10:49,500 --> 01:10:52,030 Biarkan aku pergi ke depan dan menempatkan hal ini di sini. 1514 01:10:52,030 --> 01:10:52,600 Biarkan aku melakukan ini. 1515 01:10:52,600 --> 01:10:53,690 Fungsi. 1516 01:10:53,690 --> 01:10:56,455 Mari kita sebut pawang ini (). 1517 01:10:56,455 --> 01:10:58,290 Sebuah fungsi pengendali sehingga untuk berbicara. 1518 01:10:58,290 --> 01:11:00,110 Sesuatu yang menangani beberapa operasi. 1519 01:11:00,110 --> 01:11:02,700 Biarkan aku membersihkan lekukan saya. 1520 01:11:02,700 --> 01:11:04,380 Dan menempatkan ini di sini. 1521 01:11:04,380 --> 01:11:06,090 Dan letakkan itu di sini. 1522 01:11:06,090 --> 01:11:06,470 Yep. 1523 01:11:06,470 --> 01:11:07,060 OK. 1524 01:11:07,060 --> 01:11:10,300 >> Jadi sekarang aku punya fungsi yang disebut handler () bahwa saya tidak benar-benar tahu 1525 01:11:10,300 --> 01:11:10,890 apa yang belum. 1526 01:11:10,890 --> 01:11:12,710 Itu hanya masih memiliki hal itu. 1527 01:11:12,710 --> 01:11:13,900 Whoops. 1528 01:11:13,900 --> 01:11:15,820 Mengambil terlalu banyak. 1529 01:11:15,820 --> 01:11:18,490 Mari kita lakukan ini. 1530 01:11:18,490 --> 01:11:18,990 Baik. 1531 01:11:18,990 --> 01:11:20,240 Maaf. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Baik. 1534 01:11:23,690 --> 01:11:24,720 Biarkan aku melakukan ini. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Itu terlihat bagus dan lurus maju sekarang. 1537 01:11:27,040 --> 01:11:29,090 Biarkan aku melakukan ini. 1538 01:11:29,090 --> 01:11:29,860 Lakukan ini. 1539 01:11:29,860 --> 01:11:30,950 Dan OK. 1540 01:11:30,950 --> 01:11:33,080 Jadi sekarang, mari kita menempatkan ini di sini. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Tidak ada lagi program on the fly. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> Jadi sekarang, mari kita kembali ke mana cerita dimulai. 1545 01:11:40,000 --> 01:11:43,530 Sebelumnya, saya mengatakan bahwa baris ini di sini berarti ketika dokumen siap, pergi 1546 01:11:43,530 --> 01:11:44,380 ke depan dan melakukan hal ini. 1547 01:11:44,380 --> 01:11:45,660 Apa yang ingin saya lakukan? 1548 01:11:45,660 --> 01:11:49,070 Nah khusus, saya ingin pergi ke depan dan melakukan hal berikut. 1549 01:11:49,070 --> 01:11:53,700 Jalankan baris kode, dan kemudian apa yang saya ingin Anda lakukan adalah menyebutnya 1550 01:11:53,700 --> 01:11:56,370 berfungsi ketika formulir dikirimkan. 1551 01:11:56,370 --> 01:11:57,730 >> Sekarang ini adalah apa yang menarik. 1552 01:11:57,730 --> 01:11:59,170 Ini bukan fungsi itu sendiri. 1553 01:11:59,170 --> 01:12:02,540 Perhatikan saya tidak menempatkan tanda kurung di sini dengan cara biasa. 1554 01:12:02,540 --> 01:12:06,800 Aku benar-benar melewati fungsi yang disebut handler () ke fungsi lain 1555 01:12:06,800 --> 01:12:10,800 disebut submit () sebagai argumen meskipun itu seperti variabel. 1556 01:12:10,800 --> 01:12:14,290 Dan ini adalah salah satu fitur dari JavaScript, adalah fungsi sendiri 1557 01:12:14,290 --> 01:12:15,710 benar-benar hanya objek. 1558 01:12:15,710 --> 01:12:18,350 Bahkan, mereka benar-benar hanya variabel dari beberapa macam. 1559 01:12:18,350 --> 01:12:21,340 Dan jika nama fungsi tersebut handler (), tidak ada alasan aku tidak bisa 1560 01:12:21,340 --> 01:12:23,390 lulus sebagai argumen di sini. 1561 01:12:23,390 --> 01:12:27,530 Dan ini berarti ketika form dengan ID dari demo 1562 01:12:27,530 --> 01:12:29,320 disampaikan, memanggil fungsi ini. 1563 01:12:29,320 --> 01:12:32,770 >> Tapi sekarang jika saya membatalkan semua ini, mengapa saat itu aku mungkin melakukan 1564 01:12:32,770 --> 01:12:34,850 ini beberapa saat yang lalu? 1565 01:12:34,850 --> 01:12:36,840 Nah, ini adalah fungsi anonim. 1566 01:12:36,840 --> 01:12:41,080 Karena terus terang, saya menyadari mengapa saya repot-repot buang waktu mendeklarasikan 1567 01:12:41,080 --> 01:12:45,540 fungsi yang disebut handler () hanya untuk memanggil dalam satu dan hanya satu tempat? 1568 01:12:45,540 --> 01:12:48,640 Jika saya tidak perlu nama, dan aku tidak perlu menyebutnya lebih dari satu tempat, 1569 01:12:48,640 --> 01:12:51,200 mari kita melaksanakan fungsi tepat di mana saya membutuhkannya. 1570 01:12:51,200 --> 01:12:55,190 Maka JavaScript dan PHP mendukung apa disebut fungsi anonim yang 1571 01:12:55,190 --> 01:12:57,900 memungkinkan saya untuk melakukan hal itu di sini. 1572 01:12:57,900 --> 01:12:59,570 >> Tapi kami hanya menggaruk permukaan. 1573 01:12:59,570 --> 01:13:02,430 Mari menggoda dengan hanya beberapa contoh akhir di sini. 1574 01:13:02,430 --> 01:13:04,600 >> Jika saya pergi ke quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Perhatikan bahwa ini sebenarnya PHP fungsi, program PHP, yang saya tulis 1577 01:13:11,870 --> 01:13:15,270 yang mengharapkan parameter HTTP yang disebut simbol, dan saya bisa lulus dalam 1578 01:13:15,270 --> 01:13:16,730 nilai seperti FB. 1579 01:13:16,730 --> 01:13:20,010 Dan jika kita benar-benar melihat sumber kode, ini query website gratis 1580 01:13:20,010 --> 01:13:23,680 disebut Yahoo Finance, seperti p-set tujuh, dan itu kembali ke saya 1581 01:13:23,680 --> 01:13:26,580 sesuatu rupanya format yang dikenal adalah JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 Ini hanya sebuah objek. 1584 01:13:28,810 --> 01:13:32,500 Perhatikan kurung kurawal, tanda kutip, usus, dan koma. 1585 01:13:32,500 --> 01:13:34,720 >> Sekarang sementara itu, ini cukup keren. 1586 01:13:34,720 --> 01:13:38,520 Karena aku mungkin dapat menggunakan program yang bahasa untuk menghasilkan URL 1587 01:13:38,520 --> 01:13:40,370 yang terlihat seperti ini secara dinamis, benar? 1588 01:13:40,370 --> 01:13:43,340 Saya dapat mengubahnya ke Google dan kembali Google 1589 01:13:43,340 --> 01:13:47,930 harga saham dari $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Jadi mari kita lihat jika kita tidak dapat menggunakan ini sekarang. 1591 01:13:49,640 --> 01:13:56,590 >> Biarkan aku pergi ke ajax-0 di sini, yang terlihat seperti berikut ini. 1592 01:13:56,590 --> 01:13:59,750 Ini hanya situs Web yang memiliki bentuk dengan tombol. 1593 01:13:59,750 --> 01:14:05,860 Biarkan aku di sini pergi ke depan dan ketik YHOO untuk simbol saham Yahoo, klik Get 1594 01:14:05,860 --> 01:14:10,530 Kutipan, dan sekarang melihat aku sudah peringatan dengan 32.86. 1595 01:14:10,530 --> 01:14:14,050 >> Biarkan aku benar-benar pergi ke versi lebih bagus halaman ini, versi dua, dan 1596 01:14:14,050 --> 01:14:17,530 ketik katakanlah Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Dapatkan Penawaran. 1598 01:14:18,410 --> 01:14:19,850 Dan sekarang perhatikan, tidak ada peringatan. 1599 01:14:19,850 --> 01:14:22,770 Perhatikan di mana ia mengatakan harga akan ditentukan? 1600 01:14:22,770 --> 01:14:27,060 Ada yang paling sederhana dari contoh yang mengisyaratkan apa Gchat, dan Facebook 1601 01:14:27,060 --> 01:14:30,070 Chatting, dan Gmail, dan semacamnya lainnya website lakukan dengan benar-benar 1602 01:14:30,070 --> 01:14:31,290 mengubah halaman web. 1603 01:14:31,290 --> 01:14:31,800 >> Perhatikan ini. 1604 01:14:31,800 --> 01:14:33,120 Biarkan aku kembali halaman tersebut. 1605 01:14:33,120 --> 01:14:35,080 Mari saya membuka Inspektur Chrome. 1606 01:14:35,080 --> 01:14:36,890 Biarkan aku pergi ke elemen tab di sini. 1607 01:14:36,890 --> 01:14:42,310 Sekarang perhatikan jika saya zoom in di sini dan membuka hal ini, perhatikan bahwa ini adalah saya 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - model objek dokumen saya. 1609 01:14:44,500 --> 01:14:45,920 Ini adalah HTML saya. 1610 01:14:45,920 --> 01:14:48,750 Tapi sekarang perhatikan, meskipun itu akan menjadi agak sulit untuk melihat dengan kedua 1611 01:14:48,750 --> 01:14:52,080 tempat sekaligus, jika saya ketik di FB di sini, menonton bagian bawah 1612 01:14:52,080 --> 01:14:54,110 layar saja. 1613 01:14:54,110 --> 01:14:57,720 >> Ini benar-benar mengubah HTML saya on the fly. 1614 01:14:57,720 --> 01:15:01,670 Dan itu melakukan hal ini cukup sederhana dengan melakukan sesuatu seperti ini. 1615 01:15:01,670 --> 01:15:06,800 Jika saya membuka ajax-2, pemberitahuan pelaksanaan sesuatu yang seksi 1616 01:15:06,800 --> 01:15:09,560 bahwa, meskipun itu sangat jelek, tapi canggih seperti yang 1617 01:15:09,560 --> 01:15:11,910 fungsional, memiliki beberapa HTML di bagian bawah. 1618 01:15:11,910 --> 01:15:13,810 Tapi perhatikan aku digunakan untuk menandai. 1619 01:15:13,810 --> 01:15:16,640 Kami sudah tidak menggunakan ini sebelumnya, tapi ini adalah seperti, tetapi tidak memaksa 1620 01:15:16,640 --> 01:15:17,840 segala sesuatu ke baris baru. 1621 01:15:17,840 --> 01:15:20,830 Itu hanya membuat wilayah persegi panjang pada baris yang sama dasarnya. 1622 01:15:20,830 --> 01:15:22,870 >> Perhatikan bahwa saya memberikannya ID harga. 1623 01:15:22,870 --> 01:15:26,800 Dan ternyata dengan menggunakan yang sama JavaScript perpustakaan, saya memiliki fungsi 1624 01:15:26,800 --> 01:15:30,440 disebut quote () yang dipanggil setiap kali formulir tersebut diajukan. 1625 01:15:30,440 --> 01:15:31,800 Dan apa yang saya lakukan adalah ini. 1626 01:15:31,800 --> 01:15:35,730 Saya menyatakan variabel dalam JavaScript disebut url, menyimpan nilai 1627 01:15:35,730 --> 01:15:38,650 quote.php? simbol =. 1628 01:15:38,650 --> 01:15:44,220 Dengan kata lain, aku sendiri mulai untuk mempersiapkan permintaan HTTP, dan kemudian 1629 01:15:44,220 --> 01:15:49,250 Saya concatenating ke bahwa dengan plus apapun elemen dengan ID yang 1630 01:15:49,250 --> 01:15:54,190 simbol adalah, pemberitahuan adalah bahwa text field yang tepat di sini. 1631 01:15:54,190 --> 01:15:56,630 Jadi sama seperti kita punya bentuk di masa lalu. 1632 01:15:56,630 --> 01:16:01,450 >> Dan kemudian ternyata di jQuery, jika Anda menelepon. val (), yang menyebut dari val a 1633 01:16:01,450 --> 01:16:05,900 fungsi, fungsi nilai, yang mendapat apa pun pengguna telah diketik masuk 1634 01:16:05,900 --> 01:16:08,920 Dan kemudian semua lalu lintas jaringan yang terjadi adalah ini. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> Dan sebagai samping, tanda dolar hanya notasi singkat. 1637 01:16:13,720 --> 01:16:16,860 Ini benar-benar jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Dapatkan saya ke JSON dari URL ini, dan ketika permintaan datang kembali, menyebutnya 1639 01:16:21,520 --> 01:16:26,550 fungsi dan lulus sebagai argumen apa kembali dari server. 1640 01:16:26,550 --> 01:16:31,205 >> Jadi dengan kata lain, jika saya kembali ke Browser, dan aku kembali ke quote.php, 1641 01:16:31,205 --> 01:16:35,590 apa browser saya lakukan semakin potongan data ini. 1642 01:16:35,590 --> 01:16:38,930 Dan ketika saya pergi ke halaman web di sini, perhatikan jika kita bukannya pergi ke jaringan 1643 01:16:38,930 --> 01:16:43,820 Jenis tab dan jelas itu, dan kemudian di sesuatu seperti GOOG untuk Google dan Dapatkan 1644 01:16:43,820 --> 01:16:46,340 Kutipan, perhatikan halaman tidak berubah. 1645 01:16:46,340 --> 01:16:50,990 Tapi permintaan HTTP dibuat, dan apa datang kembali ke sini jika kita melihat 1646 01:16:50,990 --> 01:16:56,130 respon sejumlah besar JSON bahwa kita diakses akhirnya dengan 1647 01:16:56,130 --> 01:16:58,070 ini garis sederhana di sini. 1648 01:16:58,070 --> 01:17:00,150 >> Data yang didapat dari server. 1649 01:17:00,150 --> 01:17:02,120 Harga merupakan nama kunci yang saya peduli. 1650 01:17:02,120 --> 01:17:05,230 Jadi data.price memberi saya itu. 1651 01:17:05,230 --> 01:17:07,540 >> Sekarang sementara itu, dan ini adalah contoh terakhir. 1652 01:17:07,540 --> 01:17:09,280 Anda dapat melakukan lebih banyak lagi dengan halaman. 1653 01:17:09,280 --> 01:17:12,440 Satu sebenarnya, baik dua. 1654 01:17:12,440 --> 01:17:14,780 Kita bisa membawa kembali tag, jika Anda ingat ini. 1655 01:17:14,780 --> 01:17:15,850 Itu JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Kita bisa melakukan itu. 1657 01:17:17,110 --> 01:17:17,690 Sangat menarik. 1658 01:17:17,690 --> 01:17:18,800 Kami akan meninggalkan bahwa sebagai Cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Tapi yang lebih menggairahkan, Anda dapat melakukan hal-hal seperti ini. 1660 01:17:21,590 --> 01:17:25,940 Jika saya pergi ke geolocation-1, ternyata bahwa Chrome tahu bahwa kita berada di 1661 01:17:25,940 --> 01:17:30,672 lintang bujur 42.37. -71,10. 1662 01:17:30,672 --> 01:17:32,940 Jadi ada lebih ada Anda inginkan. 1663 01:17:32,940 --> 01:17:34,290 Tetapi lebih pada minggu depan. 1664 01:17:34,290 --> 01:17:35,540 Sampai jumpa hari Senin. 1665 01:17:35,540 --> 01:17:37,558