HANNAH Blumberg: Hi semua orang. Kami akan memulakan hanya beberapa minit awal kerana kita mempunyai banyak keseluruhan bahan untuk mendapatkan melalui. Saya Hannah. Saya TF a. Maria akan menyertai kami dalam hanya beberapa minit. Beliau mengajar seksyen di depan. Saya mengajar bahagian kanan selepas itu, jadi kita akan untuk memastikan ia kepada jam setengah. Jadi seperti yang anda akan lihat di sini, kami mempunyai cukup beberapa topik yang kita perlukan untuk mendapatkan melalui, jadi kami akan pergi sedikit cepat. Tetapi jika pada bila-bila kita mengatakan sesuatu terlalu cepat atau anda tidak faham, berasa bebas untuk mengganggu dengan soalan. Kami mahu menjadi mampu untuk membuat ini sesi berguna mengkaji kepada anda semua yang mungkin. Awesome. Jadi mari kita melompat masuk dengan beberapa topik yang kita benar-benar sangat, sangat ringkas dilindungi untuk kuiz 0 dalam sesi kajian kuiz 0. Jadi bermula dengan senarai berkaitan. Jadi pastikan anda mempunyai pengetahuan asas mengenai senarai berkaitan dan selesa melakukan beberapa operasi asas. Jadi hanya untuk mengkaji semula, yang dikaitkan Senarai ini adalah lebih baik daripada tatasusunan kerana mereka boleh berkembang secara dinamik. Oleh itu, kita mempunyai bahawa kelebihan yang besar. Kami telah melihat mereka digunakan dalam jadual hash apabila kita tidak tahu berapa ramai perkara yang kita akan mahu untuk memasukkan ke dalam struktur data kami. Malangnya, kita mempunyai keping senarai berkaitan di seluruh ingatan, jadi kita tidak semestinya dapat melakukan akses masa yang berterusan kepada mana-mana elemen dalam senarai berkaitan. Dalam usaha untuk mencari yang elemen tertentu, kita perlu melelar semua cara dari awal. Jadi ingat bahawa kebanyakan operasi asas adalah omega 1. Jadi masukkan hanya akan mengambil 1. Padam akan mengambil n kerana kita perlu pergi merasa dari senarai. Dan carian boleh mengambil, paling teruk, n. Kita tidak boleh melakukan sesuatu seperti carian binari dalam senarai berpaut kerana kita tidak boleh hanya rawak melompat ke tengah. Sejuk. Awesome. Sedikit susunan. Ini, sekali lagi, datang pada kuiz 0, jadi anda harus super selesa dengannya. Tetapi bagi susunan, kami meminta anda ingat timbunan dulang. Dan ia akan menjadi yang pertama dalam, lepas keluar. Oleh itu, kita menyimpulkan perkara sehingga dalam timbunan, dan kemudian jika kita cuba untuk mengambil sesuatu off-- yang kita panggil pop off stack-- kita terkeluar atas. Dan jika kita mahu meletakkan sesuatu dalam timbunan, kita panggil ia menolak. Jadi ia sentiasa akan membesar dari bawah seperti timbunan dulang. Awesome. Kami telah susunan dilihat dilaksanakan dengan kedua-dua senarai berkaitan dan array. Jika anda melaksanakan dengan pameran, anda mahu memastikan untuk mengesan kedua-dua saiz dan kapasiti. Jadi saiz akan menjadi arus beberapa perkara dalam timbunan anda, sedangkan kapasiti adalah jumlah perkara yang anda boleh simpan dalam timbunan anda. Sejuk. Sangat begitu juga, kita perlu beratur. Dalam kes ini, bukan berfikir tentang timbunan dulang, fikirkan satu barisan. Ini akan menjadi yang terdahulu, keluar dahulu. Jadi, jika anda beratur untuk sesuatu di kedai, kami berharap bahawa orang yang pertama dalam line akan diberi pertolongan pertama. Daripada mengatakan tolak dan pop seperti yang kita lakukan untuk timbunan, kita hanya mengatakan enqueue dan dequeue. Dan sekali lagi, jika anda melaksanakan ini dengan pelbagai, kita perlu untuk mengesan bukan sahaja saiz dan keupayaan, tetapi juga kepala, yang akan menjadi hadapan barisan kami. Sejuk. Sebarang pertanyaan mengenai apa-apa itu? Awesome. Bergerak kanan bersama-sama. OK, jadual hash. Berikut adalah di mana ia mula mendapatkan benar-benar menarik. Jadi jadual hash adalah satu pelaksanaan daripada pelbagai bersekutu. Jadi, pada asasnya apa yang berlaku adalah kita mempunyai semua input ini, dan kami memberikan kepada hash fungsi yang mengatakan, OK, ini adalah di mana dalam jadual hash ia tergolong. Jadi fungsi hash yang paling mudah yang kita lihat hanya mengatakan, OK, andaikan kita mahu meletakkan tali dalam jadual hash kami. Dan idea yang benar-benar mudah mungkin untuk mengatakan, OK, mari kita menyusun oleh Huruf pertama perkataan. Jadi, anda boleh lihat di sini, kami mengambil pisang, kita meletakkan ia melalui fungsi hash, dan ia berkata, hey, yang harus pergi pada indeks 1. Oleh itu, kita pada dasarnya boleh berfikir hash meja sebagai sekumpulan baldi yang berbeza. Dan setiap orang-orang baldi akan untuk memegang ketua senarai berpaut. Dan kepada apa senarai berpaut adalah di mana kita boleh sebenarnya meletakkan keping yang berbeza data. Jadi menyelam lebih sedikit ke dalam fungsi hash, di sini adalah contoh yang saya hanya diterangkan di mana kita hanya berkata, OK, mengambil huruf pertama dengan perkataan ini dan kami akan menyelesaikan ke dalam baldi. Jadi mungkin, akan ada 26 baldi, satu untuk setiap huruf abjad. Mengapa tidak ini fungsi hash yang besar? Apa yang membuatkan ini bukan yang ideal? Yeah. PENONTON: Anda akan untuk mempunyai pertembungan. HANNAH Blumberg: Ya, betul-betul. Anda akan mempunyai pertembungan. Jadi, itu satu perkara. Dan kita akan bercakap tentang bagaimana kita boleh menetapkan perlanggaran dalam masa satu saat. Satu lagi masalah dengan ini fungsi hash tertentu adalah bahawa kami yang berbeza baldi akan menjadi saiz yang cukup drastik berbeza. Kami tahu bahawa ada banyak keseluruhan banyak kata-kata yang bermula dengan A daripada X, supaya kita akan mempunyai sangat baldi tidak seimbang dalam jadual hash kami. Sejuk. Jadi ya, mari kita kembali kepada titik pertembungan. Apa yang kami lakukan jika terdapat perlanggaran? Kami mempunyai pasangan pilihan yang berbeza. Jadi satu, jadi rasa kita cuba untuk meletakkan buah ke dalam jadual hash kami. Dan kita lihat, oh, kita mahu untuk memasukkannya ke dalam indeks 1, tetapi pisang sudah tinggal di sana. Apa yang kita akan lakukan? Kami mempunyai dua pilihan utama. Nombor satu ialah kita boleh berkata, OK, tidak ada ruang dalam indeks 1, tetapi mari kita terus mencari melalui sehingga kita boleh mencari satu lagi tempat yang terbuka. Oleh itu, kita akan berkata, OK, mari kita meletakkan ia di tempat 3. Itulah salah satu pilihan. Yang dinamakan linear menyelesaikan sesuatu. Dan pilihan kedua mengatakan, OK, baik, mari kita membuat setiap daripada kategori ini menjadi ketua senarai berkaitan. Dan ia adalah OK jika ada lagi daripada satu perkara dalam baldi. Kami hanya akan menambah ia ke hadapan. Jadi di sini anda boleh lihat, OK, apabila kita dimasukkan beri, kita hanya mengambil pisang, jenis ditolak ia lebih sedikit dan melemparkan beri di sana. Dan itu juga betul-betul halus. Ini dipanggil chaining berasingan. Anda boleh memikirkan ini sebagai jenis seperti pelbagai kepala ke senarai berkaitan. Sebarang pertanyaan mengenai hash jadual, fungsi hash? Awesome. Pokok-pokok dan cuba. Jadi pokok adalah apa-apa jenis struktur data di mana terdapat beberapa jenis hierarki atau semacam daripada kedudukan ke objek yang berbeza anda. Dan ini akan menjadi super jelas apabila kita melihat contoh. Dan kita melihat try, bersama-sama dengan jadual hash, dalam pset5-- yang, sekali lagi, permainan benar-benar adil untuk ini quiz-- sebagai data lain struktur yang kita boleh menyimpan perkara-perkara yang berbeza. Dalam kes kamus, kita disimpan sekumpulan kata-kata. Jadi mari kita lihat beberapa pokok. Jadi ini adalah satu contoh pokok. Ia mempunyai sejenis struktur, bahawa struktur hierarki, di mana anda boleh melihat bahawa ini nod 1 di bahagian atas mempunyai beberapa jenis pangkat atas 2 dan 3, yang berada di atas 4, 5, dan 6 dan 7, yang berada di atas 8 dan 9. Jadi itu sahaja yang kita maksudkan dengan yang pokok, jadi anda boleh hanya jenis daripada gambar ini dalam kepala anda. Sekarang, kita mempunyai beberapa pokok-pokok yang lebih khusus. Jadi, satu contoh ialah pokok binari. Dan pokok binari adalah, sekali lagi, hanya akan menjadi struktur data dengan sejenis hierarki, tetapi setiap daripada nod boleh mempunyai paling banyak dua orang anak. Itulah di mana binari perkataan berasal dari. Jadi ini adalah satu contoh pokok binari. Jadi itulah kategori yang lebih kecil daripada pokok-pokok. Sekarang mari kita mendapatkan yang lebih khusus dan bercakap tentang binari carian binari trees-- pokok-pokok, dan bukan. Jadi di sini idea itu bukan sahaja tidak setiap nod mempunyai paling banyak dua orang anak, tetapi semua kanak-kanak untuk kiri akan menjadi lebih kecil dan semua anak-anak kepada betul akan menjadi lebih besar. Jadi notis dalam hanya kami pokok binari, ada ada hubungan antara nombor. Tetapi dalam carian binari kami pokok, kita lihat, OK, di sini adalah 44. Dan setiap nombor di sebelah kiri 44 adalah segala-galanya yang lebih kecil dan ke kanan adalah lebih besar. Dan yang memegang di setiap tahap pokok itu. Jadi di sini, ini adalah lebih kecil daripada 22 dan ini adalah lebih besar daripada 22. Dan itulah pokok carian binari. Mengapa kita fikir ia dipanggil pokok carian binari? Apa algoritma ia mengingatkan anda? PENONTON: Carian binari. HANNAH Blumberg: Carian binari. Kerana jika anda sedang mencari satu beberapa tertentu dalam pokok ini, di setiap titik, anda hanya boleh mengetuk separuh dari pokok itu, yang besar. Dan sebagainya yang akan memberi kita sesuatu yang kelihatan seperti carian binari. Ada soalan? Baiklah, sejuk. Baiklah, cuba. Kegemaran semua orang. Jadi ini adalah contoh yang kita telah melihat sekumpulan di dalam kelas. Dan sekali lagi, ini adalah hanya satu lagi cara yang kita boleh menyimpan data. Dalam kes kamus, sekali lagi, ini hanya akan menjadi tali. Jadi mari kita lihat apa ini sebenarnya kelihatan seperti pada tahap yang rendah sedikit. Jadi mari kita lihat pada satu nod di indone a. Dan kita lihat, OK, ada akan menjadi Boolean dan nod, penunjuk kepada nod. Dan kita melihat bahawa Boolean dipanggil is_word. Jadi pada asasnya, itu akan sesuai untuk ini segi tiga kecil yang berkata, jika anda telah mendapat di sini, anda memperolehi perkataan yang lengkap. Kita tahu bahawa "turing" lebih di sini adalah perkataan yang lengkap, sedangkan hanya T-U-R bukan perkataan kerana kita tidak melihat bahawa delta sedikit. Dan itu delta sedikit, sekali lagi, sepadan dengan is_word ini, ini is_word Boolean. Dan kemudian kita mempunyai pelbagai kanak-kanak. Jadi pada setiap peringkat, anda mempunyai nod tertentu, dan titik nod kepada pelbagai keseluruhan abjad. Jadi, anda boleh melihat, sekali lagi, dalam picture-- ini saya akan terus melompat ke belakang dan forth-- yang pelbagai itu di bahagian atas mempunyai sekumpulan yang berbeza nod datang jauh daripada itu. Ia mempunyai 26 atau 27 jika anda mahu untuk memasukkan watak tambahan. Dan ini memberikan kita cara untuk menyimpan data kami dengan cara yang boleh dilihat dengan penuh bahawa anda boleh mendapatkan super cepat. Apakah masa lookup untuk indone satu? PENONTON: [didengar]. HANNAH Blumberg: Ya. Secara teori, ia adalah masa yang berterusan. Ia hanya akan menjadi saiz perkataan yang anda mahu mencari. Walaupun kita menambah zillion yang banyak kata-kata untuk indone kami, ia tidak akan membawa kita apa-apa lagi untuk menentukan jika perkataan yang diberikan di indone itu. Jadi, itu benar-benar baik. PENONTON: Adakah anda hanya memulakan pelbagai itu? Anda terlepas titik atau dua. Bolehkah anda hanya bercakap tentang yang sekejap? HANNAH Blumberg: Pasti, sama sekali. Soalan yang baik. Persoalannya ialah, kita mempunyai pelbagai itulah akan mempunyai nod bintang sebagai berbanding hanya nod, bukan? Sejuk. Jadi di sini apa yang kita katakan adalah pelbagai kami hanya akan menjadi petunjuk untuk tatasusunan lain. Jadi ia essentially-- ia jenis terasa seperti senarai berpaut dengan cara ini di mana setiap kanak-kanak ini hanya menunjukkan nod seterusnya. Dan cara yang kita sebenarnya menentukan, hey, OK, kami telah terlelar melalui keseluruhan yang perkataan, adalah perkataan ini dalam kamus, kita hanya menyemak is_word ini. Persoalan yang besar. Yeah. PENONTON: OK. Oleh itu, apa yang runtime untuk indone itu? HANNAH Blumberg: Pasti. Jadi runtime yang indone untuk lookup akan menjadi masa yang berterusan. Oleh itu, ia hanya akan menjadi Bilangan huruf dalam perkataan. Ia tidak bergantung kepada Saiz kamus atau saiz struktur data. Jadi di sini adalah contoh yang lebih mudah sedikit. Dalam kes ini, anda boleh melihat bahawa kelawar perkataan ada di dalam kamus dan anda mempunyai zoom, tetapi anda tidak mempunyai sesuatu seperti zoo. Bagaimana kita akan membuat zoo? Bagaimana kita menambah zoo kepada kami kamus, untuk indone kita? Yeah. PENONTON: Buat is_word benar untuk [didengar]. HANNAH Blumberg: Baik. Oleh itu, kita akan berkata Z-O-O, dan kemudian kita akan mahu menyemak di luar kotak itu juga. Yang besar. Mari kita bandingkan dengan ringkas cuba berbanding jadual hash. Percubaan yang benar-benar hebat kerana, seperti yang kita berkata, mereka menyediakan malar masa carian. Tetapi kelemahan yang besar ialah mereka humongous. Anda boleh mendapatkan erti kata, walaupun dengan melihat, bahawa ia akan mengambil sejumlah besar memori. Jadi mereka akan menjadi lebih lebih besar daripada jadual hash, tetapi mereka akan memberi kami kali lookup lebih cepat. Jadi itulah jenis anda tradeoff, apa yang anda mahu ketahui sama ada ia adalah kelajuan atau ingatan. Sebarang pertanyaan mengenai apa-apa itu, semua struktur C data. Indah. OKEY. Kami akan bergerak ke sedikit sedikit pembangunan web dengan Maria. MARIA ZLATKOVA: Lovely. OKEY. HANNAH Blumberg: Anda boleh menggunakan komputer riba saya. MARIA ZLATKOVA: Nice. OK, sejuk. Seperti yang kita bergerak sekarang untuk web pembangunan, kami bercakap sedikit mengenai perubahan kebenaran fail dan direktori supaya mereka boleh diakses kepada pengguna lain, kepada dunia, dan supaya kita dapat melihat bagaimana pada dasarnya kita boleh menyampaikan mereka apabila kita membangunkan perkara seperti laman web bahawa kita telah kebanyakannya telah lakukan. Oleh itu, kita melihat arahan chmod itu, yang merupakan mod perubahan, pada asasnya. Itu adalah satu arahan Linux dan ia berubah kebenaran akses objek sistem fail. Dan objek sistem fail adalah hanya direktori, fail, apa-apa yang anda boleh menukar kebenaran. Jadi untuk melihat kebenaran fail, kita taip ls arahan, senarai, l. Dan apabila kita menaip itu, kami biasanya melihat beberapa kebenaran yang kelihatan jenis seperti ini di hadapan nama direktori. Jadi d merujuk kepada direktori. Dan kemudian kita mempunyai tiga kongsi gelap yang pada dasarnya merujuk kepada keizinan untuk memuat pengguna, kumpulan, atau dunia. Jenis-jenis kebenaran yang kita boleh ada bagi ketiga-tiga kumpulan orang adalah sama ada r untuk dibaca, w untuk menulis, dan x untuk melaksanakan. Dan kita boleh mempunyai orang-orang untuk kumpulan dan dunia juga. Perkara yang sukar adalah bahawa kadang-kadang apabila kita taip arahan chmod itu, kita akan menaip beberapa nombor yang terdiri daripada tiga bit. Oleh itu, kita boleh melakukan seperti 777 dan yang pada dasarnya disebut nilai tambah setiap kongsi gelap ini kerana r akan merujuk kepada 4, w akan merujuk kepada 2, dan x akan merujuk kepada 1, jadi apabila ditambah, setiap nombor akan turun kepada Kumulatif kepada nilai terkumpul di antara 0 dan 7. Oleh itu, kita juga boleh mempunyai 0 tanpa kebenaran sama sekali. Dan yang pada dasarnya akan memberi kita keizinan untuk sama ada pengguna, kumpulan, atau dunia. Sebarang pertanyaan mengenai perkara ini setakat ini? PENONTON: Anda berkata membaca adalah 4? MARIA ZLATKOVA: Ya. PENONTON: [didengar]. HANNAH Blumberg: Yup. PENONTON: Dan kemudian dengan menambah semua orang-orang orang lain akan menunjukkan nombor anda. MARIA ZLATKOVA: Ya. Yeah. Ini adalah soalan yang besar. Indah. Seterusnya, kita melompat ke dalam HTML dan sedikit lebih lanjut mengenai pembangunan web. Jadi HTML hanya bermakna Hiperteks Markup Language. Dan itu adalah markup bahasa yang standard yang bahawa ia digunakan untuk membuat laman web. Ia dipanggil bahasa penanda kerana ia tidak benar-benar disusun. Ia tidak mengatakan bagaimana beberapa kod sepatutnya dilaksanakan atau apa-apa seperti itu. Ia hanya menggariskan dan menerangkan bagaimana web yang halaman perlu ditubuhkan dengan setiap unsur-unsur dan bagaimana mereka harus melihat kepada pengguna. Antara tag HTML yang kita pergi ke sana adalah seperti berikut. Semua dokumen HTML kami bermula dengan html DOCTYPE. Kemudian kita sentiasa mempunyai tag html. Kami mempunyai kepala dan badan. Dan ia adalah penting bahawa HTML mempunyai seperti ini struktur bersarang kerana ia sangat jelas. Dan kemudian ia menjadi sangat jelas apabila kita perlu membuka dan sebenarnya tag dekat. Dan kita sentiasa perlu untuk menutup tag yang kami telah dibuka. Dan di sini kita mempunyai beberapa jenis perkara di hadapan yang kita mahu. Oleh itu, kita mempunyai, sebagai contoh, gelaran CS50. Dan kemudian kita benar-benar boleh memautkan lembaran gaya yang menentukan bagaimana kita gaya laman web kami. Itulah CSS. Kami akan pergi ke atasnya di pasangan seterusnya slaid juga. Dalam badan, kita menetapkan beberapa kelas dan ID. Dan sebagai peringatan, sekali lagi, ID adalah unik dan kelas boleh diberikan kepada beberapa item. Dan itu hanya bererti bahawa kita boleh menggunakan kelas dan ID dalam structures-- lain jadi, Sebagai contoh, dalam fail CSS atau gaya sheets-- untuk merujuk kepada unsur-unsur tertentu dan pada dasarnya mengatakan bahawa kita mahu gaya atau mereka bentuk beberapa elemen dalam beberapa cara tertentu. Dan kita merujuk kepada mereka oleh ID dan kelas mereka. Dan kita juga boleh merujuk kepada perkara yang berbeza-lagu juga, tetapi ID dan kelas hanya memberi kita beberapa serba boleh dan apa yang khusus kita ingin merujuk kepada. Jadi hanya satu contoh. Kita boleh, sekali lagi, dalam masa fail CSS di mana kita hendak menentukan beberapa style-- supaya warna, fon, dan barangan seperti bahawa- kita boleh menentukan gaya untuk badan. Supaya akan menentukan ia untuk tag seluruh badan. Tetapi kita juga boleh menentukan gaya untuk #title a. Dan sekali lagi, hashtag merujuk kepada kami ID dan titik merujuk kepada kelas kami. Dan kemudian untuk ubah, kita juga boleh menetapkan beberapa sifat-sifat. Dan sekali lagi, apabila kita kembali, kami terpaksa kami kelas dipanggil maklumat dan tajuk ID kami. Dan kita boleh melihat bahawa kita merujuk kepada mereka oleh #title dan ubah. PENONTON: Adakah anda mengatakan Hashtag [? menerima pakai saya? ?] MARIA ZLATKOVA Maaf? PENONTON: Adakah anda mengatakan Hashtag [? menerima pakai saya? ?] MARIA ZLATKOVA: Hashtag bermakna ID, jadi #title merujuk kepada apa sahaja unsur-unsur mempunyai ID ini dipanggil tajuk. Dan kemudian dot merujuk kepada kelas. Jadi ubah merujuk kepada elemen ini kerana ia mempunyai maklumat kelas. Yup. PENONTON: Mengapa anda membezakan mereka dalam HTML? Mengapa kamu memperkatakan perkara-perkara tertentu yang ID dan perkara-perkara tertentu adalah kelas? MARIA ZLATKOVA: Itu hanya sehingga atasmu, HANNAH Blumberg: Ulangi soalan. MARIA ZLATKOVA: Oh, maaf. Mengapa kita membezakan unsur-unsur tertentu sebagai ID dan unsur-unsur lain seperti kelas? Itu hanya kerana ia adalah benar-benar sering pilihan reka bentuk. Ia memberikan anda banyak serba boleh dalam menjadi dapat berkata saya mahu item ini khusus untuk mempunyai ID ini kerana mereka mahu untuk melakukan banyak perkara-perkara dengan itu, dan saya hanya hendak menentukan gaya, gaya tertentu atau warna apa sahaja untuk barangan tersebut. Dan cara untuk berbuat demikian adalah hanya memberikan ID. Dan kemudian jika saya ingin mempunyai beberapa perkara yang berbeza mempunyai bahawa, daripada berterusan dan menetapkan their-- daripada melakukan ia dengan tag kerana tag yang akan menetapkan sel untuk seluruh tag untuk setiap kali tag yang digunakan, anda boleh menetapkan kelas untuk beberapa item. Dan kemudian hanya mengakses kelas itu dan berkata Saya mahu gaya kelas ini dengan cara itu. Dan sekali lagi, kelas boleh menjadi pelbagai perkara yang berbeza dan ID telah menjadi unik. Soalan yang besar. Apa-apa soalan lain? OK, bagus. Sekali lagi, ini adalah bagaimana pemilih dirujuk dalam CSS, dengan hashtag, dengan titik, atau tanpa apa-apa untuk memberikan gaya beberapa tag, seperti badan. Dan di sini kita mempunyai umum sintaks bagaimana ini dilakukan. Untuk mengulangi beberapa terbaik amalan untuk HTML dan CSS, kita perlu, sekali lagi, tutup semua tag HTML yang kita boleh dibuka. Dan apa yang kita disyorkan anda lakukan untuk projek akhir anda, dan juga untuk CS50 Kewangan, adalah untuk membuat memastikan bahawa semua HTML anda mengesahkan. Dan itu dilakukan dengan W3 Pengesah. Dan kemudian apa yang kita lakukan dan apa yang kami cadangkan melakukan yang memisahkan gaya, jadi CSS dari markup HTML. Jadi apa-apa yang berkaitan dengan bagaimana halaman anda akan kelihatan cacat dan bagaimana ia akan diubah suai harus pergi ke dalam dokumen CSS. Dan kemudian markup anda mengatakan bagaimana perkara-perkara adalah berkaitan dengan satu sama lain adalah HTML, dan yang perlu masuk ke dalam dokumen HTML anda. Ada soalan? Mhm. PENONTON: Apa sebenarnya yang sedang berlaku pada dengan pengesahan halaman apabila kita mengesahkan HTML yang [didengar] diciptakan? MARIA ZLATKOVA: Jadi what-- fikir anda. Jadi apa sebenarnya yang sedang berlaku pada dengan pengesahan halaman dan mengapa kita perlu untuk berbuat demikian? Pada asasnya, kita perlu untuk berbuat demikian kerana banyak kali, pelayar anda, jika anda tidak menutup tag atau sesuatu seperti itu, pelayar anda masih akan menyebabkan halaman dan mungkin masih bekerja, tetapi ia adalah amalan terbaik untuk memastikan bahawa anda, sekali lagi, menutup semua tag anda, bahawa semua unsur-unsur anda adalah cara yang mereka perlu, dan pada dasarnya bahawa itu oleh konvensyen yang dipratetap. Ia adalah, sekali lagi, hanya perkara yang anda perlu dapat belajar untuk lakukan, berbanding dengan yang mempunyai kod sloppier dan barangan seperti itu. Yeah. Oh maaf. Saya fikir anda mengangkat tangan anda. PENONTON: Tidak, saya hanya [didengar]. MARIA ZLATKOVA: OK. PENONTON: Terima kasih. MARIA ZLATKOVA: Sudah tentu, terima kasih. Jadi sekali lagi, pergi ke dalam bagaimana maklumat dipindahkan dan model komunikasi untuk memindahkan maklumat. TCP / IP. TCP hanya bermakna Transmission Protokol Kawalan dan IP merujuk kepada Protokol Internet. Dan yang hanya merujuk kepada cara data itu diserahkan. Jika kita mempunyai beberapa data yang perlu dihantar ke atasmu, supaya anda membuat permintaan untuk pelayan tertentu. Sebagai contoh, apabila kita cuba untuk mengakses cs50.net, kita membuat permintaan kepada pelayan CS50 dan kami melihat bahawa kita mahu ini jenis maklumat. Dan kemudian adalah berdasarkan kepada protokol ini untuk bagaimana maklumat ini dihantar, pelayan memberikan maklumat kembali kepada kami, pelanggan. Dan kemudian kita untuk dapat melihat maklumat untuk halaman dan kemudian menggunakannya. Sebab itu Hypertext Transfer Protocol hanya protokol lain atau menetapkan konvensyen yang menentukan bagaimana pelayar web dan pelayan web perlu berkomunikasi. Dan meletakkan ini semua bersama-sama, HTTP, sekali lagi, hanya mentakrifkan bagaimana hiperteks ini ditakrifkan oleh HTML yang kita telah bekerja itu, bagaimana ia perlu dihantar kepada anda dan bagaimana data yang dihantar kepada anda mendapat kepada anda. Dan itulah sebabnya, jika anda semua masih ingat dari kelas, kita mempunyai banyak permintaan dan kami mempunyai banyak sintaks untuk permintaan ini bahawa kita akan pergi ke atas sekarang. Jadi sekali lagi, apabila kita menghantar permintaan kepada pelayan, kita perlu menentukan beberapa perkara. Oleh itu, kita perlu mencari jenis yang permintaan bahawa kita sedang terbenam. Dan sekali lagi, kita ada, sebagai contoh, GET adalah salah satu jenis kaedah yang ada di dalam permintaan kami. Dan kemudian HTTP / 1.1 adalah hanya protokol yang kita gunakan pada masa ini. Kebanyakan masa, yang akan protokol yang kita gunakan. Jadi, jika anda mempunyai satu soalan seperti itu pada kuiz anda. Itulah konvensyen yang kita ada setakat ini. Backslash merujuk kepada apa jenis perkara yang kita meminta. Kemudian, tuan rumah kami adalah, sebagai contoh, dalam hal ini kes, kita cuba untuk pergi ke google.com. Jadi ini adalah nilai untuk mendapatkan darah. Ini adalah jenis permintaan yang dapat dihantar. Dan kemudian sejenis tindak balas yang boleh dihantar, sekali lagi, berdasarkan protokol ini, sekali lagi, HTTP / 1.1. Jadi itulah versi HTTP lagi. 200 OK hanya kod status. Dan OK yang hanya frasa berdasarkan bahawa kod status. Dan kemudian Content-Type merujuk kepada jenis yang dikembalikan kepada anda yang untuk halaman web yang anda terima dan bahawa pelayar anda boleh menyebabkan selepas itu. Dan itu adalah teks / html. PENONTON: Apakah 1.1 maksudkan? MARIA ZLATKOVA: Itu hanya versi daripada- oh, apakah 1.1 maksudkan? Itu baru versi, HTTP versi protokol yang kita gunakan. Persoalan yang besar. Soalan-soalan lain? PENONTON: Bolehkah anda kesimpulan Content-Type cepat sebenar? MARIA ZLATKOVA: Supaya adalah apa yang pelayan. jenis information-- apa yang jenis kandungan adalah soalan. Sehingga adalah jenis maklumat yang anda kembali dari pelayan, jenis data bahawa pelayar yang boleh kemudian menyebabkan yang anda gunakan. PENONTON: Adakah itu yang ini protokol memberitahu anda lakukan? MARIA ZLATKOVA Maaf? PENONTON: Adakah itu apa protokol katakan? MARIA ZLATKOVA: protocol-- ini PENONTON: --what yang Content-Type adalah atau what-- MARIA ZLATKOVA: protokol ini adalah berdasarkan pada-- apa yang protokol memberitahu anda? Itu hanya cara bahawa maklumat ini disampaikan kepada anda berdasarkan kepada apa jenis protokol telah mendapat maklumat ini diserahkan kembali kepada anda. Adakah ini masuk akal jenis? HANNAH Blumberg: Anda boleh memikirkan protokol sebagai a-- saya fikir Profesor Malan menyifatkannya di dalam kelas sebagai jenis seperti a-- ia seperti sama dengan berjabat tangan manusia. Katakanlah, seperti, hey, Saya permintaan dan saya tahu bagaimana untuk mengendalikan HTTP versi 1.1. Dan kemudian pelayan itu berkata, oh, OK, Saya-- dan kedua-dua wujud. Saya juga tahu bagaimana untuk berurusan dengan HTTP / 1.1. Dan saya akan memberikan anda menyokong beberapa kandungan. Dalam kes ini, ia akan menjadi jenis teks / html. Jadi ia adalah jenis hanya cara yang daripada mereka untuk communicating-- MARIA ZLATKOVA: Ia hanya mengesahkan bahawa anda kedua-dua yang berikut yang sama protokol dan kedua-dua pelanggan dan server-- supaya pelayar anda dan server-- yang semacam tahu apa yang anda bercakap tentang dan mempunyai konvensyen untuk lulus dalam data. PENONTON: Jadi Content-Type part-- teks Content-Type / html-- itulah sebahagian berasingan mesej yang sama? Atau adakah ia sebahagian daripada katakan, 200? Adakah 200 memberitahu mereka bahawa atau is-- MARIA ZLATKOVA: 200 mengatakan ia semua pergi OK. Dan kemudian jenis kandungan adalah jenis bahagian yang berasingan mesej yang sama, dan berkata perkara yang saya Dikembalikan mempunyai jenis teks / html. Ia hanya memberi maklumat lanjut. Mempunyai apa-apa untuk menambah? OKEY. Mana-mana soalan-soalan lain mengenai perkara ini? Awesome. Jadi beberapa status HTTP lain yang kita boleh mendapatkan di samping 200 OK, orang-orang yang kami telah lihat mungkin mungkin banyak adalah 403 dan 404. Jadi 404, jika anda cuba untuk Akses sesuatu yang tidak wujud. Jadi, sebagai contoh, dalam anda Psets CS50 Kewangan, jika anda telah memberikan quote.html dan anda tidak mempunyai fail itu, tetapi sebaliknya anda mempunyai quote.php, yang akan menyebabkan 404 Not Found kerana fail mungkin tidak wujud. Untuk 403 dilarang, yang merujuk kepada kebenaran. Jadi, jika beberapa fail tidak boleh dibaca oleh dunia, anda mungkin akan yang 403 dikembalikan. Beberapa orang lain yang anda mungkin get-- 301, Moved Permanently; 302, Terdapat; 304, Modified; 400, Permintaan Bad; dan kemudian Ralat Pelayan Dalaman untuk 500 dan 503, Perkhidmatan Unavailable. Ya. PENONTON: Adakah kita dijangka menghafal semua status? MARIA ZLATKOVA: Saya akan mempunyai mereka pada lembaran menipu anda. [Ketawa] PENONTON: Adakah kita dijangka tahu apa yang mencetuskan masing-masing? MARIA ZLATKOVA: Adakah mereka? HANNAH Blumberg: Bagi orang-orang yang kami telah menjalankan into-- jadi persoalannya was-- MARIA ZLATKOVA: Adakah mereka dijangka tahu apa yang setiap seorang daripada status ini Kod mungkin dicetuskan oleh? Jadi bagi orang-orang yang kita telah menggunakan dan berlari ke dalam, saya akan berkata, ya. Oleh itu, kita pasti dilihat 200 OK dan syarahan dalam psets. Kami telah melihat 403, 404. Untuk orang-orang lain? HANNAH Blumberg: saya akan mengatakan 500 seolah-olah permainan yang adil. MARIA ZLATKOVA: 500, ya. HANNAH Blumberg: Ya. Hanya mempunyai pengertian umum apa yang menyebabkan mereka. Dan juga hanya dengan ini nama, anda boleh jenis seperti membuat tekaan berpendidikan sebagai apa yang sebenarnya menyebabkan mereka. Sebagai contoh, bergerak secara kekal, mungkin fail itu dipindahkan secara kekal. PENONTON: Tetapi pada sebelum peperiksaan, terdapat begitu bagaimana anda mengharapkan kami untuk menjawab itu? HANNAH Blumberg: Itu bernilai sifar mata. Persoalan 418 pada teko secara teknikal status HTTP, tetapi ia adalah bernilai sifar mata. Jelas sekali, anda tidak dijangka mengenali mereka. PENONTON: Adakah yang sebenar? HANNAH Blumberg: Adalah benar yang satu, tetapi ia tidak bermakna apa-apa. Ia hanya jenaka. Orang Internet adalah lucu. MARIA ZLATKOVA: soalan hebat, lelaki. Apa-apa soalan lain? PENONTON: Apakah Ralat pelayan dalaman? MARIA ZLATKOVA: Dalaman Ralat pelayan hanya bermakna bahawa anda telah tidak dapat berkomunikasi dengan pelayan atas sebab tertentu. Jadi ia tidak semestinya sesuatu yang mempunyai kaitan dengan pelanggan atau sesuatu seperti itu. Saya tidak tahu apa-apa contoh yang khusus yang kita telah pergi ke atas untuk menjelaskan, tetapi yeah. HANNAH Blumberg: Pasti. Jadi, sebagai contoh, seperti mari mengatakan anda telah bekerja di Mashup dan pelayan Google turun ke bawah untuk beberapa sebab, gangguan kuasa, katakan. Yang akan menjadi pelayan dalaman kesilapan atau beberapa jenis daripada- suka anda tidak akan mendapat jawapan kembali. MARIA ZLATKOVA: Ya. Ia hanya apabila anda berada tidak dapat berkomunikasi dengan pelayan sebab tertentu kerana itu akan turun atau sebab-sebab lain. Jadi melompat ke dalam PHP. PHP, tidak seperti HTML, ialah bahasa pengaturcaraan. Dan kami mula menggunakannya kerana ia adalah sangat berguna untuk pembangunan web. Kita mula-mula digunakan dalam CS50 Kewangan. Dan pada dasarnya membantu kita membawa bersama-sama markup ini, reka bentuk, dan bagaimana kita sebenarnya menggunakan maklumat untuk memaparkan perkara di laman web. Jadi PHP sendiri bermaksud PHP Hypertext Preprocessor, maka ia adalah satu backnorym rekursi dengan sendirinya. Dan membuka tag untuk PHP kita kiri dan anak panah kanan dengan tanda tanya dan php. Oleh itu, kita telah pun melihat sekumpulan daripadanya. Sekarang, kami hanya akan pergi ke atas beberapa perkara asas mengenainya. Jadi dengan PHP, pembolehubah namanya bermula dengan tanda dolar. Kami tidak menentukan, sekali lagi, pembolehubah menaip lagi. Sama seperti kita lakukan dengan C, kita tidak perlu untuk berbuat demikian. Kita boleh melakukan sekumpulan yang berbeza barangan dengan pembolehubah. Kita boleh meletakkan mereka bersama-sama oleh concatenating mereka dengan notasi titik, yang kita tidak boleh melakukannya dalam C lagi. Sekali lagi, kita mempunyai serba sedikit lebih dengan PHP dari segi pembolehubah. Sekali lagi, kita tidak mempunyai fungsi utama. Dan PHP ditafsirkan yang bertentangan dengan disusun, Jadi, betapa kami tidak membuat untuk fail C, kita tidak perlu berbuat demikian untuk PHP. Tetapi, cara bahawa bahasa dijalankan dengan sendirinya, ia ditafsirkan. Dan kemudian longgar ditaip hanya bermakna bahawa kita tidak perlu nyatakan pembolehubah jenis dan jenis pembolehubah difahami pada masa jalanan. PENONTON: Tetapi apa yang anda lakukan maksudkan dengan dinamika dot? MARIA ZLATKOVA: Pasti. Apabila kita mahu meletakkan perkara together-- jadi jika kita mempunyai beberapa pembolehubah yang mempunyai nilai 3 dan kami mempunyai satu lagi pembolehubah yang mempunyai nilai tali, kita boleh meletakkan pembolehubah bersama-sama dengan meletakkan titik di antara mereka dan concatenating mereka. Atau kita boleh membuat berubah-ubah menamai dan meletakkannya bersama-sama dengan concatenating dua tali. Jadi, jika kita mempunyai rentetan dalam dua sebut harga dan kita meletakkan titik selepas itu, dan kemudian kita mempunyai rentetan yang lain, yang akan mewujudkan rentetan sama sekali. PENONTON: OK. MARIA LATVIA: Telah yang jelas? PENONTON: Ya. MARIA ZLATKOVA: OK. Ya. PENONTON: Apabila kamu berkata ditafsirkan dan bukannya disusun, yang anda bercakap tentang anda tidak perlu untuk menjadi tertentu apabila ia datang kepada PHP berbanding C? MARIA ZLATKOVA: Apabila kita katakan ditafsirkan sebagai bertentangan dengan disusun, apa yang kita maksudkan? Ini bermakna bahawa kita tidak perlu fail boleh laku untuk menjalankan PHP. Ia bermakna bahawa ia berjalan yang ia pergi. Adakah ini masuk akal? Sedikit lagi. HANNAH Blumberg: Jadi anda boleh berfikir jurubahasa sebagai satu lagi program yang bertanggungjawab untuk pergi baris demi baris melalui PHP dan benar-benar melaksanakannya, yang bertentangan untuk menyusun semua turun ke binari. Ia sebenarnya tidak bermakna apa-apa tentang bagaimana tertentu kita perlu. Kita masih perlu untuk menjadi tepat, dan tidak lupa koma bertitik anda, dan memastikan anda mempunyai tanda dolar anda, dan perkara-perkara seperti itu. Soalan yang baik. MARIA ZLATKOVA: Ya. Jadi baris demi baris, kerana berbanding dengan fail C, kita perlu membuat seluruh akhir sebelum kita benar-benar dapat menjalankannya. Itulah perbezaan utama. Tetapi sekali lagi, kita tidak boleh benar-benar kurang tertentu. Jadi tatasusunan dalam PHP mewakili sebenarnya peta yang teratur. Jadi nilai array bersekutu kepada kunci. Kedua-dua cara untuk mengisytiharkan pelbagai, berdasarkan sintaks ini, kita boleh menjadi lebih jelas dalam mengatakan kami mempunyai array dan kami mempunyai key1 ini yang memetakan untuk nilai1 ini, key2 yang memetakan value2. Atau kita hanya boleh membuat array yang mengandungi nilai sendiri dan kemudian kunci adalah difahami dengan cara yang. Sebarang pertanyaan mengenai perkara ini? PENONTON: Apa yang akan kekunci berada di dalam contoh kedua? 0, 1, 2, 3? MARIA ZLATKOVA: Sebagai contoh, ia hanya kunci dalam tidak semestinya melakukan perubahan. Mereka hanya menentukan bagaimana anda boleh menggunakan nilai di dalamnya. Jadi, jika kita mempunyai foreach yang gelung dalam PHP yang akan membolehkan kita untuk pergi melalui semua nilai-nilai, kita boleh pergi melalui semua nilai-nilai, walaupun kita telah atau tidak ditakrifkan kunci tertentu di dalam laman ini sintaks sebelumnya. Jadi, walaupun dengan seperti ini array, kita masih boleh mempunyai gelung foreach yang melalui setiap nilai dalam kunci dalam array. Jadi sintaks foreach yang gelung, kita mulakan dengan array. Pemboleh ubah $ arr adalah pelbagai sebenar kami yang kita ditakrifkan dalam slaid sebelumnya sebagai nilai yang benar-benar pergi melalui setiap nilai, tidak kira sama ada kita mempunyai kunci atau tidak. Dan kemudian kita boleh melakukan sesuatu dengan nilai dalam gelung foreach. Jadi sekali lagi, jika kita mempunyai array seperti ini di sini created-- jadi kami mempunyai kunci foo dan nilai bar, kunci baz dan nilai qux-- kita boleh mempunyai gelung foreach yang akan melalui pelbagai sebagai nilai utama dan kemudian melakukan sesuatu dengan kunci dan / atau nilai. Tetapi kita tidak semestinya sentiasa perlu mempunyai foreach satu gelung yang akan melalui pelbagai sebagai peta kunci untuk nilai. Kita boleh pergi melalui pelbagai gelung foreach sebagai nilai. HANNAH Blumberg: Dan saya fikir supaya- adalah soalan anda, apa yang adalah indeks yang tersirat? PENONTON: Kinda. MARIA ZLATKOVA: Oh. HANNAH Blumberg: Ya, ya. Jadi, pada asasnya, jika anda tidak menentukan kunci, ia akan menjadi 01. MARIA ZLATKOVA: Ya. Sama seperti dengan C, ia adalah sifar diindeks jika anda tidak menentukan kunci. PENONTON: Maaf. Bolehkah anda cuba bercakap sedikit lebih kuat? Saya mempunyai sedikit masalah semua pendengaran. MARIA ZLATKOVA: Saya minta maaf. Yeah sudah tentu. Jadi adakah anda mahu saya untuk pergi ke ini lagi? Atau adakah this-- PENONTON: Maka pada slide-- sebelumnya jika anda hanya boleh kembali untuk satu saat. MARIA ZLATKOVA: Sudah tentu, maaf. PENONTON: Jadi yang kedua lokasi di sini tidak seolah-olah mempunyai nilai yang memasukkan, lebih kurang [? penyebaban. ?] MARIA ZLATKOVA: Betul, betul. PENONTON: Jadi bagaimana ia berfungsi apabila anda mengatakan itu semua atau tiada. Bagi saya, yang kelihatan seperti a [? foo?] sudah. MARIA ZLATKOVA: Ya, ya. Jadi sekali lagi, ini adalah satu peta diperintahkan dalam pengertian ini bahawa terdapat difahami, sebagai contoh, indeks di sini boleh difahami sebagai 0, 1, 2, 3. Sekali lagi, itu mempunyai orang-orang indeks bersamaan kami mempunyai kunci digabungkan kepada nilai-nilai. Jadi, jika utama kami adalah 0-- maaf. HANNAH Blumberg: Tiada ada yang mencatatkan di sini. Ia sebenarnya benar-benar baik. MARIA ZLATKOVA: Itu yang besar. OKEY. Jadi sekali lagi, $ arr 0 adalah kunci untuk nilai 1. 0 akan menjadi kunci untuk nilai 1. PENONTON: Saya minta maaf. Ia tidak dapat dilihat. HANNAH Blumberg: Baiklah, takpa. Chalk adalah idea yang buruk. Saya mengambil kembali. Anda boleh memikirkan kekunci sebagai 0 peta untuk nilai 1. MARIA ZLATKOVA: Ya. Jadi ini adalah 0, ini adalah 1, 2, 3. Ini boleh menjadi kunci anda. Anda boleh memikirkan mereka as-- yeah. Jadi, daripada mempunyai kunci yang jelas, mereka semacam difahami sebagai indeks bermula pada 0. Kapur tidak membantu. Yeah. PENONTON: Untuk gelung foreach, jika kita mahu melihat sebagai nilai, ia akan hanya indeks secara automatik ke 0? MARIA ZLATKOVA: Ya. Ia akan melalui setiap satu daripada nilai-nilai. PENONTON: [didengar] sebagai 0 atau akan yang hanya melakukan 0? MARIA ZLATKOVA: Anda akan mempunyai untuk mengatakan sebagai tanda dolar dan kemudian beberapa nama boleh ubah, nilai. PENONTON: [didengar]. MARIA ZLATKOVA Maaf? PENONTON: Maaf, Saya hanya cuba untuk ingat. Bagaimanakah anda bahawa jika anda boleh melakukannya secara automatik pengindeksan hanya 0 dari? MARIA ZLATKOVA: Jadi bagaimana anda akan berbuat demikian jika anda tidak mempunyai nama-nama utama tertentu? PENONTON: Ya. MARIA ZLATKOVA: Anda akan sama define-- hanya mengatakan diri anda sebagai nama beberapa. Jadi dalam psets anda, anda semua mungkin ingat foreach $ berturut-turut sebagai $ baris, kami mencipta diri kita ini $ berturut-turut berkata kita mahu pergi melalui berturut-turut sebagai $ baris. Walaupun kita tidak mempunyai $ ini jelas baris ditakrifkan, kita hanya boleh pergi dan kata ini boleh menjadi utama kami, dan hanya pergi melalui setiap nilai. PENONTON: Jadi adalah nilai pembolehubah baru kami mewujudkan untuk menyimpan [didengar]? MARIA ZLATKOVA: Jadi ia bukan memang pembolehubah baru. Ia adalah satu pembolehubah yang merujuk kepada dalam array kepada setiap daripada mereka. HANNAH Blumberg: Ia nama boleh ubah baru. MARIA ZLATKOVA: Ya, ia adalah satu nama pembolehubah baru, tetapi ia tidak inherently-- yeah. Ia hanya satu pembolehubah baru bahawa anda boleh berbuat demikian. Jadi hanya bagaimana kita lakukan $ berdayung sebagai $ baris, baris adalah nama pembolehubah baru yang kita boleh mewujudkan dalam gelung foreach kami. Ia tidak perlu preexist sebelum itu. PENONTON: Bolehkah anda pergi melalui logik untuk setiap, dengan menggunakan contoh di sana? MARIA ZLATKOVA: Mhm. Oh maaf. Berikut adalah contoh. Pasti. Jadi bagi setiap array-- supaya yang bermakna pergi ke pelbagai ini sebagai kunci value-- yang akan melalui pelbagai ini dan pertama kali pergi dan mendapatkan foo, yang foo utama dan bar nilai. Dan kemudian pada kedua lelaran untuk gelung, ia akan pergi melalui dan mengambil yang baz utama dan qux nilai. Dan kemudian anda boleh melakukan sesuatu dengan salah seorang daripada mereka atau kedua-dua mereka. PENONTON: Jadi idea di sebalik mempunyai takat Kunci kepada nilai, apa yang anda akhirnya mengakses? MARIA ZLATKOVA: Apakah idea yang yang mempunyai menunjuk utama untuk menghargai? Ia hanya satu lagi konvensyen, satu lagi cara melalui array dan dapat mengakses sama ada kunci atau nilai atau kedua-duanya dan menggunakannya. PENONTON: Apa peranan untuk memerintahkan supaya foreach berjalan dalam? Jadi jika kita menambah unsur-unsur untuk array kemudian, mereka akan menjadi orang-orang pertama dipanggil dalam pelbagai foreach, atau ia akan menjadi di kemudian hari? MARIA ZLATKOVA: Jadi apa yang perintah itu bahawa foreach gelung akan melalui pelbagai dalam? Ia pergi melalui pertama unsur dengan unsur yang lalu, kepada elemen terkini ditambah. Jika anda menambah elemen di kemudian hari, mereka akan dapat accessed-- unsur-unsur pertama akan diakses sebagai yang pertama elemen array, dan kemudian anda akan pergi melalui setiap unsur-unsur sebagai jenis ordered-- yang tidak yang teratur, tetapi cara yang mereka telah dimasukkan ke dalam array. PENONTON: unsur-unsur Jadi baru ditambah kemudian? Jadi mereka added-- mereka akan menjadi orang-orang yang terakhir di dalam [itu? lelaran. ?] MARIA ZLATKOVA: unsur-unsur New can-- pada asasnya, apabila unsur-unsur baru ditambah, adakah mereka ditambah kepada hujung array? PENONTON: Ya. MARIA ZLATKOVA: Saya percaya begitu. Ya. Dan kemudian dengan gelung foreach anda, selepas anda telah menambah unsur-unsur baru dan anda akan melalui mereka, unsur-unsur baru akan menjadi accessed-- elemen baru, jika ia ditambah lepas, ia akan diakses lepas. PENONTON: Bolehkah anda hanya memberikan contoh sesuatu yang akan [didengar] dengan sesuatu yang mempunyai nilai seperti [didengar] atau nilai, suka cara anda format itu? MARIA ZLATKOVA: Pasti. Bolehkah saya memberi satu contoh apa yang yang kita akan lakukan dengan nilai? Jadi apa yang anda semua mungkin biasa dengan adalah bahawa kita telah melalui array dan pada dasarnya dicetak setiap unsur-unsur, sebagai contoh, sebagai sebahagian daripada senarai yang diperintahkan atau sesuatu yang. Adakah ini masuk akal atau adakah kita mahu supaya- PENONTON: Bolehkah kita mencetak nilai-nilai ini keluar? MARIA ZLATKOVA: Ya, kita boleh mencetak dan kemudian pada dasarnya $ nilai kerana pada bahawa nilai tertentu, kita akan mencetak nilai di dalamnya. Jadi, jika kita berada di lelaran pertama kami itu dan kita dicetak $ nilai, kita akan mencetak bar. PENONTON: Adakah terdapat juga untuk gelung dalam PHP atau hanya gelung foreach? MARIA ZLATKOVA: Ada juga untuk gelung dalam PHP. Dan logik mereka adalah kebanyakannya sama seperti apa yang anda telah digunakan untuk. PENONTON: Jadi nilainya adalah null. MARIA ZLATKOVA: Ia seperti yang sama. Yeah. PENONTON: saya hanya akan bertanya. Oleh itu, apabila anda mengisytiharkan pelbagai, anda tidak perlu untuk memberitahu apa saiz ia akan berkenaan, yang bermaksud bahawa anda boleh hanya menambah dan mengambil unsur-unsur [didengar]. MARIA ZLATKOVA: Yup. Yup. Tepat sekali. Apabila kita mengisytiharkan array, kita tidak perlu berkata apa saiz pun, jadi kita hanya boleh menambah unsur-unsur ke ia kemudian juga. Soalan lagi? Jadi membawa PHP dan HTML bersama-sama, apa yang kita telah seen-- baik, sebagai contoh, dalam contoh ini, kita ada bentuk HTML yang mempunyai medan input. Dan medan input adalah nama hanya dan kemudian ia mempunyai butang Submit. Dan apabila anda menekan Hantar butang, dalam fail hello.php kami, kerana kaedah untuk bentuk adalah mendapatkan, kita boleh mengakses apa yang ada pada nama dengan ini mendapatkan pembolehubah global yang is-- sintaks kerana ia adalah $ _GET. Dan kemudian kita boleh mengakses apa sahaja input pengguna di dalam bentuk yang bagi nama dengan menentukan nama bidang itu. Mana-mana soalan-soalan lain atau mana-mana soalan dalam contoh ini tertentu? PENONTON: Di manakah PHP? MARIA ZLATKOVA: Di sini. Jadi ini adalah tag pembukaan kami untuk PHP. PENONTON: Oh, betul. MARIA ZLATKOVA: Ya. HANNAH Blumberg: The = adalah trengkas untuk ini adalah PHP dan hanya gema. PENONTON: Oh. MARIA ZLATKOVA: Ya, maaf. Perlu saya telah membuat yang jelas. HANNAH Blumberg: Cetak. MARIA ZLATKOVA: Ia hanya fungsi yang membolehkan kita untuk mencetak sesuatu. Persoalan yang besar. Jadi going-- ya. PENONTON: Adakah terdapat akan menjadi agak sedikit coding tangan PHP dan HTML kuiz 1? MARIA ZLATKOVA: Ada boleh menjadi Jumlah saksama tafsiran PHP dan HTML, tidak semestinya seperti sejumlah besar pengekodan, walaupun anda mungkin perlu menulis gelung foreach, walaupun, untuk gelung. Mana-mana gelung yang kita meliputi di sini adalah permainan yang adil. Dan itu kebanyakannya ia. HANNAH Blumberg: Saya akan disediakan. Dengan cara yang sama bahawa kita meminta anda untuk menulis sekumpulan fungsi C kuiz 0, Saya akan bersedia untuk melakukan perkara yang sama dalam PHP dan JavaScript. MARIA ZLATKOVA: Ya. HANNAH Blumberg: Saya akan berkata yang little-- seperti kita tidak akan membuat anda menulis HTML besar halaman hanya kerana itulah sedikit membosankan, tetapi anda mungkin mempunyai bahagian. Itulah permainan benar-benar adil. Seperti halaman HTML kecil, benar-benar adil. PENONTON: OK. Bagaimana pula dalam JavaScript juga? HANNAH Blumberg: Ya. Permainan yang adil JavaScript itu. MARIA ZLATKOVA: Ya. Itulah permainan benar-benar adil. HANNAH Blumberg: Kami akan dengan yang di seperti 10 minit. MARIA ZLATKOVA: SQL, sekali lagi, Bahasa Pertanyaan Berstruktur. Ia pada dasarnya membolehkan kita untuk menguruskan data dalam pengurusan pangkalan data hubungan sistem. Yang hanya pada asasnya bermakna yang kita ada di suatu tempat untuk menyimpan beberapa data yang kita mungkin mahu digunakan dalam laman web atau dalam bentuk lain. Dan kemudian kita mempunyai pertanyaan untuk mendapatkan maklumat daripada pangkalan data kami, atau untuk memasukkan maklumat di dalamnya. Banyak UPDATE ones-- bersama, INSERT, SELECT, dan DELETE. Jadi untuk UPDATE, ini adalah sintaks untuk mengemaskini data di dalam sistem database. Mengemaskini jadual ini dipanggil meja dengan mengatakan SET, kita boleh menetapkan beberapa nilai dalam semua baris kepada sesuatu sama lain. Oleh itu, kita juga boleh menentukan beberapa tertentu entri yang kita mahu untuk mengubah suai dan yang boleh menggunakan mana. Dan kita boleh menentukan bahawa kami hanya mahu mengubah suai beberapa baris di mana rumah untuk, jika kita mempunyai meja pelajar dan semua pelajar mempunyai rumah, jadi kami hanya akan mengubah suai beberapa nilai mana rumah yang sama Currier, contohnya. Untuk INSERT, kita boleh memasukkan nilai-nilai tertentu ke dalam jadual. Jadi INSERT INTO meja, dan kemudian nilai-nilai, dan kemudian dalam kurungan, kami menyatakan yang menghargai anda mahu masukkan. Jadi INSERT INTO meja, col1 dan col2, nilai adalah VAL1 dan VAL2. Jadi ini pada dasarnya memasukkan baris baru ke dalam jadual yang mengandungi nilai-nilai 1 dan 2 di bawah tiang 1 dan 2. Dan kemudian kita akan pergi ke atas contoh cepat bagaimana ini kelihatan seperti dalam pangkalan data kami sedikit. Tetapi pertanyaan terakhir ini yang saya fikir kita akan pergi ke, SELECT, ia hanya membolehkan kita untuk memilih data dari jadual untuk mungkin menggunakannya selepas itu. Dan cara yang kita lakukan ini adalah kami hanya menyimpannya di beberapa pembolehubah. Dan kemudian kita mungkin boleh menggunakannya lagi. Jadi bintang SELECT bermakna memilih semua. Itu hanya trengkas yang untuk memilih semua. DARI MANA jadual, kami sedang mencari untuk beberapa keadaan tertentu, jadi di mana ruang sama sesuatu, sebagai contoh. Jika kita hanya mahu memilih semua dari meja, ini hanya memilih semua ruangan dan semua baris daripada jadual. Dan kemudian DELETE FROM meja MANA col sama sesuatu, ini hanya memadam beberapa baris dari meja kami di mana kita mempunyai beberapa keadaan tertentu. Dalam kes ini, syarat-syarat adalah ruangan sama sesuatu. Jadi hanya satu contoh yang cepat ini. Jika kita mempunyai jadual ini di sini dan kami masukkannya ke dalam jadual, nilai-nilai, yang akan memasukkan baris baru. Dan jika kita mempunyai auto-kenaikan, akan ini hanya kenaikan ID kami 0-1 untuk 2. Jika kita memilih semua daripada pelajar, ia hanya mengembalikan semua bidang dan semua baris. Mana tahun adalah lebih besar daripada atau sama dengan 2016, yang hanya akan kembali Hannah dan saya sendiri. Dan kemudian jika kita hanya dipilih id tahun dan tahun DARI pelajar di mana rumah itu Cabot House, yang akan, sekali lagi, kembali Hannah dan saya sendiri. Kalau kita dipadam daripada pelajar mana nama adalah sama dengan Rob, yang akan memadam keseluruhan baris. Dan kalau kita menetapkan nama, pelajar UPDATE Nama SET sama dengan Daven MANA rumah adalah sama Cabot House, yang akan pergi ke mereka baris dan kemudian mengemas kini nama. Dan kemudian beberapa jenis SQL data adalah CHAR, VARCHAR, INT dan FLOAT. Ini adalah permainan yang adil. Saya akan pergi lagi dan pastikan anda tahu dan mempunyai mereka pada lembaran menipu anda, apa yang setiap mereka watak-watak telah digunakan untuk, apa anda menggunakannya pada psets anda, dan pastikan anda biasa dan selesa dengan mempunyai untuk memilih dari data berlainan jenis dalam pset anda. Ya. PENONTON: Apa yang jadual yang disimpan? Ya, di mana jadual ini disimpan? MARIA ZLATKOVA: Nah, sekarang, ia tidak disimpan. Bagaimanapun, di mana jadual ini disimpan? Tetapi ia boleh disimpan di dalam pangkalan data SQL. PENONTON: Dan di mana pangkalan data SQL? Dalam komputer, talian di suatu tempat, pelayan? MARIA ZLATKOVA: Ia boleh menjadi satu beberapa perkara yang berbeza. HANNAH Blumberg: Kami telah muka dengan Jadual SQL kebanyakannya dengan phpMyAdmin. Oleh itu, kita boleh meminta pelayan untuk menyimpan mereka untuk kita. Kita boleh menyimpan mereka di dalam komputer kita sendiri. MARIA ZLATKOVA: Ia hanya bergantung kepada bagaimana yang anda mahu lakukan untuk diri sendiri. Tetapi kita telah menyimpan mereka, seperti Hannah disebutkan, pada phpMyAdmin, yang dalam talian. Dan kemudian cara kita menggunakan PHP dan SQL, kita menyimpannya ke dalam beberapa pembolehubah apa yang kita telah disoal untuk. Jadi, jika kita semua PILIH DARI Sejarah mana user_id sama id sesi, yang akan memilih semua baris untuk orang yang tertentu yang log masuk dalam dari sejarah meja dan menyusun mereka ke dalam baris. Satu perkara yang sejuk untuk tahu adalah bahawa fungsi Pertanyaan CS50 melindungi tag suntikan SQL. Yang hanya bermakna bahawa ia akan memastikan input yang dimasukkan adalah betul dan bahawa orang yang memasuki input tidak cuba untuk memasukkan beberapa berniat jahat kod untuk memuat drop meja kami atau memadam segala-galanya di dalam pangkalan data kami. Satu gambaran keseluruhan cepat daripada Model model Lihat Pengawal, ia hanya satu cara mengatur dan berfikir tentang kod. Ia sekali lagi, paradigma reka bentuk. Apa yang bermakna bahawa kita can-- dan ia adalah amalan yang baik untuk memisahkan bahagian-bahagian yang berbeza kod kami dan apa yang mereka mengawal ke dalam ketiga-tiga paradigma. Jadi pandangan kami adalah yang paling sering kami template, susun atur kita, cara yang kita tetapkan bagaimana kod kami kelihatan. Yang kebanyakannya fail CSS kita dan cara yang kita ditakrifkan reka bentuk kod kami, pada asasnya. Pengawal kami kebanyakannya apa kita telah lakukan dengan PHP fail. Jadi sekali lagi, bekerjasama dengan maklumat yang kita ada dan menentukan bagaimana yang maklumat digunakan, dan kemudian lulus maklumat yang sama ada ke pandangan atau model. Dan model, cara yang kita ada telah menggunakan IS telah pangkalan data kami, jadi di mana maklumat kami adalah disimpan jadi ia mempunyai suatu tempat untuk didiami, dan mana-mana kod yang berkaitan dengan cara bahawa kita akan mendapat maklumat atau cara yang kita mengemas kini maklumat tersebut. Jadi, dalam model MVC ini, HTTP permintaan dihantar ke pelayan web. Kemudian, mentafsir pengawal permintaan daripada pengguna dan kemudian mengesahkan input pengguna. Ia adalah pilihan yang kita ada pengawal berkomunikasi dengan model, jadi sesuatu seperti pangkalan data kami atau beberapa fungsi lain yang tertumu maklumat. Dan kemudian akhirnya, pengawal pas maklumat ke pemandangan supaya ia boleh menjadi diberikan dan bahawa ia boleh kelihatan dengan mana-mana orang mengakses laman web. Ada soalan? Awesome. Jadi sekali lagi, model, fungsinya, sekali lagi, adalah simpanan berterusan maklumat, mengurus dan menyusun data. Dan apa yang kita lihat setakat ini adalah pangkalan data MySQL dan apa-apa fail data yang boleh digunakan. View, penyampaian maklumat kepada pengguna, UI, atau antara muka pengguna. Dan perumpamaan ini adalah HTML. Dan kemudian kita mungkin mempunyai PHP minimum. Jadi untuk gelung yang iterates atas data yang dicetak adalah sebahagian daripada pandangan, kerana bertentangan dengan pengawal. Dan kemudian banyak fail PHP kami termasuk dalam kategori pengawal. Ia hanya menguruskan permintaan pengguna dan mendapat maklumat daripada model. Melompat ke dalam Dokumen Objek Model, ini hanya merujuk kepada cara HTML dokumen yang dianjurkan. Dan mereka dibahagikan kepada pokok struktur yang mempunyai hierarki. Jadi, jika kita mempunyai akses kepada [didengar] perwakilan dokumen itu, kita boleh bekerja dengan dokumen, seperti kita memanipulasi objek pada asasnya. Dan untuk membuat ini sedikit lebih jelas, apabila kita mempunyai banyak kami tag yang berbeza bertindak balas untuk laluan yang berbeza dalam pokok kami. Dan kemudian untuk contoh ini, kita mempunyai nod dokumen itu bermula. Kita ada, maka, nod HTML kami yang berpecah kepada kepala dan badan. Ketua mempunyai tajuk dan kemudian tajuk mengandungi hello, dunia. Dan badan kita hanya mengandungi hello, dunia juga. Jadi mana-mana soalan di mana-mana perkara yang kita dilindungi setakat ini? Dan jika tidak, Hannah akan mengambil alih dengan JavaScript. Awesome. HANNAH Blumberg: OK, sejuk. Jika apa-apa datang dengan PHP atau HTML, atau mana-mana bahan yang Maria dilindungi, kita sentiasa boleh berhenti seketika. Kami melakukan yang lebih baik pada masa sekali lagi, begitu hebat. Dan hanya untuk kembali benar-benar cepat ini, jika anda melihat penggunaan di setiap peperiksaan tahun-tahun lepas, ini datang di sini adalah sama ada- beberapa HTML, membuat gambar rajah ini. Atau di sini adalah gambar rajah ini, membuat beberapa HTML, jadi pasti amalan itu. Dan kemudian itu salah satu yang terjamin soalan yang anda boleh mendapatkan hak. Sejuk. Jadi mari kita bercakap tentang JavaScript dan bagaimana ia sedikit berbeza dengan bahasa seperti PHP dan C, kedua-dua bahasa yang kita lihat terlebih dahulu. Jadi nombor satu, ia longgar ditaip. Itulah seperti PHP, tetapi tidak seperti C. Ia adalah bahasa yang ditafsirkan. Sekali lagi, itu seperti PHP, tidak seperti C. Dan ini akan membolehkan kita untuk use-- ia bekerja dengan sangat baik dengan laman web. Ia akan membolehkan kita untuk memanipulasi kandungan dan bagaimana ia kelihatan dan apa yang dilakukan. Kita akan melihat sedikit Ajax. Ia membolehkan kita berkomunikasi asynchronously dengan pelayan yang berbeza dan mendapatkan maklumat. Dan ini adalah perkara yang benar-benar memisahkan JavaScript dari PHP dan C adalah bahawa ia adalah pihak pelanggan. Kedua-dua PHP dan C adalah biasanya pelayan-sampingan. Bagi sebahagian besar dan hampir keseluruhannya apa yang kita lihat, sekurang-kurangnya dalam kelas ini, JavaScript bertindak ke atas pihak pelanggan, yang bermaksud bahawa pelayar sebenarnya bertanggungjawab untuk menguruskannya. Dan itu bererti bahawa kita tidak perlu berinteraksi dengan pelayan. Jadi ia bermakna ia boleh menjadi banyak yang lebih cepat kerana ia sebenarnya hanya itu Chrome, ia Safari, ia Firefox, apa sahaja yang anda menggunakan sebenarnya berjalan anda JavaScript. PENONTON: Apa yang tak segerak bermakna? HANNAH Blumberg: Ah, apa yang tidak asynchronously bermakna? Persoalan yang besar. Asynchronously ertinya- dengan baik, kandungan di mana kita menggunakan ia, OK, kita sedang mencipta satu laman web dan kita perlu untuk mendapatkan beberapa maklumat. Jadi dengan contoh Mashup, beberapa maklumat yang kita mungkin mahu adalah tajuk artikel. Sekarang, kita could-- satu pilihan adalah untuk melakukannya serentak dan itu bererti mari berhenti, pergi mendapatkan artikel itu, kembali artikel itu, dan kemudian memberi, tetapi yang akan menjadi benar-benar perlahan. Itu akan menjadi satu pengalaman pengguna yang tidak baik kerana anda hanya akan duduk ada menunggu sesuatu untuk bertindak balas. Asynchronously bermakna kita akan terus akan tentang perniagaan kami, menjadikan halaman, dan kami akan menghantar off permintaan yang yang jenis akan berlaku di latar belakang. Saya rasa kita menggunakan contoh dalam kuliah memanggil Rob dan berkata, hey, anda boleh melihat ini sehingga bagi saya dan kembali kepada saya, berbanding dengan hanya saya menunggu di telefon. Jadi asynchronously bermakna ia berlaku di latar belakang dari kami secara selari. Persoalan yang besar. Apa-apa lagi? Yang besar. Kami akan melompat yang lebih banyak ke dalam permintaan tak segerak dengan Ajax. PENONTON: Adakah JavaScript-- di mana tidak ia jatuh dengan model-view-pengawal? HANNAH Blumberg: Soalan yang hebat. Di manakah JavaScript kejatuhan dengan model-view-pengawal? Hm. Saya rasa ia boleh fall-- jadi kami biasanya tidak suka squish ia ke dalam yang paradigma, tetapi saya rasa saya akan berkata, OK, jadi JavaScript sebenarnya akan membolehkan kita untuk mengumpulkan data, mentafsir data, benar-benar melakukan perkara yang bermakna dengan data. Dengan cara itu, ia sangat kawalan seperti. Tetapi ia juga akan membolehkan kita untuk memaparkan benda dengan benda cetak. Dengan cara itu, ia sangat pandangan seperti. Yeah. Jadi ia adalah jenis seperti PHP dalam di mana ia jenis boleh menjadi kedua-duanya. Soalan yang baik. Apa-apa lagi? Baiklah, hebat. Bergerak kanan bersama-sama. Jadi mari kita lihat contoh bagaimana kita boleh menggunakan JavaScript dalam salah satu program web kami. Jadi saya akan menganggap ini index.html dengan sekumpulan HTML. Dan perkara yang saya mahu anda memberi tumpuan kepada adalah tag skrip ini. Dan ini berkata, OK, saya mahu menjalankan beberapa JavaScript dan di sini adalah di mana ia hidup. Ia hidup di hello.js. Dan sangat banyak seperti CSS, kita boleh meletakkan JavaScript dalam HTML. Mengapa kita mungkin mahu untuk memisahkan itu? Yeah. PENONTON: Lebih mudah untuk menulis semula? HANNAH Blumberg: Ya. Ia lebih mudah untuk menggunakan seluruh laman web yang berbeza. Ia menyimpan perkara-perkara yang lebih bersih. Ia hanya amalan yang baik. Awesome. Jawapan yang baik. Begitu baik, jadi ini akan sebagai index.html kami. Dan kemudian turun di sini ialah kami kecil fail JavaScript sedikit. Dan semua yang dikatakan adalah amaran Hello, world. Jadi apa yang berlaku adalah apabila ini renders-- halaman jadi jika anda pergi ke apa sahaja laman web ini is-- semua itu akan berlaku adakah ia akan berkata, OK, Saya akan menjalankan kod JavaScript ini. Dan kod JavaScript ini hanya berkata amaran Hello, world. Jadi, saya akan mendapatkan ini mesra sedikit pop-up. Cool? Itulah jenis seperti kami yang pertama JavaScript program, kami Hello, world. Mari kita lihat sedikit lebih lanjut mengenai apa sintaks JavaScript kelihatan seperti. Dan secara khusus, mari kita bandingkan dengan C dan PHP, yang kita lihat sebelum ini. Dalam JavaScript, kita akan mempunyai var, nama pembolehubah, dan kemudian nilai sebenar. Dan kita tidak menyatakan jenis, sama seperti di PHP, tetapi sangat tidak seperti di C. Jadi, sebagai contoh, jika kita mahu untuk menyimpan nilai 50, dalam C, kita perlu mengatakan, hey, C, saya mahu integer, Saya akan memanggilnya i, dan nilainya adalah 50. Dalam PHP, ia sedikit lebih mudah. Kami berkata, hey, saya mahu pembolehubah dipanggil i dan nilai ialah 50. Sangat begitu juga, dalam JavaScript, kita berkata hey, saya mahu ubah yang dipanggil i, nilainya adalah 50. Setiap kali berikutnya yang saya gunakan i, saya tidak perlu menulis var. Ia hanya i dari sudut bahawa pada. Dengan cara yang sama, dalam C, di mana sekali kita katakan int i, kita hanya menggunakan i. Cool? Baiklah. Beralih kepada gelung, bernasib baik, ini hampir melihat exactly-- Saya fikir mereka sama seperti apa yang gelung akan kelihatan seperti dalam sesuatu seperti C di mana anda untuk gelung akan mempunyai tiga parts-- pengawalan yang, keadaan, dan kemas kini. A gelung sementara, ia kelihatan yang sama. Kami hanya memberikan syarat. Dan lakukan semasa gelung, sekali lagi, betul-betul sama. Kami memberikan syarat. Katakan saya mahu melelar over-- Saya mahu melakukan sesuatu yang lima kali. Dalam C, kita boleh menulis untuk init i sama dengan 0. i adalah kurang daripada 5, i ++. Hanya perbezaan, dalam JavaScript, daripada berkata int i sama dengan 0, kita katakan var i sama dengan 0. Indah. Itulah satu-satunya perbezaan. Sebarang pertanyaan mengenai apa-apa itu? Ya. PENONTON: Jadi dalam PHP, ia adalah sama perkara, kecuali tetapi seperti pembolehubah? Atau adalah bahawa contoh var? HANNAH Blumberg: Ya. Jadi dalam PHP, ia akan untuk menjadi tanda dolar. Jadi ia akan $ i setaraf 0, $ i adalah kurang daripada 5, $ i ++. Persoalan yang besar. Sekarang mari kita bercakap tentang pengisytiharan fungsi. Dalam C, apabila kita mengisytiharkan fungsi, kita memberi nama kepada dan kami memberikannya beberapa parameter. Dan pada awal, kita menulis jenis. Dalam JavaScript, semua kita hanya perlu menulis fungsi kata kunci yang berkata, hey, JavaScript, Saya kira-kira untuk menentukan fungsi. Dalam kes ini, ia mempunyai jumlah nama. Dan ia mengambil masa dua hujah, x dan y. Perhatikan bahawa kita tidak peduli mengenai jenis x dan y. Dan seperti C, kami mempunyai kembali perkara ini, supaya kita boleh melakukan sesuatu seperti pulangan x dan y. Dan sekarang apabila kita telah menulis ini pertama fungsi, kita boleh menggunakan sejumlah wang mana-mana. Dan itu betul-betul halus. Satu perkara yang benar-benar sejuk kira-kira JavaScript yang sangat tidak seperti C adalah bahawa fungsi boleh dilayan seperti nilai-nilai. Oleh itu, kita boleh melakukan sesuatu seperti di sini di mana saya rasa saya menutup ini up-- Saya dilindungi sehingga jumlah var part-- dan kita hanya berkata fungsi xy sama pulangan x campur y. Itulah yang akan dipanggil fungsi tanpa nama. Ia adalah satu fungsi tanpa nama. Manakala ini mengatakan fungsi Kesimpulannya, blah, blah, blah, ini hanya akan berkata fungsi. Tetapi sekarang walaupun saya mempunyai fungsi tanpa nama ini, fungsi yang benar-benar hanya nilai. Kita boleh memperlakukannya seperti nilai. Oleh itu, kita boleh menyimpannya di dalam pembolehubah yang sama cara kita boleh menyimpan 50 dalam pembolehubah. Oleh itu, kita boleh berkata, OK, saya mahu berubah-ubah, ia dipanggil Kesimpulannya, dan ia adalah fungsi ini. Jadi kedua-dua perkara-perkara yang benar-benar akan melakukan perkara yang sama, tetapi sintaks adalah sedikit yang berbeza dan jenis komen yang menyeronokkan. Yeah. PENONTON: Jadi, anda boleh memanggil fungsi itu adalah tanpa nama dengan berkata, kurungan jumlah 2, 5? HANNAH Blumberg: Ya. Anda boleh memanggil ini tanpa nama berfungsi dengan cara yang sama. Anda akan melakukan jumlah (2, 5) ;. Itu akan menjadi betul-betul halus. Jika saya tidak melakukan jumlah var sama fungsi, jika saya hanya dipadam this-- Saya tahu ia adalah di tangan saya, tetapi berpura-pura saya dipadam this-- kemudian fungsi yang jenis hanya hilang. Anda tidak boleh menggunakannya lagi kerana anda tidak mempunyai nama untuk itu. Adalah sukar untuk merujuk kepada sesuatu anda tidak tahu apa yang perlu memanggil. Soalan yang baik. Yeah. PENONTON: Bolehkah anda merujuk jumlah wang tempat-tempat lain dengan nilai x + y? HANNAH Blumberg: Bolehkah anda jumlah rujukan di tempat-tempat lain dengan x nilai ditambah y? Saya tidak sepenuhnya pasti apa yang anda maksudkan. PENONTON: Jadi masa lalu anda separuh tanpa nama fungsi adalah jumlah adalah sama dengan ini fungsi tanpa nama, jadi jumlah wang kini merupakan pembolehubah yang anda can-- HANNAH Blumberg: Betul. Jadi jumlahnya adalah pembolehubah, tetapi ia actually-- supaya jumlah wang pembolehubah yang nilai adalah fungsi. Jadi ia adalah fungsi, yang merupakan jenis satu perkara yang pelik untuk membalut kepala anda sekitar kerana kita telah bermain dengan C dan anda tidak boleh melakukannya dalam C. Tetapi sekarang kita boleh memanggil menjumlahkan Cara yang sama kita boleh memanggil sejumlah wang di sini. PENONTON: OK. HANNAH Blumberg: Ya. Soalan yang baik. Yeah. PENONTON: Oleh itu, kita tidak menggunakan prototaip dalam PHP atau JavaScript? HANNAH Blumberg: Tidak, kami tidak perlu menggunakan prototaip, terutamanya dalam JavaScript. Jadi satu perkara amalan yang tidak baik yang saya akan mengatakan bahawa anda tidak patut lakukan adalah anda tidak perlu menulis var i = 50. Anda hanya boleh mula melakukan i = 50. Dan hanya akan membuat i pembolehubah global. Ia adalah amalan yang sangat tidak baik kepada tidak pernah berkata explicity var i, tetapi ia adalah sesuatu yang anda boleh lakukan. Jurubahasa bukan akan menjerit pada anda. JavaScript agak seperti, anda boleh melakukan apa yang anda mahu. Oh maaf. Ada dua. Dalam seluar oren. Teruskan. PENONTON: Tidak, anda pergi dulu. PENONTON: Tidak, saya hanya berkata Saya tidak mempunyai tangan saya ke atas. OKEY. Jadi, jika anda mahu menyeksa masa pertama, kini kesimpulan, kita panggil ia dengan cara yang sama, x, y, seperti setiap kali? HANNAH Blumberg: Ya. Jadi kedua-dua dasarnya melakukan perkara yang sama. PENONTON: Dan apa yang kelebihan menggunakan satu atau yang lain? HANNAH Blumberg: Tiada kelebihan menggunakan satu atau yang lain. Saya hanya mahu menunjukkan dua keping yang berbeza sintaksis. Banyak kali di mana tanpa nama fungsi lakukan mempunyai tujuan adalah jika hujah yang lain fungsi harus fungsi. Dan kita akan melihat bahawa dalam hanya kedua dengan Ajax. Jadi, jika yang tidak masuk akal, menyimpannya di belakang kepala anda. Itulah di mana tanpa nama fungsi mungkin berguna kerana ia tidak benar-benar bernilai memberikan nama sejak kami Hanya akan menggunakannya sekali. Yeah. PENONTON: Jika x dan y perubahan kemudian pada, akan meringkaskannya berubah juga? HANNAH Blumberg: Jika x dan y perubahan kemudian, akan meringkaskannya berubah juga? Jadi ini adalah sebenarnya saya berfikir sesuatu yang, sekali lagi, ia hanya berasa sangat berbeza dari C. Ini bukan nilai. Ia bukan 5. Ia hanya fungsi itu sendiri. Jadi sebaik sahaja anda memberikan parameter, maka anda benar-benar akan mengira nilai. MARIA ZLATKOVA: Kemudian anda boleh memanggil fungsi dan menggunakannya untuk mendapatkan beberapa nilai. HANNAH Blumberg: Betul. Tepat sekali. Yeah. PENONTON: Jadi jika anda hanya menyimpannya dalam pembolehubah, seperti var x sama jumlah dua values-- HANNAH Blumberg: Ya. Jadi anda hanya boleh melakukan jumlah var sama dengan hasil tambah dua nilai. Yeah. Apa-apa soalan lain? Yeah. PENONTON: Tetapi kiranya mengelirukan jumlah dan jumlah wang? Seperti jika anda memanggil jumlah variabel, anda akan memanggil jumlah majlis itu? HANNAH Blumberg: Mm. Mm. Jika anda melakukan sesuatu seperti, jumlah sama dengan jumlah 2, 5? PENONTON: Ya. HANNAH Blumberg: Saya percaya bahawa akan menulis ganti nilai jumlah. Jadi satu lagi yang menarik perkara tentang JavaScript ialah pembolehubah tunggal boleh mengambil pada sekumpulan jenis yang berbeza. Amalan yang tidak baik. Anda tidak perlu melakukan sesuatu seperti apa yang anda hanya berkata. Tetapi dalam C, jika saya ditetapkan sama dengan integer, kita tahu bahawa ia tidak pernah akan menjadi rentetan. Ini tidak berlaku dalam JavaScript. Ya, soalan yang baik. Apa-apa lagi? Baiklah. Melakukan semua tepat pada masanya. Menyimpan pergi. Baiklah. Jika kita melihat array dalam JavaScript, di sini adalah contoh cepat daripada pelbagai rentetan. Dan array boleh berkembang secara dinamik. Mereka tidak mempunyai saiz tetap dengan cara yang sama yang mereka lakukan dalam C. Kita boleh mengakses unsur-unsur dengan hanya kurungan persegi. Yang kelihatan banyak seperti PHP dan banyak seperti C, di mana kita boleh berkata, dalam kes ini, jika saya mahu JavaScript perkataan, saya akan jangan arr kurungan persegi dengan 0, 1, 2. Dan kemudian jika anda masih ingat pada C apabila kita mahu mendapatkan panjang array, ia adalah benar-benar menjengkelkan. Tetapi dalam JavaScript, super mudah. Semua yang kita lakukan, .length. Menyebabkan ia panjang. Itu sahaja. PENONTON: Itu mudah. HANNAH Blumberg: Ya, membuat hidup anda lebih mudah. OK, tidak object-- sana. Objek dalam JavaScript rasa banyak seperti structs dalam C dan array bersekutu dalam PHP. Jadi apa yang kita telah melihat banyak adalah JSON, yang bermaksud JavaScript Object Notation. Dan ia pada dasarnya cara yang daripada penstrukturan data kami. Jadi mari kita lihat contoh, mungkin yang paling mudah. Jadi di sini adalah satu contoh objek yang menyimpan kelas, CS50. Dan aku berkata kelas, saya maksudkan sudah tentu, tidak like-- yeah, kursus, CS50. Dan anda akan melihat bahawa segala-galanya dalam objek akan dibendung dalam pendakap kerinting. Dan kita mula mengaitkan nama medan atau kekunci dengan nilai-nilai yang berbeza. Jadi, anda boleh mula melihat bagaimana jenis ini terasa seperti pelbagai bersekutu dalam PHP. Jadi, kita akan mengaitkan padang atau kunci nama, sudah tentu, dengan tali, CS50. Kita akan mempunyai tenaga pengajar. Kami akan mempunyai TFS. Kita akan mempunyai beberapa psets dan kita akan telah direkodkan. Dan satu perkara yang sejuk untuk diperhatikan adalah semua perkara-perkara ini mempunyai pelbagai jenis, dan itu betul-betul halus. Ia baik untuk objek, sebenarnya, ia mungkin dijangka untuk objek untuk mempunyai gabungan tali dan nombor dan Booleans dan array dan apa-apa sahaja anda mungkin ingin mempunyai dalam objek anda. Dan ambil perhatian bahawa ini akan menjadi nama-nama atau kekunci, dan kemudian kita hanya menetapkan ia sama dengan usus kecil. PENONTON: Apa sebenarnya yang JSON bermakna? HANNAH Blumberg: Apa sebenarnya yang JSON bermakna? JSON hanya bermaksud JavaScript Object Notation. Ia hanya satu cara untuk pemformatan. Yeah. Ia adalah satu cara memformat data kami. Dalam C, ia structs. Dalam PHP, ia array bersekutu. Dalam JavaScript, kami mempunyai objek. PENONTON: Jadi CS50 adalah objek? HANNAH Blumberg: CS50 adalah objek dalam kes ini. Sekarang, bagaimana kita benar-benar akses bidang-bidang atau menukar bidang tersebut. Sebagai contoh, katakan kami memutuskan bahawa anda mahu satu kurang pset semester ini. Daripada sembilan, kami hanya akan mempunyai lapan. Bagaimana kita akan mengubah itu? Oh, cara salah. Terdapat dua cara yang boleh kita lakukan itu. Nombor satu adalah dengan titik notasi dan nombor dua adalah dengan notasi kurungan persegi. Jadi, sebagai contoh, jika saya mahu menukar atau akses bidang psets dalam objek CS50 kami, apa yang saya akan lakukan adalah CS50.psets, jadi nama objek titik nama bidang atau kunci. Sangat begitu juga, ia betul-betul bersamaan dengan melakukan CS50, dan kemudian dalam pendakap persegi, psets. Cool? Yeah. PENONTON: Begitu juga JSON secara teknikal JavaScript lagi, walaupun dalam psets kita memisahkan ia keluar [didengar]? HANNAH Blumberg: Pasti. Jadi persoalannya ialah, adalah JavaScript dan JSON bersamaan? Jadi JSON adalah notasi, pada dasarnya cara kita menulis objek dari JavaScript. Jadi mereka tidak sama. Saya akan berkata JavaScript, terdapat objek dalam JavaScript. JSON mengambil objek dan mencetak mereka dan memaparkannya atau menyimpan mereka dengan cara yang baik. Jadi JSON tidak pengaturcaraan bahasa cara yang JavaScript. Ia hanya notasi untuk objek kami dalam JavaScript. Yeah. PENONTON: Jadi apa sebenarnya [Didengar] meliputi? HANNAH Blumberg: Pasti. Jadi ini sebenarnya tidak apa-apa. Ini adalah hanya satu cara untuk mengakses. Katakan kita mahu menukar bilangan set masalah 9-8. Apa yang kami lakukan adalah melakukan sesuatu seperti CS50.psets = 8 ;. Ya, persoalan yang besar. Ini adalah hanya untuk menunjukkan kepada anda sintaksis. Adakah sebenarnya tidak berbuat apa-apa yang berguna. Ada soalan? Bergerak kanan bersama-sama. Jadi mari kita lihat satu contoh yang cepat bagaimana JavaScript berfungsi kerana saya memberitahu anda ia melakukan semua perkara-perkara ini sejuk dan membolehkan kita untuk mengubah suai laman web. Mari kita sebenarnya melihat dalam tindakan. Oleh itu, mengambil, sebagai contoh, fail HTML ini. Dan perkara yang saya mahu anda untuk memberi tumpuan kepada adalah ini tag tertentu, yang butang, dengan id search_button. Ia hanya pada halaman. Jadi sekarang mari kita lihat apa kita sebenarnya boleh lakukan. Nah, katakan apabila anda klik butang itu, kami ingin alert-- yang anda klik butang. Mari kita lihat bagaimana kita boleh berbuat demikian. Jadi window.onload-- ini bukan sesuatu yang anda lihat di dalam kelas, oleh itu tidak perlu tahu ia untuk kuiz. Tetapi ini pada dasarnya mengatakan, OK, panggilan fungsi ini apabila beban tingkap. Jadi itu hanya jenis kod persediaan. Jangan terlalu bimbang tentang itu. Apa yang saya mahu anda untuk memberi tumpuan kepada adalah di sini. Kami berkata var Searchbutton sama document.getElementByID search_button. Jadi seperti yang anda sangka, apa ini tidak adalah ia berkata, OK, pergi mencari elemen dengan ibu search_button. Dan sekarang kita ada yang unsur yang sebenar dan saya akan simpan dalam Searchbutton berubah-ubah. Dan sekarang kita sebenarnya boleh menggunakan elemen yang dan mengubahnya, atau mengakses nilai, perkara-perkara seperti itu. Kami benar-benar boleh mula terlibat dengan laman web. Jadi di sini saya katakan, OK, sekarang bahawa saya mempunyai butang yang, apabila di klik, memanggil fungsi tanpa nama ini. Jadi ini adalah di mana tanpa nama fungsi menjadi berguna. Dan apa fungsi lakukan? Nah, ia hanya panggilan ini fungsi amaran dan ia berkata, anda klik butang Cari. Jadi apa yang akan berlaku jika saya pergi ke mana sahaja yang HTML ini hidup dan saya klik butang, Saya akan mendapat amaran sedikit mewah yang mengatakan bahawa anda klik butang. Jadi perkara-perkara yang memberi tumpuan kepada sini-- document.getElementByID mendapat HTML tertentu unsur dengan ID yang diberikan. Dan sekarang kita boleh menetapkan apa yang patut berlaku apabila elemen tersebut diklik. PENONTON: Kita perlu meletakkan semua itu dalam? HANNAH Blumberg Maaf? PENONTON: Adakah kita perlu fizikal kod semua itu? HANNAH Blumberg: Adakah kita perlu fizikal kod semua itu? Ya. Bukankah ini jenis menjengkelkan? Ini adalah banyak kod. PENONTON: Anda boleh mengimport sesuatu. HANNAH Blumberg: Betul. Kita boleh menggunakan sesuatu. Dan khususnya-- oh, itu memberitahu saya saya perlu mengajar bahagian. Khususnya, mari kita menggunakan perpustakaan jQuery, kerana itu adalah benar-benar panjang dan benar-benar menjengkelkan dan saya mahu dapat untuk memudahkan ia dan membuat ia lebih pendek dan lebih mudah untuk menulis. Jadi jQuery sebuah perpustakaan JavaScript. Jadi JavaScript adalah pengaturcaraan bahasa; jQuery adalah perpustakaan. Dan ia membuatkan sekumpulan perkara yang lebih mudah. Ia menjadikan berubah dan akan merentasi dokumen HTML lebih mudah. Ia menjadikan aktiviti pengendalian yang mudah. Ia menjadikan animasi lebih mudah dan ia membuatkan Ajax lebih mudah. Jadi mari kita melompat ke dalam dua perkara-perkara sekarang. Maafkan saya. Sebelum kita lakukan, beberapa sintaks asas. Ini adalah apa yang kebanyakan panggilan untuk perpustakaan jQuery kelihatan seperti. Kami menggunakan dolar ini sign-- ada tanda-tanda sambungan kepada PHP, hanya inconvenient-- nama pemilih, dot, dan kemudian tindakan. Jadi mari kita lihat beberapa contoh-contoh konkrit itu. Jadi ini sebenarnya adalah sama kod dari slaid acara tersebut. Jadi, perkara ini hodoh lama menjadi , perkara ini lebih bagus kecil. Jadi mari kita cuba untuk memecahkan ini ke bawah. Ini mengatakan, OK, jQuery-- dolar ini sign-- jQuery, mencari saya tingkap. Jadi itulah pemilih. Apabila ia memuatkan, panggilan fungsi ini. Jadi itulah segala-galanya di dalam. OKEY. Setakat ini, begitu baik? Baiklah. Sekarang, jQuery, mencari saya perkara dengan ibu search_button. Dan apa yang ia diklik, memanggil fungsi ini. Dan kemudian ini fungsi ini betul-betul sama. Lakukan sedikit berjaga-jaga, anda klik butang Cari. Jadi ia adalah benar-benar baik. Ia benar-benar memeluwap dan memudahkan kod kami. Bagaimana saya tahu bahawa ia ID search_button dan tidak suka kelas search_button? PENONTON: Hashtag? HANNAH Blumberg: Ya. Simbol hash, ia seperti CSS. Jadi ingat, dengan CSS, apabila kita mahu untuk memilih sesuatu dengan ID, kita menggunakan tanda pound. Dan apabila kita mahu untuk memilih sesuatu dengan kelas, kita menggunakan titik. Yang besar. Masuk akal? Jadi jQuery sepatutnya hanya membuat hidup kita lebih mudah. Yeah. PENONTON: Jadi saya sedikit keliru bagaimana fungsi tanpa nama berfungsi. Adakah anda menamakan anonymouse ini fungsi, berfungsi? Bagaimana ia dipanggil? HANNAH Blumberg: Pasti. Jadi fungsi hanya kata kunci yang berkata, saya kira-kira untuk menentukan fungsi. PENONTON: Oh, OK. HANNAH Blumberg: OK? Dan kemudian kita lulus sebagai hujah supaya- mari one-- ini dalaman untuk fungsi klik. Jadi ya, jadi fungsi itu, fungsi tanpa nama ini, menjadi hujah yang sebenar. Jadi ingat dalam JavaScript, kita boleh merawat berfungsi sebagai nilai-nilai. PENONTON: Oh, OK. HANNAH Blumberg: Ya. Saya suka bahawa "oh." Nice. Soalan-soalan lain? Time? MARIA ZLATKOVA: Baik. Yang baik. HANNAH Blumberg: Awesome. Sesetengah jQuery berguna cepat. Saya tidak akan pergi melalui semua ini. Ini slaid akan dalam talian sedikit kemudian, supaya anda boleh menyemak ia keluar sedikit kemudian. Tetapi pada dasarnya, umum corak memegang mana kita katakan, OK, hey, jQuery, di sini saya pemilih dan kemudian di sini adalah sesuatu tindakan. Dan anda boleh melakukan perkara-perkara seperti akses nilai borang, mengakses beberapa HTML, kawalan apa yang berlaku apabila pengguna mengemukakan satu bentuk, perkara seperti itu. Ya. PENONTON: Jadi dalam peperiksaan, kita akan perlu tahu agak banyak dari dokumentasi jQuery. Jadi memandangkan kami menyalin / menampal jQuery dokumentasi untuk lembaran menipu kita, di mana adalah garisan yang dilukis? Seperti berapa banyak yang kita perlu tahu? HANNAH Blumberg: Soalan yang hebat. Persoalannya ialah dasarnya memandangkan anda tidak boleh mengakses dokumentasi jQuery semasa ujian, berapa banyak yang perlu anda tahu? Kami tidak akan mengharapkan anda untuk datang dengan beberapa fungsi rawak bahawa kita akan mengharapkan anda untuk Google. Perkara-perkara yang permainan adil adalah saya akan mengatakan hanya jenis sintaks umum, dapat memilih dengan ID dan oleh class-- jadi seperti CSS. Dan kemudian dan fungsi sebenar dirinya sendiri, kita mungkin akan memberitahu anda. Yeah. PENONTON: Jadi apabila anda memilih mengikut kelas bermakna titik. HANNAH Blumberg: Ya, betul-betul. Yang baik. Apabila anda memilih mengikut kelas, ia akan hendak dot bukannya tanda pound. Ya. PENONTON: Adakah anda pergi perbezaan antara memilih oleh ID dan oleh kelas? HANNAH Blumberg: Pasti. Perbezaan antara memilih ID dan memilih mengikut kelas. Jadi seperti Maria berkata, sedikit sebelum ini, terdapat hanya boleh menjadi salah satu elemen HTML dengan ibu yang diberikan, manakala kelas, ia membolehkan kami untuk mengumpulkan sekumpulan unsur-unsur yang berbeza bersama-sama, supaya perkara-perkara yang berkaitan, tetapi tidak sama. Adakah ini menjawab soalan? Awesome. Ya. PENONTON: Bagaimana jika anda mempunyai berbilang perkara-perkara yang berada di dalam kelas yang sama? HANNAH Blumberg: Apa yang berlaku jika anda mempunyai beberapa perkara yang adalah kelas yang sama? Jadi, sebagai contoh, jika kita berada hanya menggunakan tulen JavaScript, kita akan melakukan sesuatu seperti document.getElementsByClass. Dan kemudian apa yang sebenarnya tidak adalah pulangan pelbagai elemen. Dan anda perlu sama ada melelar mereka atau mencari yang mana yang anda mahu. Ia tidak akan memberi anda satu elemen tunggal. Ia akan memberikan anda pelbagai elemen. Persoalan yang besar. Apa-apa lagi? Awesome. Jadi saya fikir jika anda biasa dengan sebarang jQuery yang anda lihat dalam pset, anda perlu baik untuk pergi. Soalan? Oh tidak. Saya benar-benar perlu mengajar. Berehat. Ia akan selamat. Saya akan sampai ke sana. Mari kita bercakap tentang Ajax. Jadi Ajax akan menjadi a-- baik, mari kita mulakan dengan apa yang ia bermaksud. Ia singkatan. Ia bermaksud Asynchronous JavaScript dan XML. Dan XML pada dasarnya akan menjadi [Didengar] dengan jenis data kami. Tetapi kita tidak benar-benar digunakan XML. Sebaliknya, kita hanya menggunakan JSON. Jadi, pada asasnya, ia adalah beberapa data-- tak segerak, JavaScript, dan data, dalam kes ini, JSON. Dan matlamat kami, seperti yang telah dinyatakan sedikit sebelum ini, yang dapat membuat permintaan, permintaan telah kerjakan perkara yang di latar belakang, tetapi terus melakukan apa sahaja yang kita ingin lakukan. Dan kemudian apabila maklumat yang bersedia, maka kami akan menggabungkan ia. Jadi mari kita lihat apa ini sebenarnya kelihatan seperti. Dan ini, anda perlu sedikit biasa dari pset8, yang anda hanya bertukar masuk. Jadi di sini adalah jQuery yang sah fungsi yang kita mungkin ingin tahu about-- tanda dolar ini. Maka ia berkata fungsi jQuery, .getJson. Dan apa fungsi ini tidak adalah ia mengambil URL dan beberapa parameters-- jadi saya fikir dalam kes daripada pset8, ia adalah seperti, URL adalah articles.php dan parameter adalah pergi = beberapa kod pos. Dan ia berkata, OK, membuat permintaan kepada URL ini dengan parameter diberikan. Dan itu hanya berlaku. Setelah selesai, ia sama ada akan berjaya menyelesaikan atau ia akan gagal. Jadi ini adalah sama dengan panggilan Rob dan meminta dia melakukan sesuatu. Dan kemudian apabila ia memohon kembali, dia sama ada akan berkata saya lakukan atau saya gagal. Jadi, dalam kes di mana anda berada dilakukan, anda mengatakan, OK, saya dilakukan. Dan kemudian anda memanggil fungsi ini. Dalam kes ini, ia akan menjadi fungsi yang mengambil beberapa maklumat. Yang kita biasanya mengambil berat tentang adalah data, data yang kita sebenarnya kembali akibat daripada memanggil .getJSON. Dan anda boleh melakukan sesuatu dengan ia. Jadi dalam kes pset8, kita dipaparkan sebagai senarai. Fail akan menjadi satu majlis yang dipanggil jika permintaan itu gagal atas apa jua sebab. Dan dalam hal pset8, kita hanya console.log ia. Sebarang pertanyaan mengenai itu? Yeah. PENONTON: Bolehkah kita hanya menggunakan fungsi theta dan bukan fungsi, textStatus, jqHXR. HANNAH Blumberg: Pasti. Jadi ya, saya fikir dalam pset, kita hanya melihat fungsi data. Jadi ia hanya the-- ya, OK. Itulah yang kita lihat dalam pset. Itu betul-betul halus. Ini hanya jika anda mahu untuk menarik keluar maklumat lanjut, ini adalah perkara-perkara yang anda boleh dapatkan dari .getJSON. Soalan yang baik. Apa-apa lagi? Yeah. PENONTON: Jadi .getJSON adalah Ajax? HANNAH Blumberg: OK. Jadi ini adalah jenis bahagian yang sukar. Ia adalah fungsi jQuery yang membolehkan anda untuk melakukan panggilan tak segerak. Dan orang-orang panggilan tak segerak, itu apa yang kita telah merujuk kepada sebagai Ajax. Yeah. Yang telah mengambil masa yang lama untuk benar-benar menarik selain apabila saya adalah seorang pelajar. PENONTON: Bolehkah anda mengatakan bahawa sekali lagi? HANNAH Blumberg: Ya. Bolehkah saya mengatakan bahawa sekali lagi? Fungsi .getJSON, ia adalah fungsi jQuery. Dan ia akan membuat panggilan tak segerak. Inilah panggilan tak segerak, kami telah telah merujuk kepada mereka sebagai Ajax. Apa-apa soalan lain? Kami mempunyai hanya beberapa minit. Dan Maria akan mengakhiri dengan keselamatan dan kemudian kita akan untuk hanya kira-kira dilakukan. MARIA ZLATKOVA: Awesome, OK. Jadi ini is-- hanya mengambil pasangan saat untuk melihat lebih ini. Dan ini bukanlah sesuatu yang benar-benar hebat. Dan seseorang boleh beritahu saya kenapa? Apa yang sedang berlaku di foo dan boleh boleh berpotensi menyebabkan sesuatu yang buruk, dan apa yang dinamakan? Yeah. PENONTON: Jika hujah itu diluluskan di lebih daripada 12 aksara, ia boleh melimpah. MARIA ZLATKOVA: Betul. Perfect. Apakah ia dipanggil? Anda hanya menyebut ia. PENONTON: Buffer limpahan. MARIA ZLATKOVA: Yup, buffer overflow. Jadi ini adalah sesuatu yang kita rujuk sebagai buffer overflow. Dan kita melihat bahawa di dalam foo, kami telah ditakrifkan penampan kami, c, dengan saiz 12. Walau bagaimanapun, dalam utama, kita tidak menyemak dalam mana-mana cara sekalipun sama ada argv1-- supaya ialah dengan mendakwa kedua. Kami tidak memeriksa sama ada Saiz adalah wajar. Jadi, jika kita mempunyai pengguna terutamanya yang berniat jahat yang dimasukkan ke dalam beberapa hujah itu adalah lebih lama daripada 12, dan kemudian berpotensi luar batas-batas yang hujah, mempunyai beberapa kod boleh laksana bahawa dia telah cuba untuk melakukan sesuatu yang tidak baik bersama ia; maka ini, apa yang akan berlaku, akan mengatasi pulangan alamat fungsi foo itu, menyebabkan fungsi untuk apabila kembali untuk melaksanakan kod itu. Dan kemudian perkara-perkara buruk boleh berlaku. Adakah ini masuk akal untuk semua orang? Dan bagaimana kita boleh melindungi daripada ini? Ada apa-apa cadangan? Pada dasarnya, di dalam berpotensi foo, bagaimana kita boleh periksa untuk memastikan yang yang tidak boleh berlaku? PENONTON: Jika saiz 12 melebihi, anda akan memperuntukkan memori tambahan? MARIA ZLATKOVA: Cadangan adalah, memperuntukkan memori tambahan saiz melebihi. Sebenarnya, kita boleh melakukan sesuatu yang banyak lebih mudah daripada itu juga. Kita hanya boleh mendapatkan panjang rentetan hujah yang dimasukkan, memeriksa jika yang kurang daripada atau sama dengan 12-- iaitu apa yang kita mahu ia yang mendakwa bahawa kerana kita tidak mahu ia melebihi batas-batas penampan kami. Dan kemudian jika tidak, kita boleh bekerja dengan hujah. Dan kemudian jika ia berlaku, kita benar-benar mahu untuk Yello berpotensi pada pengguna. Tetapi ini adalah bagaimana kita akan berbuat demikian. Ya. PENONTON: Bolehkah anda menjelaskan cepat sebenar memcpy? MARIA ZLATKOVA: Oh, maaf. Ya. Memcpy mengambil apa sahaja is-- maaf, OK. Memcpy mengambil apa yang ada di bar, apa sahaja yang diluluskan ke foo sebagai hujah baris arahan. Oleh itu, ia akan mengambil argv1. Argv1 dipanggil bar di sini. Oleh itu, ia akan mengambil bar dan ia akan menyalinnya ke dalam c. PENONTON: OK. MARIA ZLATKOVA: Dan ia akan copy-- hujah ketiga hanya merujuk berapa banyak ia akan menyalin ke dalam c. PENONTON: Ah. Jadi menyalin satu ini semua itu ketika itu. MARIA ZLATKOVA: Ya, ia menyalin semua itu. Ya. Pertama, kita pastikan bar tidak sama dengan nol kerana ia adalah penunjuk. Kemudian kami mendapatkan panjang tali bar. Kami memastikan bahawa ia kurang daripada atau sama dengan 12. Dan kemudian kerana kita ada memastikan, kita boleh sebenarnya memcpy dan pastikan bahawa itu OK. Ada soalan? Yang besar. Saya mempunyai dua soalan betul atau salah. Bolehkah sesiapa beritahu saya dengan segera jika ini adalah benar atau palsu? Ya, ia adalah palsu. Tepat sekali. Kedua-dua mereka adalah palsu. Jadi menggunakan kata laluan tunggal adalah idea tidak pernah benar-benar baik kerana jika seseorang mengetahui kata laluan anda, mereka boleh hanya mengakses semua akaun anda yang lain. Dan kemudian ikon berbuat apa-apa untuk memastikan keselamatan. Kami biasanya perlu mencari HTTPS bukan HTTP dan URL. Dan beberapa lain-lain jenis serangan yang kami telah disebutkan, Daud telah disebutkan dalam syarahan, serangan suntikan SQL. Kita sudah melihat bahawa jika kita don't-- yang Fungsi CS50 Pertanyaan memastikan SQL yang serangan suntikan tidak boleh berlaku. Tetapi jika kita tidak menggunakan CS50, quote, unquote "dalam pertanyaan," kita perlu memastikan bahawa input pengguna tidak sebenarnya beberapa SQL pertanyaan yang akan menyebabkan semua meja kami yang akan digugurkan atau sesuatu yang tidak baik kepada berlaku dengan pangkalan data kami. Sesi rampasan adalah satu lagi jenis serangan yang berlaku apabila beberapa buruk orang menggunakan sesi beberapa mangsa ID untuk mengakses maklumat log masuk. Jadi contoh yang sangat remeh iaitu seperti jika kita mempunyai komputer awam, maka orang yang buruk log masuk dan kemudian mereka mempunyai kuki yang disimpan. Dan Cookies ini tidak berubah untuk sesi. Kemudian kami telah mangsa pergi dan kemudian log masuk ke laman web ini. Kuki tidak berubah untuk sesi tertentu. Dan kemudian mangsa log ke dalam laman web dan kemudian meninggalkan. Dan kemudian orang yang kembali boleh kemudian masih menggunakan ID sesi mereka untuk mengakses maklumat mereka. Jadi, itu satu contoh bagaimana yang boleh berlaku. Dan kemudian saya tidak akan bimbang terlalu banyak tentang kod tertentu atau apa-apa seperti itu yang boleh menyebabkan ini, tetapi mempunyai beberapa jenis idea apa pembolehubah yang terlibat dalam ini adalah. Dan kemudian memanipulasi header data adalah satu lagi jenis serangan yang mempunyai David telah bercakap tentang. Dan ia hanya merujuk kepada apa yang boleh berlaku apabila sambutan, HTTP tindak balas di dalam kepala kami tidak dibersihkan dengan betul. Dan mana-mana fields-- sebagai contoh, jika seseorang menulis ganti salah satu tajuk nilai-nilai yang mengandungi apa-apa lagi daripada Apakah yang mereka akan mengandungi- dan benar-benar mengandungi, sebagai contoh, 200 Kod status OK, maka mereka berpotensi tidak berniat jahat perkara yang apabila mereka tidak sepatutnya. Tetapi saya tidak akan bimbang terlalu banyak tentang kod tertentu yang boleh menyebabkan ini, hanya jenis persefahaman perkara yang peringkat tinggi seperti itu. Saya rasa ini adalah semua yang kita ada untuk menutup. Menakjubkan. Sesiapa yang mempunyai sebarang soalan mengenai apa-apa satu perkara yang kita dilindungi? Ya. PENONTON: Jadi satu jenis soalan yang lebih logistik. Apakah kandungan yang lebih tertumpu kepada perkara-perkara selepas kuiz 1? MARIA ZLATKOVA: Jadi soalan adalah, adalah kandungan tertumpu terutamanya kepada perkara-perkara selepas kuiz 1? Jadi tumpuan diberikan kepada selepas kuiz 1, kecuali yang kita perlu memberi tumpuan kepada perkara-perkara dalam pset5 dan banyak struktur data bahawa kita dilindungi. Dan kita tidak boleh mengatakan bahawa kita boleh mengabaikan apa-apa sebelum itu kerana ia dibina di atas itu juga. Jadi tumpuan kepada itu, ditambah bahan pset5 seperti termasuk dikaitkan senarai, susunan, beratur, dan segala-galanya yang Hannah pergi ke sana. HANNAH Blumberg: Betul. Ya, kami pergi ke atas semua barangan C di awal-awal dengan cepat. Tetapi pastikan untuk mengkaji semula itu. Kembali dan menonton kuiz 0 ulasan. Beberapa nota lebih logistik, hanya sementara kita mempunyai perhatian anda. Kita akan mempunyai waktu pejabat kedua-dua pada Isnin dan Selasa malam. Mereka akan berada di dalam MD 119. Ini semua di laman web, supaya jika anda tidak mendengar, tidak ada kebimbangan. MARIA ZLATKOVA: 8:30 hingga 11:00. HANNAH Blumberg: Ya, dari jam 8:30 hingga 11:00. Kami akan berada di sana. Kami akan berada di sana untuk menjawab soalan. Ia sejuk cantik dan menyeronokkan. Anda semua boleh meminta apa-apa soalan yang ada pada kuiz 1. Dan kuiz 1 adalah pada Rabu, nasib begitu baik. Jika anda mempunyai sebarang pertanyaan, mungkin datang bercakap dengan kita di sini pada satu-satu. Sejuk. Terima kasih banyak-banyak. MARIA ZLATKOVA: Terima kasih banyak, guys. PENONTON: Yay. [Tepuk tangan]