R.J. AQUINO: Mari kita memulai. Jadi ini adalah Kuis 1. Berikut adalah beberapa informasi tingkat tinggi. Halaman Tentang untuk kuis adalah ini URL, tidak lagi CS50.net, meskipun yang akan tetap bekerja. Ini CS50.harvard.edu/quizzes/2013/1. Ini adalah besar Tentang halaman, memberitahu Anda di mana dan kapan, yaitu Rabu depan dalam sekelompok kamar. Dan pada hari Rabu berikutnya, saya berarti dua hari dari sekarang. Semua informasi ini ada. Tapi itu adalah kumulatif. Jadi segala sesuatu dari paruh pertama tahun berpotensi pada kuis, karena Anda tidak bisa benar-benar canggih hal-hal di C tanpa jika kondisi dan untuk loop dan sejenisnya. Tetapi akan ada penekanan pada materi yang dibahas sejak Kuis 0, dimulai dengan structs dan file I / O. Hal ini biasanya lebih menantang daripada Kuis 0. Rata-rata biasanya lebih rendah. Belajar keras. Sementara Anda belajar, pastikan untuk menggunakan CS50/discuss untuk posting pertanyaan Anda dan membaca pertanyaan orang lain. Jadi jika Anda tidak memiliki pertanyaan, login dan membaca pertanyaan teman-teman Anda. Mereka mungkin pertanyaan yang baik. Dan mengambil kuis praktek. Kami telah memberikan kuis untuk tujuh atau delapan tahun sekarang. Mereka semua online. Pertanyaan masa depan yang serupa pertanyaan lama. Itulah cara kita membuat mereka. Kuis ini belum ada. Tak satu pun dari kita telah melihatnya. Tapi itu akan terlihat seperti kuis sebelumnya. Untuk sesi review ini, hal ini tidak daftar lengkap dari topik. Anda tidak bisa hanya mengikuti ini dan kemudian menjadi sempurna siap kuis. Jika tidak, itu tidak akan bahwa banyak dari kuis. Dan ini juga belum tentu semua yang anda perlu tahu tentang diberikan topik. Ini dimaksudkan untuk mengekspos Anda untuk hal-hal kita telah membahas, mengingatkan Anda apa yang kita tertutup, dan cara yang kita bahas itu. Tapi Anda akan harus pergi jauh dan lebih dalam ketika Anda belajar untuk periksa bahwa Anda tahu segala sesuatu tentang setiap diberikan topik dan bahwa Anda telah mengisi semua sudut yang dicakup dalam perkuliahan. Catatan kuis memberitahu Anda untuk pergi ke catatan juru tulis, menonton video ceramah. Itu cara yang baik untuk memastikan bahwa Anda telah menutupi semua basis Anda. Jadi memulai, ketika saya membuat ini slide, saya mencoba untuk menempatkan di mana aku menemukan informasi. Jadi untuk File I / O, misalnya, Minggu 7, Senin kuliah, dan diposting Bagian 6 dan Masalah Set semua memiliki informasi tentang file I / O. Aku sudah melakukan ini untuk setiap topik. Jadi mereka slide judul mungkin akan membantu Anda. Jadi di sini kita memiliki file I / O. Ingat, di Masalah Set 5, kami menggunakan fopen, fclose, fwrite, fread, dan fseek. Setelah pulih 30ish JPEG dan setelah diubah ukurannya dan kacau dengan bitmap, Anda harus cukup akrab dengan fungsi-fungsi ini dan bagaimana mereka bekerja. Jika Anda tidak lagi akrab, pasti meninjau mereka. Dan pastikan Anda memahami apa argumen yang berbeda, ketika mereka sedang digunakan. Namun umum bug terkait berkas Anda mungkin bertanya tentang - baik, jika Anda lupa untuk memeriksa apakah fopen benar-benar bekerja sebelum Anda pergi ke memodifikasi file. Itu bisa menjadi buruk. Jika Anda lupa untuk fclose file bahwa Anda telah fopened, yang mirip dengan kebocoran memori. Itu sangat buruk. Dan lupa untuk memeriksa apakah Anda sudah mencapai akhir file sebelum Anda mulai menulis untuk itu. Jadi jika Anda berkata, hei, aku di akhir file. Beri aku 5 byte lagi. Nah, yang mungkin tidak akan bekerja seperti yang Anda harapkan. Itu benar-benar untuk File I / O, karena kami melakukan begitu banyak dengan masalah yang ditetapkan. Jadi, jika Anda mengerti apa yang sedang terjadi Soal Set 5, mengingat bitmats dan JPEG, maka Anda mungkin semua ditetapkan untuk File I / O. Jika itu sedikit fuzzy, pasti meninjau masalah itu mengatur dan materi terkait. Structs adalah topik yang berada di garis antara 0 dan Quiz Kuis 1. Tidak cukup membuat cut untuk Kuis 0. Jadi mereka pasti akan berada di Quiz 1, Minggu 7, Senin. Apa struct? Di sini kita menunjukkan struct. Ini seperti jenis baru. Ini seperti sebuah wadah untuk beberapa bidang. Dalam hal ini, kami telah menyatakan struct mahasiswa yang memiliki dua bidang - string, kita panggil nama dan int, kita panggil usia. Jadi ketika saya melewati sekitar siswa atau aku memodifikasi siswa, saya akan dapat mengakses nama dan usia mereka. Mari kita lihat beberapa kode untuk itu. Di sini kita melihat bahwa saya telah menyatakan seorang mahasiswa s, seperti Saya menyatakan setiap variabel - int x, int y, dan sebagainya. Berikut mahasiswa s. Dia mulai dengan apa-apa yang di ladang. Jadi mari kita mengatur mereka. Anda menetapkan bidang struct dengan dot. Jadi saya katakan di sini bahwa s.name = RJ. Dan s.age = 21. Anda juga dapat memperbarui bidang dengan cara yang sama Anda akan memperbarui nilai variabel. Jadi saya ingin mengubah nama saya dari RJ dengan ada periode ke R.J. mengeja cara yang benar. Ini akan s.name = RJ, sama seperti yang kita katakan itu awalnya. Dan kemudian Anda dapat mengaksesnya. Jadi kita sudah mengatur mereka. Kami telah memperbarui mereka. Anda juga dapat mengaksesnya dengan cara yang sama. Jadi di sini, saya mencetak R.J. Adalah 21 tahun. Dan aku mengakses nilai-nilai dengan s.name dan s.age. Jadi yang mengakses structs dengan notasi titik. Yep, pertanyaan? AUDIENCE: Apakah ada alasan pada slide sebelumnya bahwa Anda tidak menempatkan siswa pada baris paling atas, seperti typedef struct mahasiswa dan kemudian mahasiswa di akhir? R.J. AQUINO: Jadi pertanyaannya adalah, pada slide ini, kita biasanya terlihat typedef struct node dan kemudian bidang struct dan maka node kata. Dan bagaimana datang ke sini saya tidak mengatakan, typedef struct mahasiswa dan kemudian bidang struct dan kemudian mahasiswa? Alasannya adalah bahwa saya tidak perlu mengaksesnya dalam struct. Jadi tidak apa-apa untuk meninggalkan tanpa nama. Saya hanya bisa meninggalkan sebagai sebuah struct anonim. Alasan kami melakukannya untuk daftar terhubung dan hal ini karena di dalam Anda perlu untuk referensi bintang struct node. Jadi struct harus memiliki nama, sehingga Anda dapat mengaksesnya kemudian. Ini adalah detail kecil. Tapi Anda biasanya akan melihat struct typedef kurung kurawal jika Anda tidak perlu nama dan typedef struct beberapa nama diikuti oleh kurung kurawal jika Anda akan butuh nama. Jadi itu adalah pertanyaan yang bagus. Dan pada saat itu, kita cenderung untuk memodifikasi structs dan lulus sekitar structs oleh referensi, bukan oleh nilai. Jadi kita hanya akan lulus sekitar pointer ke structs bukan lewat di sekitar structs sendiri. Jadi, kau sangat sering akan menjadi menggunakan, dalam hal ini, mahasiswa atau * struct simpul * atau simpul * gantinya out siswa atau node. Jadi di sini, saya katakan, OK, variabel ptr akan menjadi alamat s. Ini akan menjadi pointer kepada siswa R.J. Jadi kita bisa mendapatkan di bidang-bidang sama seperti yang kita mendapatkan apa-apa. Pertama, ID referensi pointer untuk mendapatkan struct. Itu * ptr dan kemudian titik dan kemudian usia. Jadi untuk mengakses lapangan, dan saya telah memperbarui sekarang menjadi 22, karena, mari kita mengatakan, itu ulang tahun saya. Ada sintaks pintas menggunakan panah di sini. Usia panah Jadi ptr hanya sama seperti * ptr.age. Sekarang, itu sesuatu yang harus Anda menghafal dan mengingat. Anda menggunakannya banyak di pset6, yang pset ejaan. Tapi ini sebenarnya apa yang terjadi di bawah tenda. Ini dereferencing pointer dan kemudian mengakses itu. Pertanyaan? AUDIENCE: [Tak terdengar]. R.J. AQUINO: Jadi mengapa kita menggunakan pointer sebagai structs bukan structs sendiri? Alasannya akan jika Anda melewati struct ke fungsi, Anda mungkin ingin lulus sekitar hanya 4 atau lebih byte yang mewakili pointer, seperti bertentangan dengan potensial 30 atau 40 byte yang struct. Jadi melewati sesuatu ke fungsi lebih mudah ketika hal lebih kecil singkatnya. Pertanyaan? AUDIENCE: Anda mungkin telah disebutkan ini pada awalnya, tetapi ada slide lain pada [Tak terdengar]? R.J. AQUINO: Slide ini akan setelah sesi ulasan. Kami akan posting mereka di situs web. Jadi pindah dan pindah sedikit lebih cepat, kita akan berbicara tentang data struktur. Ada banyak. Kita membahas banyak dari mereka. Inilah yang harus Anda mengerti tentang struktur data. Anda benar-benar harus memahami dengan tinggi tingkat apa struktur masing-masing adalah. Dapatkah Anda menjelaskan dalam bahasa Inggris untuk Anda teman yang belum diambil CS50 bagaimana kita mengorganisasi data kami dan mengapa kami akan menggunakan sesuatu dengan cara ini? Itu satu hal. Hal kedua, memahami implementasi. Jadi memahami bagaimana menggunakan hal-hal ini di C. Dan kita akan pergi selama ini. Dan kemudian hal tiga akan tahu menjalankan kali dan keterbatasan berbagai struktur yang Anda gunakan. Jadi mengerti mengapa Anda akan menggunakan hash table bukan array. Memahami seberapa cepat, rata-rata, mengakses tabel hash. Mengerti apa operasi yang cepat pada linked list tapi lambat pada array dan sebaliknya. Jadi untuk memahami bahwa, Anda harus memahami Big-O notasi hanya tahu bagaimana berbicara tentang ini macam hal. Dan kita akan berbicara tentang itu. Sehingga hal pertama, terkait daftar. Berikut adalah gambaran tingkat tinggi dari linked list. Kami menunjukkan ini di kelas. Kami biasanya memiliki 10 orang berdiri di atas panggung. Tapi kami memiliki serangkaian node di mana masing-masing node memiliki beberapa nilai dan pointer nilai berikutnya. Jadi untuk mendapatkan dari satu node ke yang berikutnya, Anda hanya mengatakan, beri aku node berikutnya. Anda memiliki simpul tersebut. Berikan simpul berikutnya. Anda memiliki simpul tersebut. Beri aku node berikutnya dan seterusnya sampai tidak ada simpul kiri. Jadi terus berbicara tentang itu pada tingkat tinggi. Ini sangat mudah untuk memasukkan hal-hal menjadi linked list. Jika Anda tidak peduli tentang perintah, Anda hanya bisa drop tepat di awal. Itulah waktu yang konstan. Tapi sulit untuk menemukan nilai. Jika Anda mencoba untuk bertanya, adalah tujuh dalam daftar saya? Anda harus melalui setiap nilai tunggal. Apakah ini tujuh? Apakah ini tujuh? Apakah ini tujuh? Apakah ini tujuh? Berkali-kali. Dan itu O (n). Jadi, ketika belajar untuk kuis, bandingkan dengan array. Apakah itu OK? Lampu pergi redup. OK. Ketika adalah linked list yang lebih baik? Kapan sebuah array yang lebih baik? Jadi mari kita lihat beberapa kode. Berikut adalah simpul potensial. Ini struct. Ini memiliki int n, yang akan menjadi nilai kami. Dan memiliki struct simpul * berikutnya, yang adalah pointer kita ke node berikutnya. Jadi di sini, kita dapat melihat bahwa kita terjadi telah menempatkan sebuah int di simpul kami. Tapi jika ini adalah sebuah linked list char bintang atau linked list mengapung, kami benar-benar bisa melakukannya juga. Ingat di pset6, Anda mungkin memiliki linked list dari bintang arang atau hanya char array statis. Mari kita lihat di sini di operasi. Jadi kita ingin menyisipkan baru n ke dalam linked list kami. Kami mulai dengan pointer kepala yang pointer ke node ini yang memiliki nilai n dan berikutnya pointer yang poin ke node ini adalah nilai n dan berikutnya null, karena itu node terakhir. Jadi untuk kepentingan waktu, saya akan meletakkan semua kode pada layar. Dan kita akan berjalan melalui itu beberapa baris pada satu waktu. Jadi, inilah kode. Saya harap itu dapat dibaca. Hal pertama yang kita lakukan adalah kami malloc node baru. Jadi itu membuat pointer ke node baru yang tidak cukup memiliki sesuatu yang diatur up di dalamnya belum. Kami memeriksa untuk memastikan bahwa node baru tidak null. Jika tidak, kita harus menyerah. Jadi setelah memeriksa bahwa, kita sekarang menetapkan nilai-nilai dalam node. Jadi kita menempatkan n baru ke lapangan n kami. Dan kami mengatur pointer berikutnya untuk menunjuk ke kepala aslinya, sehingga kita bisa kini telah dimasukkan ini simpul dalam daftar kami. Akhirnya, kita memiliki titik kepala global ke node baru, sehingga jika kita mulai dari kepala, kita akan ini baru pertama simpul bukan pertama lama simpul. Dan ketika fungsi ini keluar, yang variabel node baru tidak ada lagi, karena itu lokal untuk fungsi. Jadi ini adalah keadaan dunia. Kepala global kami menunjuk ke baru node pertama, yang menunjuk ke kami asli pertama node, poin yang ke node setelah itu. Itu penyisipan. Saya berharap yang relatif mudah untuk mengikuti. Jika ragu, menggambar gambar. Jadi saya menemukan bahwa berbicara tentang daftar terhubung dan melihat Kode ini sangat tidak membantu. Sedangkan melihat gambar seorang dihubungkan daftar memungkinkan saya untuk berpikir, oh, begitu Saya memiliki simpul ini di sini. Tapi kalau aku memperbarui pointer itu, itu berakhir terputus. Dan aku sudah lupa di mana node berjalan. Dan kode keluar. Dan Anda memiliki beberapa node yang terputus. Dan Anda tidak berakhir dengan daftar yang Anda inginkan. Jadi jika Anda menggambar gambar dan melakukannya langkah demi langkah, mudah-mudahan, Anda akan melihat urutan yang benar dari hal-hal dalam hal memperbarui pointer untuk memastikan bahwa daftar datang bersama-sama. Insert relatif mudah. Yang lebih rumit akan dimasukkan ke dalam daftar diurutkan. Sebuah fungsi yang lebih rumit adalah menghapus dan menemukan, jadi melihat melalui daftar untuk melihat ada sesuatu di sana. Mungkin Anda melakukan ini dalam pset6 ketika Anda masuk ke tabel hash Anda dan Anda berkata, baik, adalah kata apple dalam linked list saya? Jadi Anda mungkin sudah melakukan ini. Tapi yang pasti, menyegarkan ingatan Anda dan mencoba untuk menemukan dan reimplement reimplement menghapus untuk linked list. Fun samping catatan, ada juga ganda-linked daftar, di mana Anda memiliki pointer yang mengarah baik ke depan dan mundur, sehingga Anda bisa pergi ke node berikutnya dan ke node sebelumnya. Dan ada pertanyaan pada tahun lalu kuis jenis itu, berbicara tentang daftar doubly-linked. Sekarang, itu adalah struktur yang Anda relatif akrab dengan, karena sebagian besar dari Anda mungkin digunakan mereka pada pset6. Berikut ini salah satu yang sedikit kurang akrab. Sebagai catatan, saya berpikir bahwa Quiz 1 adalah terutama sulit daripada Kuis 0, karena hal-hal yang Anda lakukan, Anda tidak melakukan banyak. Untuk mengambil cara lain, untuk Kuis 0, Anda telah menulis banyak C. Dan kita bertanya tentang C. Untuk Quiz 1, kita akan bertanya tentang PHP dan JavaScript, yang Anda tidak menulis sebanyak. Kita akan bertanya tentang C-kode yang Anda belum menulis sebanyak, ini hal C canggih. Jadi jelas, praktek kita hal-hal dibicarakan di kuliah yang Anda tidak perlu melakukan pada masalah ditetapkan. Omong-omong, Anda belum menulis tumpukan pada masalah yang ditetapkan. Tapi itu di kuliah. Berikut gambar-tingkat tinggi tumpukan bahwa kita menunjukkan setiap tahun. Ini tumpukan nampan di ruang makan Mather. Pada tingkat tinggi, tumpukan adalah terakhir , keluar pertama struktur data. Itu berarti Anda akan untuk meletakkan segala sesuatu di - 1, 3, 7, 12, 14, negatif 0. Satu hal yang aku tidak bisa memiliki kata - negatif 3, 0. Anda menempatkan semua hal ini masuk Dan yang terakhir Anda masukkan ke dalam adalah yang pertama salah satu yang akan keluar. Jadi Anda memiliki dua operasi - mendorong dan pop. Semua menempatkan dalam bahwa aku isyarat seperti ini push. Dan kemudian ketika saya mencapai ke grab sesuatu atau mencapai di atas untuk mengambil sesuatu, itu pop. Jadi kita akan mengimplementasikan tumpukan. Dan kami menunjukkan mereka dalam kuliah menggunakan array. Tapi Anda bisa melakukannya menggunakan daftar terkait. Sebuah stack adalah data konseptual struktur, tidak seperti implementasi khusus satu. Jadi apa yang akan yang terlihat seperti? Ini akan terlihat jenis seperti ini. Anda akan memiliki ukuran integer. Dan Anda akan memiliki sebuah array dari nilai-nilai yang kita memanggil nampan, karena itulah apa gambar itu untuk us - int nampan - dan kemudian beberapa kapasitas maksimum. Jadi apa yang akan mendorong terlihat seperti? Nah, jika kita memiliki setumpuk s, maka untuk mendorong sesuatu ke s, kita akan mendapatkan ukuran s. Dan itu akan menjadi berikutnya tempat terbuka array kita. Jadi jika kita memiliki tiga hal dalam tumpukan kami, maka nampan 3 akan menjadi berikutnya tempat terbuka, karena 0, 1, dan 2 sudah diisi. Jadi kita menempatkan nilai ke s.trays [s.size], tempat ketiga. Dan kemudian kita kenaikan s.size mengatakan, hey, kami memiliki tiga hal sebelumnya. Sekarang, kami memiliki empat. Jadi pada saat Anda mendorong, Anda akan memasukkan sesuatu ke 4. Atau pada saat Anda pop, Anda akan untuk melihat 3 bukannya 4 atau apa pun. Dan kemudian kita akan kembali benar untuk mengatakan, hei, kita berhasil. Ini bekerja. Sebagai aturan praktis, jika fungsi itu seharusnya mengembalikan benar atau palsu selalu mengembalikan nilai true, Anda mungkin telah melakukan sesuatu yang salah. Jadi cara kerjanya? Nah, bekerja dengan baik selama 1, dan 2, dan 3, dan 4, dan lima. Tapi katakanlah saya mencapai kapasitas saya. Aku kemudian mengalami masalah, karena jika ukurannya sama dengan kapasitas, aku sekarang mencoba untuk memasukkan sesuatu ke dalam array di mana saya tidak punya ruang. Jadi cek singkat untuk memperbaiki hal ini. Jika s.size == KAPASITAS, kembali palsu. Jika tidak, pergi dan melakukan apa yang kita lakukan. Jadi apa lagi yang bisa kami meminta sekitar untuk tumpukan? Apa lagi yang harus Anda belajar? Apa lagi yang harus Anda berlatih? Nah, menerapkan pop. Kami sudah melakukan push. Aku akan memperbaikinya. Implementasi non-array, di mana Anda menggunakan linked list, mungkin. Implementasi non-int. Kami melakukan ints di sini. Tapi itu bisa saja mengapung. Aku bisa saja string. Bisa saja bintang arang. Lihatlah kuis masa lalu untuk jenis pertanyaan yang kami telah bertanya tentang tumpukan. Saya akan mengatakan bahwa kita tertutup tumpukan sekitar sama seperti yang kita sudah dibahas dalam tahun terakhir. Jadi pertanyaan-pertanyaan kuis harus menjadi indikasi yang baik. Ke depan lebih cepat, antrian. Mereka seperti tumpukan. Tapi mereka pertama, keluar pertama. Jika Anda Inggris, antrian kata mungkin membuat banyak akal untuk Anda. Jika tidak, Anda mungkin harus mendengar tentang hal itu sebagai garis. Mereka bekerja seperti baris di toko Apple. Orang pertama yang muncul di 03:00 di pagi hari adalah yang pertama orang untuk membeli iPad nya. Jadi kita memiliki dua operasi - enqueue dan dequeue. Enqueue menempatkan seseorang di baris. Dequeue menarik pertama orang dari baris. Sekali lagi, kita dapat menerapkan ini dengan array. Jadi apa yang kita struct menunjukkan dalam kuliah? Itu satu ini. Sekali lagi, angka. Sekali lagi, ukuran dan hal ini depan baru. Mengapa ada sesuatu yang disebut depan? Ini adalah indeks berikutnya elemen untuk dequeue. Hanya saja secara internal melacak orang pertama yang muncul, jadi kita yang bisa menariknya keluar ketika kita perlu. Pasti melihat catatan kuliah dan mencoba untuk melaksanakan enqueue dan dequeue ketika belajar untuk kuis. Hal-hal penting untuk dipikirkan. Membungkus sekitar jika bagian depan ditambah ukuran berakhir lebih besar dari kapasitas. Sekali lagi, jika struktur Anda penuh, Anda akan memiliki masalah. Hash tabel yang telah Anda lihat sebelumnya. Sebagian besar dari Anda mungkin dilaksanakan ini pada pset6. Ini adalah struktur yang bertujuan untuk O (1) konstanta waktu penyisipan dan O (1) konstan lookup waktu. Dalam CS50, kami menerapkan ini sebagai array daftar terkait. Komponen kunci untuk tabel hash adalah fungsi hash. Jadi mengubah masukan Anda, katakanlah, kata kamus, dalam angka, yang akan menjadi indeks kami. Dan kami akan menggunakan index yang ke dalam array kita. Jadi, inilah gambaran kecil yang lucu dari study.50.net. Kami membuang semua kata-kata ke dalam Fungsi hash kami. Dan fungsi hash memberitahu kita di mana untuk menempatkan kata-kata ini. Ini semua besar di tanah di mana hanya ada satu kata untuk setiap celah. Tapi seperti yang Anda ingat dari pset6, ada lebih dari kata-kata slot. Jadi apa yang terjadi ketika Anda mendapatkan tabrakan? Alih-alih menyimpan satu nilai, katakanlah, tabel hash 3, Anda menyimpan linked list. Dan alih-alih memiliki blewah di sini, Anda akan memiliki sebuah linked list, dimana simpul pertama adalah blewah. Dan simpul berikutnya adalah kucing. Dan simpul ketiga adalah tabrakan, mari kita mengatakan, karena semua kata-kata ini mulai dengan C. Jadi sebagian besar dari Anda melakukan ini untuk pset6. Jika Anda tidak melakukan tabel hash pada pset6 dan Anda mencoba sesuatu seperti trie, pasti meninjau tabel hash. Jika Anda tidak melakukannya pada pset6, pasti meninjau tabel hash. Dan jika Anda melakukannya pada pset6 dan itu tidak bekerja benar dan Anda memiliki banyak masalah dengan itu, pasti meninjau tabel hash. Jadi pelajaran benar-benar jelas meninjau tabel hash. Minoritas besar dari Anda mencoba out mencoba pada pset6. Gambar tingkat tinggi. Ini sesuatu seperti ini, di mana masing-masing node memiliki seperangkat anak-anak, di mana masing-masing anak sesuai dengan surat. Dan setiap node juga mengatakan, hey, saya kata. Jadi dalam hal ini, kata Maxwell, jika Anda mengikuti M ke A ke X-W-E-L-L dan kemudian mengikutinya satu lagi. Dan Anda mendapatkan simbol ini, delta, yang kami menandakan berarti ini adalah sebuah kata. Jadi Maxwell adalah sebuah kata. Delta ini seluruh menandakan yang hal-hal yang kata-kata dan yang hal-hal yang tidak. Jadi dalam pset6, data kita disimpan bersama salah satu node kami adalah "I am a kata. "Dan hal keren tentang mencoba adalah mereka menunjukkan penyisipan dan lookup di O (panjang kata). Jadi hanya untuk mendapatkan melalui Maxwell, itu M-A-X-W-E-L-L. Jadi tujuh atau delapan - Saya tidak bisa menghitung - langkah-langkah untuk sampai ke akhir dan memeriksa hal-hal. Implementasi begitu cepat di sini. Rob pergi melalui terkait daftar di postmortem nya. Jadi memeriksa yang keluar. Maaf. Pergi melalui trie di postmortem nya. Jadi memeriksa yang keluar. Tapi pada dasarnya anda memiliki masing-masing node memiliki 27 pointer ke node berikutnya dan satu Boolean untuk aku kata. Periksa postmortem Rob untuk bagaimana ini benar-benar diimplementasikan. Struktur akhir kita, pohon kita dan pohon pencarian biner. Jadi melihat ini, ini tertutup yang terakhir Minggu 8, Senin. Sebuah pohon mirip dengan trie, kecuali Anda tidak selalu memiliki 27 node di setiap titik. Dan Anda tidak memiliki data ini pada setiap langkah yang menandakan apakah - jalan tidak masalah. Sedangkan trie, jalan dari atas ke bawah, Maxwell, adalah penting bagi kami. Tetapi masing-masing node memiliki beberapa anak-anak, mungkin. Kami memiliki beberapa kosakata lebih. Akar pohon adalah di bagian paling atas. Dan kami mengatakan bahwa sangat paling bawah node yang tidak memiliki anak-anak daun. Jadi seperti trie, pohon adalah struktur node. Jenis umum dari pohon yang kita akan bicarakan adalah sebuah pohon biner, di mana setiap node tidak memiliki anak-anak atau satu anak atau dua anak. Jadi gambar ini di sini tidak pohon biner, karena simpul 3 memiliki tiga anak. Tapi jika kita mengabaikan mereka, sisanya itu adalah pohon biner karena menunjukkan properti yang setiap node memiliki nol, satu, atau dua anak. Jadi bagaimana kita bisa mengungkapkan ini dalam kode? Kita bisa memiliki node di mana setiap node memiliki integer di dalamnya, serta sebagai pointer ke pohon di sebelah kiri dan pointer ke pohon di kanan, sehingga dua anak. Bagaimana ini berguna? Nah, jika kita membuat aturan tentang di mana kita menempatkan node, kita dapat membuat pencarian lebih cepat. Jadi ada konsep pencarian biner pohon, di mana semua node pada subtree kiri memiliki nilai yang lebih kecil dari node kita sedang melihat. Dan semua node pada subtree kanan memiliki nilai yang lebih besar dari simpul akar. Sekarang, yang terlihat seperti banyak kata-kata. Aku akan memasukkannya ke dalam ganda kutipan dan menampilkan gambar. Jadi di sini adalah contoh dari pohon pencarian biner. Melihat bahwa kita mulai dengan 10. Segala sesuatu di sebelah kiri 10 lebih kecil dari itu. Dan segala sesuatu ke kanan lebih besar dari itu. Tapi lebih dari itu, setiap node di pohon mengungkapkan properti ini. Jadi node 7 memiliki 3 ke kiri dan 9 ke kanan. Jadi semua dari mereka adalah lebih kecil dari 10. Tapi melihat hanya mereka, 7 memiliki 3 sampai kiri dan 9 pada sisi kanan. Dan juga di sebelah kanan, 15 memiliki 14 ke kiri dan 50 pada sisi kanan. Jadi tiga node di sana, 15, 14, dan 50, juga merupakan pohon biner yang valid atau pohon pencarian biner yang valid. Dan mereka semua lebih besar dari 10. Jadi mereka diijinkan untuk menjadi di sana. Apakah ada pertanyaan? AUDIENCE: Bagaimana Anda menangani ketika Anda memiliki dua tujuh? R.J. AQUINO: Ya. Bagaimana Anda berurusan dengan dua nilai yang sama? Beberapa pohon pencarian biner mengatakan bahwa Anda mengabaikan duplikat, karena tujuannya adalah hanya untuk mengatakan, saya telah melihat hal-hal ini sejauh ini. Beberapa pohon pencarian biner Anda bisa mengatakan memiliki jumlah dalam node. Orang lain mungkin mengatakan bahwa segala sesuatu untuk kiri kurang dari atau sama dengan. Dan segala sesuatu ke kanan lebih besar dari. Ini tergantung pada apa yang Masalahnya adalah Anda memecahkan. Jadi dalam kamus, misalnya, Anda tidak akan peduli tentang duplikat. Anda akan melemparkan mereka keluar. Tetapi beberapa masalah lain yang mungkin Anda peduli. AUDIENCE: Apakah mungkin untuk memiliki 1 di sebelah kiri 15, yang kurang dari 10? R.J. AQUINO: No Jika 14 di sini adalah 1, ini akan tidak menjadi pohon pencarian biner yang valid, karena segala sesuatu di sebelah kanan 10 harus lebih besar dari itu. Dan kita akan melihat mengapa. Jika di tanah pencarian tujuan saya adalah untuk menemukan 14, saya mulai pada akar. Jadi saya melihat. OK. Kita akan mulai dari akar. Lihatlah 10. Nah, 14, target kami, lebih besar dari 10. Jadi, ini harus di sebelah kanan. Ini sangat mirip dengan seluruh telepon hal buku yang kita lakukan, biner cari di sana. Tapi bukannya pencarian biner dalam array, kita biner mencari di pohon ini. Jadi kita masih mencari 14. Nah, 14 lebih kecil dari 15. Jadi kalau ada di pohon kita, itu harus berada di daerah ini di sini. Itu harus di sebelah kanan 10 dan di sebelah kiri 15. Dan jadi kami memeriksa node ini. Dan yay, kami telah menemukan 14. Aku tidak akan berjalan melalui itu. Tapi inilah kode. Ini sebenarnya relatif langsung, karena ini adalah rekursif. Apa yang bisa kami meminta Anda lakukan pada kuis? Kita bisa meminta Anda untuk menulis kode ini. Kita bisa meminta Anda untuk melihat kode ini dan memodifikasi kode ini dan menjelaskan apa yang dilakukannya. Ya. Pertanyaan? AUDIENCE: Apakah slide ini akan menjadi tersedia karena mereka terakhir kali? R.J. AQUINO: Ya. Jadi slide ini pasti akan diposting. AUDIENCE: Mereka benar-benar diposting sekarang di website. David hanya melakukan itu. R.J. AQUINO: Slide sekarang di website. Saya mungkin akan menambal beberapa kesalahan ketik saya mencatat dan memperbaikinya. Tapi ada arus versi di situs. Lainnya hal yang kita bisa meminta Anda untuk melakukan - menulis insert. Menulis versi iteratif dari fungsi rekursif kami hanya menunjukkan Anda atau berbicara tentang hal-hal ini, seperti di paragraf, dalam kata-kata, dalam kalimat. Membandingkan kali run dan menjelaskan apa yang akan Anda ingin menggunakan biner pohon pencarian untuk bukannya hash table, misalnya. Jadi memahami struktur ini pada tingkat yang cukup mendalam. Memahami bagaimana menulis mereka, bagaimana menggunakannya, bagaimana berbicara tentang mereka. Dan Anda akan siap. Pertanyaan? AUDIENCE: Ketika Anda menulis pohon pencarian biner, bagaimana Anda menentukan nilai apa yang harus menjadikannya sebagai root? R.J. AQUINO: Jadi pertanyaannya adalah, apa nilai yang Anda buat sebagai root? Tergantung pada kode Anda, Anda mungkin memiliki akar global. Jadi, Anda mungkin memiliki kemungkinan telah di pset6 tabel hash global. Atau Anda mungkin melewati akar sebagai argumen. Jadi ini fungsi pencarian di sini membawa argumen node *. Dan simpul apa pun yang Anda kebetulan berada melihat adalah salah satu Anda memperlakukan sebagai root Anda ketika Anda melewati masuk Dan aku siap. Mereka adalah slide-slide saya. Orang berikutnya bisa datang Swap dalam laptop dan mic. ROB Bowden: Saya rasa saya mungkin memiliki ditafsirkan pertanyaan yang berbeda. Tapi saya menafsirkannya sebagai, jika Anda memiliki nomor 1, 2, dan 3, bagaimana kita tahu untuk membuat 2 akar sebagai lawan 1 atau 3? Jika kita membuat 2 akar, maka itu baik 1 dan 3 ke kiri dan kanan. Tetapi jika 1 adalah akar, maka itu 1 ke atas, 2 kanan, 3 ke kanan. Jadi secara default, Anda tidak tahu apa yang membuat akar. Dan untuk algoritma kita mengharapkan untuk memberi Anda, hanya hal pertama yang Anda insert akan menjadi akar. Atau kita akan memberikan Anda sebuah pohon biner yang sudah ada yang punya akar. Tapi algoritma lain ada sehingga akar akan memperbarui, sehingga jika Anda berakhir dalam situasi di mana itu 1, 2, 3, maka secara otomatis akan update ke membuat 2 akar baru, sehingga itu masih baik skor. ANGELA LI: Cool. Hey, guys. Aku Angela. Dan aku akan menyelesaikan C kami dan kemudian pergi ke beberapa web kami teknologi - HTTP, HTML, dan CSS. Jadi hal pertama adalah penyangga serangan overflow. Jadi mari kita lihat kode ini. Ini cukup sederhana. Ada fungsi foo. Dan tidak mengembalikan apa-apa. Tapi itu butuh di pointer ke string disebut bar. Dan itu akan menyatakan ini penyangga, yang merupakan karakter array yang memiliki 12 slot. Dan menggunakan memcpy, yang hanya fungsi yang salinan dari satu alamat menjadi lain. Jadi ini mencoba untuk menyalin ke penyangga kami dari apa pun Bar menunjuk ke. Jadi ide apa yang salah dengan kode ini? AUDIENCE: Jika bar lebih panjang dari C, mereka akan menimpa. ANGELA LI: Ya, persis. Kami tidak menjamin bahwa bar akan menjadi kurang dari 12. Kami hanya membuat beberapa sewenang-wenang nomor 12. Dan kami seperti, mari kita berharap bahwa input pengguna kami kurang dari 12 karakter. Jadi dalam dunia yang ideal, jika input kita selalu seperti yang diharapkan, maka kita akan mendapatkan sesuatu seperti, halo. Itu kurang dari 12 karakter. Ini akan dibaca ke dalam char c. Dan kemudian kita melakukan sesuatu dengan itu. Itu tidak terlalu penting. Tapi orang jahat bisa melakukan sesuatu yang lebih seperti ini, di mana mereka memberi kita apa pun bar menunjuk ke, itu akan menunjuk ke array besar ini hanya A. Dan ini adalah cara lebih dari 12. Jadi itu akan pergi sepanjang jalan di sini ke tempat kembalinya alamat yang digunakan untuk menjadi. Jadi katakanlah fungsi ini disebut foo. Mungkin foo disebut oleh beberapa lain fungsi, yang disebut oleh utama. Jadi, ketika foo berjalan, perlu untuk mengetahui di mana untuk kembali ke. Jika foo disebut oleh beberapa fungsi bernama baz, ia harus tahu bahwa itu harus kembali ke baz. Dan itulah yang alamat pengirim ini di sini memberitahu kita. Tetapi jika kita menimpanya dengan beberapa lain alamat, dalam hal ini, ini adalah representasi dari alamat di sangat awal penyangga ini, maka apa yang sebenarnya akan terjadi adalah bahwa bukannya kembali kembali ke baz, yang disebut fungsi kita, itu hanya akan pergi ke depan kode ini. Dan jika ini ada karena hacker Bung jahat datang dan disuntikkan ini, maka mungkin jumlah ini A adalah tidak benar-benar A. Dan itu sebenarnya hanya kode yang istirahat komputer Anda atau sesuatu. Jadi untuk menjadi defensif tentang hal semacam ini hal, Anda harus tidak pernah menganggap bahwa input pengguna adalah tertentu jumlah karakter. Misalnya, ketika Anda melakukan ejaan, Anda diberitahu bahwa kata-kata itu hanya akan menjadi 40 karakter maksimum panjang. Dan itu bagus. Tapi jika tidak, maka Anda harus pastikan untuk hanya membaca di 45 karakter pada satu waktu. Jika tidak, Anda mungkin menimpa buffer Anda. Setiap pertanyaan itu. Ya. AUDIENCE: Bisakah Anda hanya berbicara sedikit lebih lanjut tentang ini? ANGELA LI: Maaf. Ya. AUDIENCE: mic ini hanya untuk video. Saya akan mencoba dan proyek. Hi, guys. Sup? Jadi mari kita membahas beberapa hal dalam Perpustakaan CS50, yang Anda telah menggunakan semua semester, sebagian besar untuk mendapatkan input pengguna. Seperti yang Anda tahu, Anda termasuk CS50 library dengan hanya melakukan CS50.h, yang berisi semua prototipe dari fungsi yang dapat Anda gunakan, seperti GetString dan getInt, dan GetFloat, dan sebagainya. Dan ada satu baris ini di CS50 perpustakaan yang mendefinisikan string, yang kalian semua tahu sekarang hanya char *. Tapi mari kita mengintip di bagaimana GetString bekerja. Ini adalah versi yang sangat singkat. Anda dapat menarik file library CS50 dari, saya pikir, manuals.CS50.net. Dan Anda dapat membaca fungsi sebenarnya. Tapi ini mencakup beberapa bagian-bagian penting. Jadi kami telah membuat beberapa penyangga dengan beberapa kapasitas. Dan apa yang kita lakukan adalah kita mendapatkan satu karakter pada waktu dari standar n. Di situlah input pengguna teks di konsol. Dan jadi kita akan membaca dalam karakter asalkan itu bukan baru line dan itu tidak berakhir file, yang adalah akhir dari input standar. Dan untuk setiap karakter yang kita baca dalam, jika karakter yang berakhir menambahkan dengan jumlah karakter yang telah kita baca dan yang lebih dari kemampuan kita, maka apa yang kita lakukan adalah kita hanya mengubah ukuran kami penyangga sehingga itu dua kali lebih lama. Jadi sekali lagi, ini melindungi terhadap serangan buffer serangan overflow, karena Anda baca di karakter pada satu waktu. Dan jika pada titik tertentu Anda baca terlalu banyak, Anda hanya memperluas buffer Anda. Anda kalikan dengan dua. Dan kemudian Anda memiliki lebih banyak ruang. Jika tidak, Anda hanya menambahkan karakter ke buffer. Dan setelah Anda membaca di semua karakter, maka akan menyusut buffer kembali ke ukuran normal, tambahkan terminator null, dan kemudian kembali. Sekarang, mari kita lihat getInt. Bisakah kalian membaca ini? Saya dapat memperbesar sedikit. Saya tidak tahu bagaimana komputer bekerja. Jangan pikiran. Saya tidak dapat memperbesar benar. Ini benar-benar sulit. Maafkan aku. Mari kita lihat ini. Jadi apa getInt dilakukannya itu pertama berbunyi dalam string dari GetString, yang kami telah dilaksanakan sebelumnya. Dan bagian penting untuk dicatat di sini jika pembagian ini yang berakhir membaca seperti tidak benar-benar string, maka kita hanya kembali ke INT_MAX merupakan kegagalan. Mengapa kita kembali INT_MAX sebaliknya negatif 1 atau 1? Ada gagasan? AUDIENCE: [Tak terdengar] negatif 1 pada satu. ANGELA LI: Ya, persis. Jadi Anda cara yang lebih cenderung hanya ingin untuk input 1 atau negatif 1 ketika diminta untuk n dan apa pun maxes n. Ini sangat besar. Anda mungkin tidak akan menggunakannya. Jadi ini seperti keputusan desain untuk pastikan bahwa Anda tidak sengaja kembali kesalahan atau Anda tidak kembali 1, yang mungkin diurai sebagai jawaban yang benar. Jadi jika baris tidak ada, kita kembali INT-MAX. Jika tidak, kita menggunakan sscanf, yang seperti scanf. Tapi membaca dari string. Dan kami memiliki ini diformat string, yang merupakan% i% c. Dan kami mencoba dan cocok bahwa dengan apa pun pengguna memberi kami. Kami ingin beberapa hal cocok menjadi 1, yang berarti bahwa kita hanya benar-benar ingin mencocokkan integer mungkin dikelilingi oleh putih ruang, mungkin tidak. Dalam hal ini, jika Anda memasukkan sesuatu seperti bar, bar tidak cocok sama sekali, karena harus ada integer di awal. Jadi tidak pernah berubah sscan 0. Jadi Anda tidak kembali itu. Atau, jika Anda masukkan ke dalam sesuatu seperti 1, 2, 3, A, B, C, bahwa pertandingan kedua integer tetapi juga karakter setelah. Jadi sscanf akan kembali 2, yang juga tidak ideal. Anda tidak ingin 1, 2, 3, A, B, C menjadi int valid. Sehingga juga tidak bekerja. Tapi mengatakan Anda masukkan ke dalam sesuatu seperti 50. Itu akan cocok dengan% i, yang berarti itu akan membaca ke n. Dan sekarang, n akan berisi nomor 50. Dan kemudian Anda dapat mengembalikannya. Jika tidak, anda menekan Retry. Dan kemudian itu hanya berjalan lagi sampai Anda mendapatkan masukan yang tepat dari pengguna. Setiap pertanyaan itu? AUDIENCE: Jadi, jika Anda adalah untuk mencetak nilai getInt pada [Tak terdengar] apakah itu akan hanya integer dan max? ANGELA LI: Ya. Jadi jika Anda menggunakan getInt, Anda harus mengasumsikan bahwa Anda tidak ingin max n untuk menjadi masukan yang valid, karena Anda akan berasumsi bahwa itu buruk. AUDIENCE: Jika kita tidak memiliki char c dan seseorang dimasukkan ke dalam 1, 2, 3, Sam, kan masih bekerja untuk 1, 2, 3? ANGELA LI: Saya pikir itu akan berhasil. Tapi Anda tidak ingin 123Sam ke menjadi input yang valid oleh pengguna. Itu tidak benar-benar sebuah int. Jadi tidak adil untuk mengurai sebagai int. OK. Dalam hal ini, mari kita bergerak ke internet. Jadi HTTP bukan bahasa. HTTP hanyalah set standar untuk bagaimana Anda mengirim sesuatu dari klien, itu Anda, ke server. Itu orang lain di web. Jadi HTTP singkatan dari Hypertext Mentransfer Protocol. Ini adalah jantung dan jiwa dari seluruh web. Bagian hypertext hanya mengacu pada HTML. Transfer adalah klien seperti Anda akan mengirim permintaan ke server, yang memberikan tanggapan. Dan protokol ini hanya, bagaimana Anda mengharapkan server untuk berperilaku? Dan bagaimana Anda berperilaku sehingga Anda dapat merampingkan ini proses komunikasi? Jadi permintaan HTTP terlihat banyak seperti ini. GET adalah jenis permintaan. Kalian telah melihat permintaan GET dan permintaan POST. Itu hal yang kedua ada, / me, itu hanya URI atau URL di mana Anda ingin pergi dalam host. Jadi permintaan ini meminta halaman, seperti www.facebook.com / me. Dan itu permintaan GET. Dan kemudian HTTP/1.1 ini, itu hanya versi HTTP yang Anda gunakan. Ini hampir selalu 1.1. Dan kemudian ada a bunch hal-hal lain juga. Anda benar-benar bisa melihat ini jika Anda membuka konsol Anda ketika Anda browsing web. Tanggapan terlihat lebih seperti ini. Bagian atas adalah, sekali lagi, jenis HTTP yang Anda gunakan diikuti dengan kode status. Jadi 200 adalah OK semuanya bekerja. Berikut ini adalah konten Anda. Konten Anda akan mengikuti. Dan kemudian akan memberitahu Anda apa konten dan hal-hal lain juga. Kode status, ada beberapa yang penting yang harus Anda ketahui. 200 OK seperti semuanya emas. Semuanya bekerja. 403 Forbidden. Ini Anda mungkin pernah melihat jika Anda lupa chmod sesuatu dengan benar. Ini berarti bahwa Anda tidak memiliki izin yang tepat untuk mengakses pada server. Ini seperti, tidak, Anda tidak bisa melihatnya. 404 berarti hal yang tidak ada. Tidak ditemukan. Anda mungkin pernah melihat bahwa banyak. 500 Internal Server Error biasanya seperti sesuatu yang tidak beres di samping dari server. Jadi, ketika Anda sedang menerapkan pset7, jika Anda memiliki kesalahan PHP, Anda bisa benar-benar pergi ke halaman dan melihat Seluruh banyak hal error PHP. Tapi itu biasanya tidak terjadi, karena situs web tidak benar-benar ingin memberitahu Anda mengapa situs mereka rusak. Mereka mungkin akan hanya mengembalikan 500 Kesalahan Server internal. Dan kemudian ada 418 Aku teko. Ada seluruh cerita tentang mengapa itu suatu hal. Tapi Anda dapat membaca tentang itu pada waktu Anda sendiri. Ada sejumlah besar kode status lain juga. Tapi ini adalah orang-orang Anda harus tahu. Jadi mari kita bicara tentang HTML. HTML, ingat, bukan bahasa pemrograman. Ini adalah bahasa markup. Itu berarti menggambarkan konten. Ini memberitahu Anda apa yang tampak sebuah dokumen HTML suka atau tidak seperti apa tapi bagaimana itu terstruktur. Jadi mendefinisikan struktur dan semantik halaman web. Ini seperti, ini adalah sebuah paragraf. Ini adalah ordered list. Ini seperti bagian halaman saya. Berikut judul. Itu hal-hal seperti itu. Ini tidak gaya semua itu, karena itulah yang Anda lakukan dalam CSS. Dan sepertinya seri bersarang tag. Jadi untuk menggunakan contoh dari benar-benar dasar Halaman HTML, Anda memiliki DOCTYPE deklarasi di sana. Deklarasi DOCTYPE ini mengatakan, kita menggunakan HTML5. Kemudian Anda memiliki tag HTML besar. Ini berisi kepala dan tubuh. Di dalam kepala, Anda memiliki judul. Itulah apa yang terjadi dalam judul bar browser Anda. Kami memiliki tag link yang menghubungkan dalam style sheet eksternal. Dan kemudian kita memiliki naskah yang menarik dari JavaScript eksternal juga. Dan kemudian di dalam tubuh kita sebenarnya apa yang akan ditampilkan pada halaman. Kami punya sebuah paragraf dan kemudian gambar di dalam ayat tersebut. Ini adalah gambar kucing. Perhatikan bahwa gambar tag menutup sendiri. Jadi, bukannya membuka dengan gambar dan kemudian melakukan / gambar lain, Anda hanya slash kecil ini di sini, yang menutup itu. Dan tag gambar juga memiliki kunci ini nilai atribut yang disebut alt. Itulah teks alternatif yang terjadi ketika Anda membawa lebih dari itu. Sebagian besar elemen HTML memiliki beberapa nilai kunci hal-hal yang dapat Anda berikan, berbagai kustomisasi. Ya. AUDIENCE: [Tak terdengar]. ANGELA LI: Nah, jadi ini merupakan atribut dari tag. Jadi jika Anda menggunakan jQuery, Anda bisa melakukan pilih image.getAttribute. Dan kemudian Anda dapat mencari mendapatkan atribut alt. Dan itu akan memberikan anak kucing. Jika Anda ingat bentuk dalam HTML, masukan elemen akan memiliki atribut nama. Dan itulah yang menggunakan PHP untuk mengirim permintaan ketika formulir dikirimkan. AUDIENCE: Apakah Anda menyebutkan sesuatu tentang bagaimana jika Anda menggunakan kittens.jpg atau sesuatu yang memiliki yang hilang file folder atau file lainnya? ANGELA LI: Ya. Jadi ini adalah apa yang disebut relatif jalan, karena aku tidak memberi Anda path lengkap. Ini seperti ketika di C jika Anda melakukan fopen beberapa file, jika Anda hi.txt fopen, bahwa hi.txt diharapkan berada di sama direktori, kecuali jika Anda memberikan lebih jalan kompleks. AUDIENCE: Jadi Anda bisa menentukan folder yang [Tak terdengar]? ANGELA LI: Ya. Dan Anda dapat melihat bagaimana melakukan hal itu. Tetapi jika saya ingin mendapatkan kittens.jpg keluar dari direktori induk, saya akan melakukan .. / Kittens.jpg. Ya. Maaf. Ya. Oh man, aku lupa pertanyaan. Apa pertanyaannya? Oh, pertanyaan itu adalah, kittens.jpg diharapkan berada di direktori yang sama? Dan dalam hal ini, itu. Tapi Anda juga bisa memberikan jalan tertentu sedemikian rupa sehingga tidak harus. Baik? CSS. Jadi CSS, seperti HTML, tidak bahasa pemrograman. CSS hanya serangkaian aturan styling. Ini adalah singkatan dari Cascading Style Sheets. Dan Anda menggunakannya bersama dengan HTML ke halaman gaya. Jadi ada tiga cara Anda dapat menyertakannya. Salah satu cara yang dapat Anda lakukan adalah di kepala bagian HTML Anda, Anda hanya dapat membuka tag gaya dan kemudian menempel beberapa aturan CSS di sana. Hal ini cukup OK. Ya. AUDIENCE: Bisakah Anda menempatkan orang tag gaya di antara, mari kita mengatakan, tubuh dan / body. Dan kemudian Anda akan styling hanya di dalam tubuh. ANGELA LI: Anda bisa. Ini akan berhasil. Tetapi Anda tidak harus, karena styling adalah jenis metadata yang harus pergi dalam kepala dokumen Anda. Tubuh harus benar-benar hanya mengandung apa yang sebenarnya akan muncul pada halaman Anda. AUDIENCE: Jadi Anda akan menempatkan gaya di kepala Anda untuk gaya seluruh halaman web, kan? ANGELA LI: Ya. Jadi menempatkan gaya di sini, aturan CSS ini akan berlaku untuk seluruh halaman berdasarkan penyeleksi mereka. Jadi cara yang lebih baik untuk melakukannya adalah bukan memiliki tag gaya di kepala Anda, Anda memiliki link ini ke gaya eksternal sheet seperti saya menunjukkan Anda di contoh sebelumnya. Apa yang dilakukan adalah mencoba dan menemukan mengajukan style.css dan kemudian menariknya dan menggunakan itu sebagai gaya untuk halaman. Dan style.css Anda akan hanya terlihat seperti ini. Ini hanya akan menjadi sekelompok CSS. Dan akhirnya, ada cara lain Anda dapat mencakup CSS, yang Anda benar-benar seharusnya tidak pernah melakukannya. Ini styling inline panggilan. Dan setiap elemen HTML juga dapat mengambil atribut style. Dan kemudian dalam gaya atribut, Anda dapat memberikan aturan CSS. Jadi dalam hal ini, div apapun aku mendefinisikan di sini, itu akan memiliki latar belakang hitam dan warna teks putih. Tetapi Anda tidak perlu melakukan ini, karena apa yang hal ini adalah menempatkan styling Anda dalam HTML Anda. Dan aku tahu kita telah berbicara tentang HTML adalah struktur dan CSS gaya. Jika Anda melakukan ini, itu mencampur mereka bersama-sama. Dan itu tidak sangat bersih. Jadi jangan lakukan itu. Menggunakan contoh CSS, di atas sana, kita hanya memilih tubuh HTML dokumenter. Dan kami seperti, semuanya akan menjadi Comic Sans. Saya juga tidak menyarankan itu. Tapi Anda bisa melakukan itu. Aturan kedua di sini, itu akan untuk memilih elemen pada halaman dengan ID utama. Jadi HTML apapun elemen, saya katakan ID = Main, aku akan memberikan yang Margin 20-pixel dan menyelaraskan semuanya, semua teks, ke pusat. Hal terakhir yang memilih oleh kelas CSS. Jadi setiap elemen pada halaman yang saya berikan kelas bagian, aku akan membuatnya warna latar belakang biru muda. Yep. Itu saja yang saya punya. Pertanyaan? AUDIENCE: Apa hashtag sebelum main lakukan? ANGELA LI: Pertanyaannya adalah, apa hashtag sebelum do utama? Dalam hal ini, hash di CSS berarti pilih oleh ID. Jadi jika saya memiliki beberapa elemen HTML, seperti divid = utama, CSS ini aturan memilih hal dengan ID utama. Dan sama, periode di depan bagian yang pilih oleh kelas CSS atau pilih oleh kelas HTML. AUDIENCE: Mengapa ada memiliki sebelum 6 warna background? ANGELA LI: Ya. Jadi pertanyaannya adalah, mengapa ada hash sebelum 6? Hal ini berbeda dengan hash itu. Ini berarti bahwa Anda memberikan warna heksadesimal. Jadi warna hex, ini hanya mewakili warna. Dan Anda ingat tiga kali lipat ketika RGB Anda melakukan forensik pset? Hal ini mirip. Dua digit pertama mewakili berapa banyak merah dalam warna. Kedua kedua mewakili berapa banyak hijau. Dan ketiga mewakili berapa banyak biru. Dan hash adalah ini akan untuk mewakili warna. Jadi apa pun dari 0, 0, 0, 0, 0, 0 hingga F, F, F, F, F, F berlaku. Ini adalah beberapa warna yang valid yang dapat ditampilkan oleh browser Anda. Pertanyaan? AUDIENCE: Apa perbedaan antara gunakan dengan ID dan kelas? ANGELA LI: Pertanyaannya adalah apa yang perbedaan antara gunakan dengan ID dan kelas? Anda hanya dapat memiliki satu elemen dalam Dokumen HTML yang memiliki ID yang diberikan. Sehingga hanya satu hal pada halaman saya diperbolehkan untuk memiliki ID utama. Jadi Anda menggunakannya untuk ini adalah header. Ini adalah navigasi. Ini adalah footer. Kelas yang berbeda, karena Anda dapat menerapkan kelas untuk banyak elemen HTML seperti yang Anda inginkan. Jadi misalnya, saya melakukan bagian kelas, karena mungkin ada lebih dari satu bagian pada halaman saya. Anda hanya diperbolehkan untuk memiliki banyak elemen pada halaman yang sama dengan kelas tetapi hanya satu dengan ID tertentu. AUDIENCE: Jadi dot mewakili kelas? ANGELA LI: Ya. Sebuah titik mewakili kelas. Keren. Itu saja yang saya punya, guys. Terima kasih. [Tepuk Tangan] ZAMYLA CHAN: Hi, semua orang. Aku Zamyla. Aku akan meliputi PHP, MVC, dan SQL hari ini. Banyak materi yang saya akan covering akan menjadi cukup banyak langsung dari pset7. Baik. Jadi apa PHP? PHP singkatan dari PHP Hypertext Preprocessor. Jadi, dalam dirinya sendiri, adalah sebuah rekursif nama, yang cukup keren. PHP adalah bahasa server-side scripting, dan menyediakan backend dan dasar-dasar logis dari website kami. Jadi Angela berbicara banyak tentang HTML dan CSS yang akan membuat struktur website. Tetapi bagaimana jika Anda ingin mengubah itu konten dinamis atau jika itu bervariasi berdasarkan pengguna atau kondisi tertentu? Di situlah PHP masuk Sekarang, biasanya, PHP mungkin mengambil beberapa baris kurang untuk menerapkan hal yang sama di C. Itu karena PHP menangani memori manajemen untuk programmer, sebagai lawan kita harus malloc bebas, hal-hal seperti itu. Tapi karena PHP adalah interpretatif bahasa, biasanya, mungkin mengeksekusi sedikit lebih lambat dari C, yang adalah bahasa yang dikompilasi. Karena kami akan pindah pemrograman bahasa, mari kita lihat bagaimana sintaks akan berbeda. Mari kita berhati-hati untuk tidak bingung dengan hal ini. Jadi dengan sintaks PHP, apakah Anda embedding PHP Anda di dalam sebuah HTML file atau dalam file php. itu sendiri, Anda perlu menyertakan kode di tempat terbuka PHP dan tag PHP tertutup seperti berikut, seperti pada layar. Variabel dalam PHP. Setiap variabel tunggal akan mulai dengan tanda $ diikuti dengan nama variabel Anda. Sekarang, variabel dalam PHP yang longgar diketik, yang berarti bahwa Anda tidak perlu untuk menunjukkan apa tipe data adalah ketika Anda menyatakan itu. Namun, ini tidak berarti bahwa mereka tidak memiliki jenis sama sekali. Jadi jika saya mendeklarasikan variabel dan hanya mengatur itu sama dengan 1, dan kemudian saya mendeklarasikan variabel lain, mengatur itu sama dengan "1," dan kemudian satu sama lain 1.0, baik, tergantung pada jenis kesetaraan operator saya gunakan, jika saya ingin membandingkan di semua jenis, maka mereka akan sama. Tapi kalau aku ingin memastikan bahwa jenis yang sama, PHP masih bisa melakukan bahwa, meskipun kita tidak menunjukkan apa jenis itu adalah ketika kita terlebih dahulu membuat file. Sekarang, di PHP, meskipun kita beralih dari pemrograman bahasa dari C, kita masih harus kami terpercaya jika kondisi, seperti ini. Kami masih memiliki loop sementara kami, hanya seperti ini, di mana Anda masukkan ke dalam kondisi dan kemudian tubuh loop. Dan kemudian kami juga memiliki kami untuk loop, yang biasanya terlihat seperti ini. Jadi jika saya ingin iterate atas semua sembilan psets dan menyerahkan dan memanggil fungsi submitPset, maka saya bisa melakukan itu di sini, yang kalian memiliki semua dilakukan pada titik ini. Selamat, by the way. Untuk kamera, orang-orang kata, terima kasih. Sekarang, jika Anda tidak ingin hanya menggunakan ini untuk loop, maka PHP sebenarnya juga telah hal yang disebut loop foreach. Jadi jika saya memiliki sebuah array bilangan bulat, 0 sampai 8, disimpan dalam psets array, maka saya bisa memiliki loop foreach yang iterates atas setiap nomor dalam psets. Dan kemudian aku bisa menelepon sama berfungsi delapan kali, seperti yang saya lakukan sebelumnya. Jadi ini untuk setiap loop bagus, karena Anda tidak perlu jika Anda tidak tahu panjang tepat dari array yang Anda telah, kemudian menggunakan loop foreach ini akan mengurus itu untuk Anda. Jadi saya membuat psets sebagai array. Mari kita lihat itu. Array di PHP biasanya sama dengan orang-orang yang kami punya di C, di mana Anda dapat mendeklarasikan array. Dan di sini, saya dapat mendeklarasikan array kosong dan kemudian membangun secara dinamis dengan menggunakan indeks sebagai bilangan bulat. Jadi indeks 0, aku akan menyimpan integer bernama 1. Pada indeks 1 dari daftar saya, saya akan untuk menyimpan nilai 2. Dan pada indeks ketiga tetapi nomor kedua, aku akan menyimpan nomor 12. Sekarang, ini baik-baik saja dalam bekerja bekerja dengan baik. Tapi mengatakan itu penting bagiku apa indeks masing-masing memegang. Bagi saya, indeks 0 berarti bagaimana banyak kucing yang saya miliki. Dan indeks 1 berarti bagaimana banyak burung hantu yang saya miliki. Dan yang berikutnya berarti berapa banyak anjing. Nah, maka untuk menentukan bahwa, alih-alih harus mengingat 0 berhubungan dengan kucing dan 1 burung hantu, saya dapat menggunakan array asosiatif, yang berarti bahwa bukannya integer sebagai indeks saya, Aku benar-benar dapat menggunakan string. Jadi ini cukup berguna. Dan kau dasarnya hanya diganti bilangan bulat dengan string. Dan di sana Anda memiliki array asosiatif. Ya. AUDIENCE: Apakah ada alasan mengapa ada garis bawah untuk yang kedua bagian, karena daftar saya memiliki array. ZAMYLA CHAN: Pertanyaannya adalah, adalah ada alasan mengapa ada sebuah menggarisbawahi antara saya dan daftar? Tidak. Itu hanya bagaimana aku penamaan variabel saya. AUDIENCE: Pada pertama line, itu satu kata. ZAMYLA CHAN: Saya minta maaf. Aku akan memperbaikinya. Ya. Mereka harus merupakan nama variabel yang sama. Baik menangkap. OK. Jadi mari kita lanjutkan ke string Rangkaian. Jika saya ingin mengambil dua string, maka saya bisa menggabungkannya dengan operator dot. Jadi jika saya memiliki Milo sebagai nama pertama dan pisang sebagai nama belakang, kemudian concatenating dengan dot operator dan kemudian menempatkan spasi di antara akan membuat string yang berisi Milo Pisang, yang kemudian dapat echo atau, sebaliknya, mencetak. Berbicara tentang gema, mari kita bicara tentang beberapa berguna - oops. Maafkan aku. Beberapa fungsi PHP yang berguna. Jadi kita memiliki - kesulitan teknis. Satu detik. Aku mengirimkannya. Masalah PowerPoint. Dan kita kembali dengan fungsi PHP. Dan kita kembali dengan fungsi PHP. Jadi kita memerlukan fungsi, di mana jika Anda lulus dalam sebuah file, inilah hanya contoh sebuah file yang Aku mungkin lulus masuk Maka yang akan menyertakan kode PHP dari file yang saya menunjukkan. Dan itu akan mengevaluasi bahwa masuk Kemudian kami juga memiliki gema, yang adalah sejajar dengan printf. Exit adalah paralel untuk istirahat, yang keluar dari blok kode yang Anda masuk Dan kemudian cek kosong apakah diberikan variabel seperti nol atau nol atau apapun disamakan dengan yang kosong. Ya. AUDIENCE: Untuk Rangkaian string dot Operator satu, di PHP, adalah bahwa sama seperti di JavaScript di mana ia menggunakan dot untuk Rangkaian berarti plus? Jadi untuk nama lengkap, Anda bisa memiliki dollar tanda pertama + + dan kemudian bertahan? ZAMYLA CHAN: Ya. Jadi pertanyaannya adalah apakah di PHP kita dapat menggunakan Rangkaian string yang sama seperti dalam JavaScript dengan plus. Yusuf akan masuk ke itu nanti. Saya pikir dia memiliki slide itu. Sebenarnya, itu berbeda. Jadi dalam JavaScript, Anda perlu menggunakan plus untuk menyatukan string. Dan di PHP, Anda harus menggunakan operator dot. Jadi mereka berbeda. OK. Jadi sekarang kita telah membahas semua PHP ini, di mana melakukannya benar-benar berguna? Yah, itu sangat berguna ketika kita dapat menggabungkan dengan HTML kita. Jadi PHP kami akan memberi kita kekuatan untuk mengubah suatu halaman HTML konten sebelum pemuatan. Jadi berdasarkan kondisi yang berbeda, biasanya pengguna tertentu yang login, kita dapat menampilkan informasi yang berbeda. Linda, apakah Anda memiliki pertanyaan? AUDIENCE: Dapatkah Anda menggabungkan integer juga? ZAMYLA CHAN: Ya, Anda bisa. Jadi pertanyaannya adalah jika Anda bisa menggabungkan bilangan bulat atau lainnya variable.s sekarang, kita beralih ke MVC, yang adalah paradigma yang kita gunakan dalam pset7 dan banyak web designer digunakan untuk mengatur kode dalam file di situs web mereka. M singkatan dari Model. Dan pada dasarnya, file model yang akan menangani dengan interaksi dengan database. Lihat file, mereka berhubungan dengan estetika website. Dan Controller yang menangani permintaan pengguna, mem-parsing data, apakah logika lainnya. Dalam pset7, kami menggabungkan model dan controller. Dan kami hanya memanggil mereka pengendali dan menempatkan mereka di direktori publik. Dan lihat file, kita menggunakan mereka sebagai template dalam direktori template. Jadi diagram ini di sini juga mewakili semacam itu sama dengan divisi model dan controller dalam ungu di sini di sebelah kiri dan tampilan di sebelah kanan. Jadi ini adalah skema yang beberapa dari Anda mungkin telah melihat di Jam Kerja atau diagram yang kita menggambar seperti Anda sedang mencari tahu pset Anda. Jadi di sini, di controller diberikan, model controller, kita memiliki fungsi yang berhubungan dengan query SQL Database, mengeksekusi logika PHP. Mungkin Anda akan mencari saham di Yahoo! Keuangan. Atau mungkin, Anda hanya akan memeriksa untuk melihat apakah pengguna telah mengajukan membentuk sudah sebelum memiliki mengunjungi halaman Anda. Dan kemudian Anda akan membuat a membentuk di sini. Setelah formulir yang telah disampaikan oleh pengguna, tindakan yang ditentukan dalam tag HTML form akan menunjukkan halaman yang kembali data tersebut ke. Jadi semua informasi yang akan dikirim kembali ke controller. Maka Anda mungkin akan melakukan sedikit lebih logika itu dan mungkin mengeksekusi beberapa pertanyaan lebih dalam database SQL dan kemudian, akhirnya, datang dengan baik set dikemas informasi yang Anda lakukan lulus dalam ke dalam beberapa template lainnya yang ditampilkan informasi tersebut. Sekarang, bagaimana kita benar-benar paket bahwa informasi up? Nah, kita memiliki fungsi yang disebut Render yang berada di file functions.php di pset7, di mana Anda lulus dalam nama file, nama template. Dan kemudian Anda juga lulus dalam array asosiatif. Dan sehingga array asosiatif merupakan informasi yang berbeda bahwa Anda ingin lulus masuk Sekarang, apa yang akan menjadi konstan dalam contoh-contoh ini adalah bahwa kunci atau, agak, kunci-kunci yang asosiatif array, yaitu apa yang akan menjadi diharapkan akan konstan dengan template, karena ia tahu itu perlu sesuatu yang disebut pesan atau disebut nama. Dan kemudian hal-hal yang di sebelah kanan, yang nilai yang sebenarnya, sehingga dalam kasus ini, siapa yang anak yang baik dan Milo, mereka akan menjadi nilai-nilai yang berubah bahwa controller berubah setiap waktu atau berdasarkan kondisi tertentu dan akan melewati yang masuk Jadi di sini dalam template, kita melihat bahwa kita menggunakan HTML karakter khusus, yang pada dasarnya hanya berarti bahwa kita ingin untuk mendapatkan string rekan bahwa pengguna meletakkan masuk Dan kita ingin mengganti pesan di sana. Jadi ketika kita benar-benar melihat file, spesifik informasi berlalu masuk Perhatikan bahwa kunci bagaimana membuat karya adalah bahwa kunci-kunci yang asosiatif array, yang menjadi variabel nama di sini. Dan nilai-nilai yang penting dalam array asosiatif kemudian menjadi nilai dari variabel. Sekarang, mari kita beralih ke SQL. Ini singkatan dari Structured Query Language. Dan jadi ini hanya sebuah pemrograman bahasa yang dirancang untuk mengelola database. Dan itu datang berguna bagi kita dalam situs keuangan pset7 kami. Pada dasarnya, itu hanya cara mudah untuk melacak dan mengelola objek dan tabel dan menghubungkan mereka satu sama lain. Sekarang, pikirkan database SQL Anda pada dasarnya sebagai file Excel, mungkin, dengan beberapa lembar tab. Jadi Anda bisa memiliki beberapa tabel, mungkin, yang menghubungkan satu sama lain. Dan banyak seperti Excel, kita memiliki banyak fungsi yang kita inginkan. Sebagai contoh, kita dapat memilih baris tertentu. Kita bisa memasukkan informasi. Kami dapat memperbarui baris. Dan kita juga dapat menghapus hal-hal. SQL pilih karya dengan memilih baris atau deretan kolom yang ditentukan dari database yang cocok tertentu kriteria yang Anda menunjukkan. Jadi di sini ketika saya melihat select * from penyihir mana rumah = Ravenclaw, maka Aku memilih *, yang berarti aku memilih setiap kolom tunggal dalam baris dari penyihir tabel tetapi hanya jika kolom rumah sama Ravenclaw. Sekarang, ini adalah murni atau SQL. Jadi jika saya pergi ke PHPMyAdmin, yaitu cara tertentu yang kita gunakan untuk mengelola database SQL kami, maka saya bisa menyisipkan itu ke website PHPMyAdmin. Dan itu akan mengeksekusi. Tapi kami benar-benar ingin melakukan bahwa di sisi PHP. Jadi bagaimana kita melakukannya? Nah, kita menggunakan fungsi permintaan, yang pada dasarnya mengeksekusi bahwa permintaan SQL. Menggunakan? sebagai pengganti, kita bisa lulus dalam tertentu nilai-nilai string kita bahwa kita ingin mengganti. Jadi mungkin aku menyimpan yang berbeda nilai dalam curr_house, yang merupakan rumah saat ini yang saya alami. Jadi saya bisa lulus bahwa dalam sebagai pengganti dengan tanda tanya. Dan kemudian aku pada dasarnya akan mengeksekusi hal yang sama seperti yang saya lakukan sebelumnya, kecuali sekarang, aku di PHP. Dan permintaan akan mengembalikan array asosiatif. Dan aku akan menyimpannya dalam baris. Sekarang, permintaan selalu bisa gagal. Mungkin query SQL tidak bisa mengeksekusi karena meja tidak ada. Atau mungkin, kolom tidak ada. Ada yang tidak beres. Nah, dalam hal ini, Anda akan ingin untuk membuat Pastikan bahwa Anda memeriksa apakah permintaan kembali palsu. Dan itu dengan menggunakan tiga sama operasi di sana. Dan kemudian saya minta maaf, yang lain Fungsi CS50, lewat di pesan. Dan jika Anda melihat ke dalam meminta maaf, semua itu benar-benar adalah membuat apology.php. Ya. AUDIENCE: Bisakah Anda menjelaskan apa yang Bintang tidak antara pilih dan dari? ZAMYLA CHAN: Ya, tentu saja. Jadi bintang di antara pilih dan dari berarti bahwa saya ingin memilih keseluruhan seluruh baris dari meja saya. Aku bisa ditunjukkan pilih nama, tahun, rumah. Dan saya hanya akan mendapatkan tiga kolom di meja saya. Tapi kalau aku mengatakan pilih *, maka aku akan mendapatkan semuanya dalam kolom tersebut. Lalu aku akan pergi Anda di belakang pertama. AUDIENCE: Jadi ini masih di SQL, kan? Apakah permintaan ini atau PHP ini? ZAMYLA CHAN: Kami berada di query. Jadi ini adalah di PHP. Jadi dengan menggunakan query fungsi PHP, kita mengeksekusi query SQL. AUDIENCE: Apakah apa pun di SQL case-sensitive, seperti pilih atau penyihir atau rumah? ZAMYLA CHAN: Apakah ada di SQL case-sensitive? Saya percaya begitu, ya. Saya percaya bahwa SELECT dan FROM dan WHERE adalah case-sensitive. Tidak ada? ROB Bowden: Jadi, itu sebaliknya. Nama kolom dan sarana meja, semua dari mereka adalah case-sensitive. Tapi salah satu kata kunci MySQL, seperti SELECT, FROM, dan WHERE, mereka tidak case-sensitive. OK. Jadi kebalikan dari apa yang saya katakan. Jadi semua kata kunci MySQL - pilih, dari, di mana - mereka tidak case-sensitive. Tapi segala sesuatu yang lain. OK. Anda di depan. AUDIENCE: Jika saya memiliki $ baris dalam hal lebih dari satu baris, artinya itu adalah hanya menjadi sebuah array asosiatif? ZAMYLA CHAN: Jadi pertanyaannya adalah jika baris memiliki lebih dari satu baris di dalamnya, tidak itu menjadi sebuah array asosiatif? Jadi itu adalah sebuah array asosiatif array sudah. Jadi bahkan jika hanya ada satu baris kembali, maka Anda akan harus pergi ke Indeks 0 hasil itu. Dan kemudian Anda akan memiliki baris pertama. Ya, Belinda? AUDIENCE: Bila Anda menggunakan ===, apakah ini satu-satunya contoh? Atau ada orang lain? ZAMYLA CHAN: Jadi dalam hal ini, === adalah perbandingan seluruh jenis. Maaf. === Adalah perbandingan yang membandingkan jenis. Dan kemudian == membandingkan di semua jenis. AUDIENCE: Bisakah Anda menjelaskan apa baris adalah dalam situasi ini? Apakah baris data? ZAMYLA CHAN: Dalam slide berikutnya, aku akan menjelaskan apa baris ini. Jadi, jika Anda tidak keberatan memegang off itu. Dan kemudian Anda di belakang? AUDIENCE: Untuk fungsi seperti query, membuat dan meminta maaf [Tak terdengar]? ZAMYLA CHAN: Pertanyaannya adalah apakah fungsi ini - query, meminta maaf, dan membuat - yang umum di PHP. Ini adalah orang yang CS50 menulis untuk pset7. Dan Jay? AUDIENCE: Bila Anda perlu untuk mengatakan $ _SESSION, Adalah bahwa hanya untuk ID? Atau bisa Anda mengatakan bahwa di sini? ZAMYLA CHAN: Jadi pertanyaannya adalah, ketika kita gunakan $ _SESSION, yang spesifik variabel global yang kita gunakan. Di sini variabel ini akan bersifat lokal untuk fungsi kita. Jadi kita hanya menyatakan variabel baru. AUDIENCE: Bagaimana meminta maaf diimplementasikan? ZAMYLA CHAN: Pertanyaannya adalah, bagaimana meminta maaf diimplementasikan? Dan saya pikir ini adalah benar-benar cantik praktek yang baik untuk kalian untuk pergi ke bagian functions.php dan melihat meminta maaf dan melihat bagaimana Anda bisa memiliki melakukannya sendiri. Jadi saya dapat meninggalkan bahwa untuk Anda, tetapi hanya mengatakan bahwa jika Anda melihat mohon maaf, maka dibutuhkan pesan bahwa Anda disampaikan untuk meminta maaf, dan kemudian membuat pesan itu. Pertanyaan lagi? Saya suka pertanyaan. Jadi membuat mereka datang. AUDIENCE: [Tak terdengar] gema atau cetak sana? ZAMYLA CHAN: Pertanyaannya adalah, bisa kita tidak hanya telah menempatkan gema atau cetak dari sana. Sehingga akan melakukan sesuatu sedikit berbeda. Itu akan dicetak permintaan gagal ke dalam - baik, sekarang, kita benar-benar dalam controller kita. Jadi kita tidak benar-benar memiliki HTML diatur di sini. Minta maaf dengan rendering apologize.php benar-benar mengarahkan Anda ke apology.php. OK. Jadi sekarang, mari kita pergi untuk mengatasi pertanyaan dari sebelumnya tentang apa benar-benar adalah baris. Nah, permintaan akan kembali array baris. Dan setiap baris diwakili oleh array asosiatif. Jadi jika saya telah dieksekusi beberapa SQL query dan Saya telah disimpan hasilnya dalam baris, maka menggunakan loop foreach, maka array Nama adalah yang pertama di sana - baris. Dan kemudian aku akan menelepon setiap baris dalam sana $ row. Jadi iterasi lebih dari itu, saya kemudian mengakses nama kolom baris yang diberikan itu, tahun kolom, dan kolom rumah. Perhatikan bahwa saya tidak akan mampu melakukan hal ini dengan baris, karena indeks baris Nama tidak ada. Baris hanya sebuah array array asosiatif. Jadi Anda memiliki dua tingkat di sana. Setelah Anda memiliki array baris, Anda harus masuk ke dalam itu. Dan kemudian Anda dapat mengakses kolom. Apakah itu membuat jelas? Ya, di depan? AUDIENCE: [Tak terdengar] buka kurung untuk [Tak terdengar]? ZAMYLA CHAN: Maafkan saya? AUDIENCE: Tanda kurung terbuka. ZAMYLA CHAN: ini di sini? Itu memungkinkan saya untuk memasukkan bahwa variabel. Ya. AUDIENCE: Ketika Anda mencetak, apakah Anda mencetak ke kode HTML? ZAMYLA CHAN: Ya. Ketika saya mencetak, ini di sini adalah dalam Template sekarang, jadi pandangan saya metode MVC. Jadi aku mencetak ke dalam HTML. AUDIENCE: Jadi jika kita pergi ke pengembang setelah menjalankan alat ini, kita bisa yang benar-benar dalam kode? ZAMYLA CHAN: Itu bagus pertanyaan, ya. Jadi, jika Anda pergi ke alat pengembang di Firefox menggunakan Firebug atau Chrome, maka ya, Anda bisa melihat HTML tertentu. Jadi tidak akan menunjukkan $ row ["Nama"]. Ini akan menunjukkan mana yang Nama adalah berturut-turut itu. AUDIENCE: Hanya masalah umum, apa yang tr dan td didefinisikan sebagai? Mengapa kita [Tak terdengar]? ZAMYLA CHAN: Tabel baris tr, tabel maka td kolom. OK. AUDIENCE: Ya, itu data tabel. ZAMYLA CHAN: Tabel data. Ya. AUDIENCE: Ini berturut-turut di mana baris diperlakukan seperti kolom? ZAMYLA CHAN: Maaf. Bisakah anda ulangi? AUDIENCE: Bagaimana Anda memvisualisasikan baris? ZAMYLA CHAN: Bagaimana Anda memvisualisasikan baris dalam apa cara? Apakah Anda berbicara tentang ini baris sini atau baris tr? AUDIENCE: Baris. ZAMYLA CHAN: baris ini di sini? Saya akan membayangkan ini sebagai Saya mengeksekusi query saya. Dan ia mengatakan, OK, saya telah baik 0 sampai n jumlah baris yang cocok dengan kriteria bahwa Anda telah bertanya. Jadi saya memiliki beberapa jumlah baris. Jadi baris, yang $ rows, toko masing-masing salah satu baris dalam array. Jadi, bahkan jika itu hanya salah satu dari mereka, itu masih array baris yang cocok itu. Jadi, misalnya, ini adalah mirip dengan ketika Anda diambil cache dari pengguna. Dan kriteria ada di mana ID sama dengan ID sesi. Ada benar-benar hanya satu baris yang bisa cocok itu. Tapi tetap saja kembali baris satu baris. Jadi, Anda akan harus pergi ke baris, indeks 0, indeks cache benar-benar bisa cache. AUDIENCE: Apakah fungsi cetak dalam menggemakan hal yang sama? ZAMYLA CHAN: Ya. Ya. Cetak gema yang sama. AUDIENCE: Apakah loop foreach satunya cara untuk indeks ke baris? ZAMYLA CHAN: Apakah loop foreach satu-satunya cara yang dapat Anda iterate melalui baris? Tidak. Anda juga dapat menggunakan untuk loop, disediakan Anda tahu panjang array baris itu. AUDIENCE: Bisakah Anda mengaksesnya menggunakan berturut-turut sebagai [Tak terdengar]? ZAMYLA CHAN: Jadi Anda tidak bisa mengaksesnya hanya menggunakan baris jika Anda tidak memiliki loop foreach asalkan Anda belum menyatakan baris. Ya. Ya, dalam putih. AUDIENCE: Jadi apa yang tr dan td lakukan? ZAMYLA CHAN: Jadi tr dan td adalah tag HTML. tr menunjukkan awal dari baris tabel. Dan setiap td menunjukkan tabel baru kolom data. AUDIENCE: Untuk visual dari apa baris adalah seperti, bayangkan SQL, bagaimana mereka memiliki berturut-turut. [Tak terdengar]. ZAMYLA CHAN: Ya. Itu poin yang bagus. Anda dapat memvisualisasikan baris hanya sebagai seperti pada tabel Excel, hanya daftar baris. OK. Baik. Jadi sekarang kita sudah lebih pilih, jika tidak ada pertanyaan lagi, kita akan pergi ke insert. Jadi jika saya ingin memasukkan ke dalam beberapa meja dan menyisipkan kolom tertentu nilai-nilai, aku bisa memasukkan diriku ke Ravenclaw di tahun 7. Tapi kadang-kadang mungkin ada duplikat nilai-nilai, seperti yang kita lihat di pset7 ketika kita yang memperbarui portofolio kami. Jadi dalam hal ini, kita ingin menggunakan ON DUPLICATE KEY UPDATE, sehingga kita tidak menyimpan beberapa baris dengan sama nilai melainkan memperbaruinya. Kemudian kita benar-benar memiliki pembaruan, yang bukan merupakan insert. Ini hanya update di mana Anda memperbarui dalam tabel tertentu dengan diberikan kriteria dan kemudian, akhirnya, menghapus, yang melakukan hal yang sangat mirip. AUDIENCE: Bisakah Anda secara singkat pergi ke kunci duplikat? ZAMYLA CHAN: Ya. Pada dasarnya di sini, saya memiliki INSERT INTO Gringotts, adalah, Galleon, nilai-nilai ini. Tapi ID, mungkin, adalah kunci yang unik nilai set up dalam tabel MySQL. Jadi jika saya sudah ID yang mengatur, maka saya tidak bisa menyisipkan baris baru. Jadi jika tidak ada sudah, maka saya harus memperbaruinya. Di tengah dalam putih. AUDIENCE: Jadi memasukkan, update, menghapus, dan pilih, adalah mereka semua tersedia lokal [Tak terdengar]? ZAMYLA CHAN: Jadi masukkan, memperbarui, menghapus, dan pilih semua query SQL. Jadi, setiap kali Anda menggunakan SQL, Anda akan memiliki orang-orang yang tersedia. AUDIENCE: Kembali ke kuis masa lalu - ada pertanyaan yang berhubungan dengan jika Anda memiliki meja dan ingin menyisipkan nilai tes dalam satu dan Anda memasukkan Nama Anda sehingga tidak akan membiarkan Anda [Tak terdengar] teman Anda skor tes. Bagaimana Anda akan melakukannya dengan insert? ZAMYLA CHAN: Jadi pertanyaannya adalah tentang pertanyaan jangka menengah sebelumnya. Aku tidak menyadari yang satu itu sekarang. Jadi mungkin setelah itu, jika Anda ingin datang dan menunjukkan saya, maka saya bisa tentu memberikan tips. Tapi berbicara memasukkan hal-hal, seperti mengambil nilai seseorang ketika Anda seharusnya tidak, mari kita bicara tentang Serangan injeksi SQL. Jadi serangan injeksi SQL pada dasarnya di mana seseorang mengambil keuntungan dari keamanan rendah dari cara yang kita pakai dalam data. Jadi di sini, seperti di CS50 keuangan, ketika kita masuk, kita bisa masuk dalam nama-pengguna dalam form login, kotak teks pertama, dan kemudian masukkan password. Mungkin kode PHP kita mungkin terlihat sesuatu seperti ini, di mana $ username adalah username dan password pasca-Data adalah sandi pasca-data. Dan kemudian kita hanya mengeksekusi query kita, katakanlah, OK, baik, permintaan kita akan pilih dari pengguna kami, di mana username adalah salah satu yang mereka disampaikan. Dan password adalah password, yang berarti bahwa password cocok. Sekarang, bagaimana jika bukan benar-benar mengirimkan password yang sebenarnya, seperti 12345 dan menebak-nebak cabang yang mengatakan kata sandi dan mencoba untuk hack mereka akun, bagaimana jika sebaliknya mereka disampaikan ini. Mereka bisa ketik mungkin menebak di password. Dan kemudian mereka akan menyelesaikan quote kemudian ketik atau 1 = 1. Itu akan kecepatan langsung ke SQL query untuk terlihat seperti ini. Pilih dari pengguna dimana username = Garpu dan kata sandi sama lily atau 1 = 1. Jadi baik password memiliki benar atau 1 = 1, yang selalu benar. Jadi dalam hal ini, pada dasarnya, pengguna dapat mengambil keuntungan dari ini dan hanya log diri dan hack rekening seseorang. Jadi itu sebabnya kami ingin menghindari seseorang harus melakukan ini. Tapi untungnya, fungsi query dengan lewat di penampung akan mengambil mengurus ini untuk Anda. Juga, Anda akan biasanya tidak pernah ingin untuk benar-benar menyerahkan password sendiri. Itu sebabnya kami hashed atau dienkripsi mereka dalam CS50 keuangan. AUDIENCE: The kuis masa lalu berbicara tentang MySQL escape string. Apakah kita perlu khawatir tentang hal itu? ZAMYLA CHAN: Itu pertanyaan yang bagus. The MySQL escape string jelas merupakan suatu fungsi yang digunakan dalam query kita. Tapi yang pasti melihat ke dalam. Saya akan mengatakan bahwa permainan adil untuk mengetahui bahwa Anda akan perlu untuk memanggil yang berfungsi pada string. Ya, Belinda? AUDIENCE: Bagaimana Anda tahu kapan itu tanda kutip tunggal atau tanda kutip ganda? Dan juga, saya merasa seperti di kuliah Anda menyebutkan sesuatu tentang tidak memiliki yang [Tak terdengar] atau sesuatu atau kedua kutip tunggal di akhir. Saya pikir dia menunjukkan dalam kuliah yang Anda seharusnya memiliki apostrof 1 dan kemudian tidak memiliki apostrof atau sesuatu. AUDIENCE: [Tak terdengar]. AUDIENCE: Masalahnya adalah single terakhir kutipan di sana dalam kotak kedua seharusnya tidak ada. [Tak terdengar] Karena ketika Anda mengambil single terakhir mengutip dan cocok untuk konten ini mana password, jika Anda memiliki query, ada satu kutipan di akhir sudah. Anda ingin menggunakan kutip tunggal sebagai salah satu yang menghadap satu [Tak terdengar]. Jadi apa sebenarnya dalam teks yang kotak tidak harus memiliki itu. ZAMYLA CHAN: Aku akan mengubah itu. OK. Jika tidak ada pertanyaan, maka aku akan menyebarkannya ke Yusuf untuk berbicara tentang JavaScript, dan lain-lain. [Tepuk Tangan] JOSEPH ONG: Jadi kita menjalankan sedikit di belakang. Jadi jika Anda harus pergi, itu OK. Tapi kami meminta Anda untuk menjaga kepala Anda ke bawah jika Anda berada di tengah, sehingga Anda tidak memblokir kamera dan Anda menggunakan keluar kembali jika Anda harus. Aku Joseph by the way. Hi. Tes, tes. Dan, adalah bahwa baik? Keren. Jadi video juga akan diposting online bagi mereka yang harus pergi sekarang. Canggung. OK. Jadi review kuis. Ini adalah kucing. Sekarang, JavaScript, yang mungkin tidak sebagai aww untuk beberapa dari kalian. OK. Jadi itu pertama, ingat dari Zamyla. Ingat bahwa PHP adalah berjalan di server. Dan banyak kali, kalian menulis loop di PHP untuk mencetak HTML, kan? Jadi sekali kode yang mengeksekusi, yang HTML output yang Anda mencetak akan dikirim ke pengguna. Dan sekali itu terjadi, tidak lebih PHP dapat dijalankan, kecuali jika Anda kembali halaman tersebut, dari Tentu saja, yang reexecutes PHP. Tapi setelah Anda mencetak HTML itu, Anda tidak bisa pergi ke mana pun. Jadi HTML yang dikirimkan ke pengguna, yang merupakan browser di sini, di mana Milo menggunakan komputer. Dan begitu baik, ada beberapa hal setelah kami mengirim HTML kepada pengguna. Kadang-kadang kita ingin melakukan sesuatu seperti ketika Anda mengklik pada sesuatu, kita ingin kotak peringatan pop up, orang-orang macam interaksi, seperti ketika Anda menekan kunci, ketika Anda mengklik sesuatu pada halaman, saya ingin sesuatu terjadi. Nah, Anda tidak bisa laksanakan ulang PHP kode HTML sekali yang ditetapkan. Jadi bagaimana Anda melakukan ini? Kami memperkenalkan bahasa baru yang disebut JavaScript, yang berjalan di browser yang memungkinkan Anda untuk melakukan hal-hal HTML setelah Anda menerima dari server. Dan inilah mengapa kami menyebutnya sebagai client-side bahasa pemrograman. Ia bekerja pada komputer Anda - klien. Setiap pertanyaan tentang hal itu sejauh ini? Paradigma yang masuk akal untuk orang-orang? OK. Baik. Baik. Jadi hal pertama yang harus diperhatikan adalah JavaScript tidak PHP. Mereka memiliki beberapa sintaks yang berbeda, yang kita akan masuk ke dalam. Dan mereka memiliki kegunaan yang sangat berbeda. JavaScript, sekali lagi, untuk Anda Browser, untuk klien. Server berjalan di suatu tempat di orang lain komputer yang mengirimkan informasi kepada Anda, benar? Jadi jika kami meminta Anda untuk menulis kode PHP pada pertanyaan ujian, jangan menulis JavaScript dan sebaliknya. Anda hanya akan kehilangan poin, dan itu tidak akan tepat. Jadi mari kita masuk ke beberapa perbedaan sintaks - JavaScript di sebelah kiri dan PHP di sebelah kanan. Hal pertama yang Anda akan melihat dengan JavaScript, kita mendeklarasikan variabel dengan kata kunci var - V-A-R. PHP menggunakan tanda dolar, sebagai Zamyla dibahas sebelumnya. Jika Anda ingin mendeklarasikan asosiatif array, kita melihat sintaks akrab di sisi kanan dengan PHP. Di sisi kiri, bukan Anda menggunakan kurung kurawal. Dan kemudian kunci Anda berada di sebelah kiri. Maka Anda memiliki titik dua. Dan kemudian Anda memiliki nilai-nilai yang Anda inginkan. Jadi ini adalah bagaimana Anda akan melakukannya di PHP di sisi kanan dengan kedua baris yang dimulai pada Milo. Dan itu adalah bagaimana Anda akan melakukannya pada meninggalkan sisi dalam JavaScript jika Anda ingin apa yang kita sebut sebuah objek. Dan benda-benda di JavaScript adalah hanya array asosiatif. Jadi jika Anda ingin mengakses bidang, di PHP Anda menggunakan sintaks braket ini. Dan cara ini, Anda dapat menetapkan kembali bidang pemilik ini untuk Lauren. Nah, dalam JavaScript, jika salah satu ingin mengakses lapangan dan mengubahnya, Anda dapat menggunakan sintaks dot. Anda juga dapat menggunakan sintaks braket. Tetapi Anda tidak dapat menggunakan dot sintaks PHP. Itu tidak akan bekerja. Ini hanya bekerja di PHP. Dan akhirnya, untuk mencetak sesuatu ke konsol, Anda menggunakan console.log, yang kalian menggunakan banyak dalam pset8. Anda dapat console.log itu. Jika Anda ingin mencetak array dalam PHP, Anda harus menggunakan print r. Dan di sisi kanan, Anda melihat saya hash Rangkaian string di sana. Seseorang bertanya sebelumnya. Saya menggunakan plus dalam JavaScript. Jika saya ingin menyatukan sesuatu di PHP, saya menggunakan dot. Ini berbeda. Jika Anda menulis kode PHP, tidak menggunakan plus. Jika Anda menulis JavaScript kode, tidak menulis titik. Ini akan menjadi salah. Dan Anda akan sedih. Jadi perbedaan sintaks. Tahu sintaks Anda, karena jika Anda harus menulis pertanyaan dan Anda menggunakan sintaks dari bahasa yang salah, itu tidak akan berhasil. Dan itu akan salah. Jadi mari kita bicara tentang beberapa kontrol perbedaan aliran, bagaimana Anda menggunakan loop dalam masing-masing. Zamyla pergi ke sisi kanan. Stuff di sisi kanan harus akrab. Mari kita lihat di sisi kiri. Bila Anda gunakan untuk n loop dalam JavaScript, variabel loop Anda, var i di sana, loop atas kunci array. Jadi Anda lihat nama, rumah, dan peran. Jika saya console.log i, saya mendapatkan nama, rumah, dan peran. Mereka adalah kunci. Dalam JavaScript, loop foreach pergi atas nilai array ini. Jadi Anda melihat mereka berdua i. Namun dalam sini di sisi PHP, mencetak out Milo, CS50, dan Mascot. Mereka adalah nilai dalam PHP. Jadi ini adalah bagaimana kedua hal ini berbeda dalam bahasa yang berbeda. Jadi, jika Anda menggunakan foreach lingkaran, jangan menganggap bahwa memberi Anda kunci. Dan jika Anda menggunakan untuk n lingkaran, jangan menganggap itu memberi Anda nilai. Apakah ini masuk akal sejauh ini? Slide berikut akan menunjukkan kepada Anda bagaimana Anda dapat mengakses sebaliknya di masing-masing. Nah, jika Anda memiliki kunci dalam JavaScript dan Anda ingin nilai keluar, Anda hanya indeks ke dalam array dengan itu. Jadi Milo dari saya akan mendapatkan apa Anda inginkan - nilai. Ada sintaks ini di PHP yang berbeda. Jika Anda benar-benar ingin tahu, aku tidak pikir kami telah menunjukkan kepada Anda belum. Tetapi jika Anda tertarik, Anda dapat menggunakan sintaks tambahan di sebelah kanan sisi yang benar-benar akan membiarkan Anda mendapatkan kunci dalam PHP ketika Anda menggunakan loop foreach. Jadi hanya sedikit trivia jika Anda tertarik. Jadi itu hanya untuk menunjukkan perbedaan antara dua loop tersebut. Jangan mencampur mereka ketika Anda pemrograman pertanyaan. Setiap pertanyaan tentang itu. Keren. Baik. JavaScript obyek. Saya berbicara tentang mereka. Mereka seperti array asosiatif. Satu hal yang saya ingin Anda untuk dicatat di sini adalah bahwa nilai dalam sebuah asosiatif array dapat menjadi apa pun dalam JavaScript. Ia bahkan bisa menjadi fungsi, seperti di sana. Saya memiliki fungsi yang adalah nilai kunci. Dan jika saya ingin memanggil fungsi itu, Aku hanya mengakses kulit. Dan kemudian saya menempatkan tanda kurung setelah itu. Dan yang bekerja. Jadi pertanyaan? Tidak ada? OK. Baik. JavaScript, seperti PHP, longgar diketik. Apa artinya? Itu memang memiliki jenis. Tetapi ketika Anda mendeklarasikan JavaScript variabel, Anda mengatakan var i. Anda tidak mengatakannya. Itu bukan apa-apa. Anda hanya mengatakan itu variabel. Dan kemudian JavaScript akan menangani jenis di bawah tenda untuk Anda. Kita bebas dapat mengkonversi antara jenis karena hal ini. Jadi saya mulai keluar sebagai nomor dalam kasus ini. Dan kemudian saya memiliki sebuah string. Dan saya menambahkan saya untuk itu. Dan aku menetapkan kembali kembali ke i. Jadi pada baris pertama, i adalah nomor. Pada baris kedua, saya sekarang menjadi String setelah saya melakukan pergantian tersebut. Dan di sini, aku hanya concatenating nomor ke string. Jadi, Anda melihat bahwa meskipun saya adalah integer dalam bagian pertama, itu semacam seperti yang dikonversi ke String dan kemudian ditambahkan ke yang halo tali. Dan itulah apa yang saya maksud dengan mengetik longgar. Itu yang Anda mengkonversi antara jenis yang sangat mudah. Dan tidak membuang peringatan Anda seperti C tidak. Jadi saya sekarang berisi halo 123 ke string. Berikutnya. Kita juga bisa dengan bebas membandingkan antara jenis. Jadi, jika Anda hanya menggunakan ==, sangat banyak seperti di PHP, JavaScript melakukan hal yang sama. String 123 adalah sama dengan jumlah 123 ketika Anda menggunakan equals ganda. Ketika digunakan sama dengan tiga, juga ingin memastikan bahwa Tipe adalah sama. Jadi karena itu adalah string dan yang nomor, meskipun mereka berdua 123, bila Anda menggunakan tiga sama, Anda mendapatkan palsu. Dalam dua kali lipat sama dengan kasus, Anda mendapatkan benar, karena equals ganda tidak peduli jenis. Equals tiga tidak peduli jenis. Pertanyaan? OK. Dan satu hal lagi tentang JavaScript adalah lingkup adalah jenis global kecuali Anda dalam suatu fungsi. Dan bekerja sama cara PHP sebenarnya. Jadi mari kita pergi melalui contoh ini. Saya set i 999. Dan kemudian saya pergi ke ini untuk loop. Jadi jika saya mencetak i dalam hal ini untuk lingkaran, saya berharap 0, 1, 2, 3, 4. Saya mendapatkan i = 4. Ia bertambah saya sekarang untuk 5 at akhir untuk loop. Dan kemudian istirahat keluar dari loop, karena tidak memenuhi kondisi lagi. Apa yang Anda berpikir bahwa selanjutnya console.log mencetak? Jadi itulah yang akan dilakukan di C. Dalam C, karena jika Anda memiliki seperti var i luar dan Anda memiliki var i di dalam lingkaran, seperti untuk loop, maka itu membuatnya sedemikian rupa sehingga itu scoped bahwa dua i adalah berbeda. Dalam JavaScript, itu hanya akan memperlakukannya sebagai i yang sama. Saya mendapatkan 5, karena itu adalah nilai setelah keluar dari loop. Jadi mereka i adalah i yang sama. Apakah itu masuk akal? Yah, masuk akal dari sudut pandang JavaScript. Tapi paradigma yang sama tidak membawa ke C. Mereka memiliki aturan scoping yang berbeda. Ya. AUDIENCE: [Tak terdengar] di luar fungsi [Tak terdengar]? JOSEPH ONG: Jadi di luar fungsi yang? Jadi saya akan mendapatkan bahwa hanya dalam satu detik. Jadi kita sebut foo (i). Ini melewati i ke foo, kenaikan , dan kemudian log itu. Jadi itu 5. Sehingga menjadi 6. Tapi apa yang saya bicarakan adalah bahwa saya dalam fungsi itu. Karena itu parameter, itu scoped untuk fungsi tersebut. Jadi sekali saya benar-benar keluar dari itu fungsi, sekarang akan pergi kembali ke i lama. I yang hanya scoped karena itu dalam suatu fungsi. Dan kami memiliki ruang lingkup dan fungsi. Tapi kita tidak memiliki ruang lingkup di luar fungsi dalam JavaScript. Apakah itu masuk akal? Ya. Pertanyaan. AUDIENCE: Sama [Tak terdengar]? JOSEPH ONG: Jadi ya. Dalam PHP, itu jenis yang sama hal. Ada kehalusan sedikit sebenarnya. Tapi Anda bisa bertanya kepada saya tentang bahwa setelah review. Anda tidak benar-benar perlu tahu bahwa kehalusan untuk kuis. Untuk semua maksud dan tujuan, seperti variabel, global dan PHP, kecuali mereka dalam suatu fungsi, sama hal dalam JavaScript. Ya. AUDIENCE: Mengapa hal ini diperbolehkan dalam JavaScript dan ada di mana lagi? JOSEPH ONG: Jadi mengapa itu memungkinkan dalam JavaScript dan bukan di C? Hanya saja siapa pun datang dengan JavaScript memutuskan bahwa ini adalah OK di JavaScript. Jadi itu hanya seperti sebuah bahasa pemrograman konvensi seperti kita katakan. Ya. AUDIENCE: Jadi mengapa pergi 6-5? JOSEPH ONG: Jadi pergi 6-5, karena ketika aku melewati saya ke foo, bahwa i dalam foo sekarang scoped untuk foo, karena ada dalam lingkup fungsi dalam JavaScript. Tapi begitu aku keluar dari sini, karena itu scoped ke fungsi, aku hanya menggunakan i biasa yang berada di dalam sisa aliran kontrol. Masuk akal? Dapatkah saya melanjutkan? Baik. Keren. Penerimaan ini adalah benda-benda tersebut diteruskan oleh referensi. Kau tahu bagaimana ketika Anda melewati array ke C Anda bisa sebenarnya memodifikasi array? Ini hal yang sama di JavaScript. Jika saya melewati sebuah objek, dalam hal ini, saya melewati Milo ke dalam fungsi catify ini. Milo mulai keluar. Namanya Milo Banana. Saya melewati objek itu ke dalam fungsi karena itu obyek, sebuah asosiatif array dalam JavaScript. Ketika saya melakukan operasi dalam fungsi itu, akan benar-benar mengubah objek. Jadi ini hanya akan terjadi untuk objek dalam JavaScript, persis seperti itu terjadi untuk array dalam nama C. Jadi Milo benar-benar akan menjadi kucing sekarang. Apakah itu masuk akal? Jadi ini hanya bekerja untuk objek. Obyek tersebut diteruskan oleh referensi. Ya. AUDIENCE: Jadi kau mengatakan bahwa berbeda dengan variabel i. JOSEPH ONG: Ya. Variabel yang saya hanya nomor, kan? Ini seperti di C ketika Anda melewati sebuah integer, itu membuat salinan. Dan ketika Anda melewati sebuah array, itu benar-benar mengubah array yang sebenarnya dalam C. Hal yang sama terjadi dengan JavaScript dalam kasus ini. Baik. Dan selanjutnya, Milo sedih karena dia sekarang kucing. Itu benar-benar Milo setelah beberapa perjalanan ke dokter hewan. Jadi bagaimana kita menggunakan JavaScript dalam sebuah halaman web? Kita bisa memasukkannya. Ini adalah kode HTML dengan tag jalur. Jadi saya memiliki tag jalur di sana. Dan kemudian aku menaruh beberapa JavaScript kode dalam tag script. Dan kemudian dijalankan ini. Ketika saya lakukan saja seperti ini, itu disebut inline JavaScript. Ini semacam berantakan, karena JavaScript sebenarnya dalam HTML. Cara yang lebih baik untuk melakukan hal ini, jauh lebih baik, adalah menulis JavaScript Anda dalam file eksternal dan kemudian memberikan tag script dengan sumber. Dan ini akan pergi ke file JavaScript dan membaca kode JavaScript dari file tersebut sebagai gantinya. Dan cara ini, Anda tidak memiliki banyak JavaScript pada awal Anda File HTML, yang membuat itu benar-benar berantakan. Anda hanya menaruhnya di tempat lain. Dan kemudian akan membacanya dari sana. Apakah itu masuk akal? Hal penempatan. Dalam kasus ini, script sebelum tubuh. Jadi ketika saya melaksanakan itu, ada apa-apa di dalam tubuh belum. Mungkin ini akan membuat sedikit lebih merasakan ketika saya menunjukkan bagian selanjutnya. Dalam hal ini, script datang setelah div. Jadi div benar-benar muncul pada halaman pertama. Di sini dalam lingkaran merah kecil ini, Anda melihat teks muncul. Dan kemudian peringatan muncul. Dalam kasus pertama, karena script sebelum div itu, peringatan muncul pertama. Dan kemudian div muncul setelah Anda mengabaikan kotak. Jadi eksekusi penting. Jadi kita akan ingatlah ini. Ini akan menjadi penting dalam sedikit. OK. Jadi baik, bagaimana Anda menunggu sampai Seluruh halaman dimuat maka sebelum Anda mengeksekusi beberapa kode? Kita akan masuk ke dalam ini sedikit bit kemudian juga. Tapi terus penempatan ini hal-hal dalam pikiran ketika kita datang ke slide lain. Jadi kita sampai DOM sekarang. Dan apa DOM? Jadi jika Anda melihat kode HTML, itu hanya sekelompok teks pada layar. Jadi bagaimana JavaScript tahu bahwa ini adalah elemen HTML? Jadi kita harus memiliki beberapa memori representasi ini struktur yang kita miliki. Dan setiap kali kita memiliki ini dalam memori perwakilan di JavaScript, kita sebut bahwa DOM. Dan itu hanya cara orang memutuskan bahwa kita harus mewakili ini Struktur HTML sebagai. Dan apa DOM ini terlihat seperti? Nah, dalam representasi memori, kita mengambil teks ini. Dan kami mengubahnya menjadi memori representasi. Jadi ini adalah HTML. Jadi pertama-tama kita mengetahui bahwa setiap Pohon DOM memiliki dokumen. Sepertinya pohon. Dan dokumen berisi HTML tag, sebenarnya semuanya dalam hal ini sekarang. The HTML tag memiliki dua anak. Ia memiliki kepala. Kepala yang, jika Anda melihat lekukan di sana pada bagaimana hal itu terstruktur antara tag dekat, kepala memiliki anak. Anak itu judul. Tepat. Sekarang, kami memiliki anak tubuh. Dan kemudian tubuh yang memiliki anak yang disebut keluarga. Dan bahwa keluarga memiliki tiga anak - tertua, tengah, dan bungsu. Jadi, Anda harus tahu cara menggambar diagram seperti ini ketika kami meminta Anda bagaimana untuk menggambar diagram ketika kita memberi Anda HTML di sebelah kiri. Tahu bagaimana untuk menghasilkan pohon DOM. Dan dalam hal ini, hanya ada beberapa teks, yang saya sudah diwakili kotak sedikit. Apakah struktur pohon DOM ini membuat pengertian dan apa DOM itu? Jadi apa p stand for? Di sini, p di sana di tag yang mewakili tag paragraf dalam HTML. Jadi, Anda bisa mencarinya. Tapi itu hanya berarti beberapa ruang untuk beberapa teks. Dan memiliki beberapa styling CSS default, karena itu adalah tag paragraf. Tapi tidak benar-benar khawatir tentang bagian itu terlalu banyak. Hanya tahu itu placeholder untuk beberapa teks. Ya. Pertanyaan? Ya. AUDIENCE: Anda hanya disebutkan CSS. Keluarga hash dan hash semua hal yang pada dasarnya adalah mewakili ID dalam CSS? JOSEPH ONG: Ya, persis. Aku akan mendapatkan apa hash ini berarti dalam satu detik. Ketika Angela pergi CSS, dia berbicara tentang CSS. Ini adalah penyeleksi CSS yang dia bicarakan. Ya, Rob? ROB Bowden: Saya juga akan berkomentar bahwa DOM dalam tag judul juga node teks. JOSEPH ONG: Benar. Jadi dalam tag judul, Saya punya beberapa DOM teks. Jadi benar-benar, judul ini harus memiliki seperti kotak kecil yang datang dari itu juga. Tapi itu tidak terlalu penting terlalu banyak dalam kasus ini. Kami tidak benar-benar peduli tentang node teks, seperti yang kita sebut mereka, terlalu banyak. OK, kita lakukan. Rupanya, kita lakukan. Dan saya akan memperbaikinya bahwa ketika Saya upload lagi. Apakah itu masuk akal? Jadi bagaimana kita bekerja dengan DOM? Setiap kali Anda berurusan dengan DOM di JavaScript, ada dua langkah. Anda memilih elemen DOM. Dan kemudian Anda melakukan hal-hal untuk itu. Jadi dalam hal ini, secara abstrak, saya sudah memilih elemen tengah. Dan kemudian contoh melakukan hal-hal untuk itu akan mengubah teks. Yang digunakan untuk menjadi Bob. Sekarang, apa yang saya lakukan untuk itu saya berubah Bob Milo dalam kasus ini. Jadi bagaimana kita benar-benar melakukan ini? Bagaimana kita melakukan pemilihan tersebut? Dan bagaimana kita melakukan hal-hal yang dapat hal setelah kami telah mengambil itu? Nah, cara kalian telah mempelajarinya di kelas ini adalah dengan menggunakan sesuatu yang kita disebut jQuery. Jadi apa yang jQuery? jQuery adalah library yang membuat JavaScript lebih mudah untuk menulis. Jadi seseorang mengambil waktu dan menulis jQuery. jQuery sebenarnya ditulis dalam JavaScript. Dan kemudian karena mereka melakukan ini, kita sekarang memiliki sejumlah fungsi yang kita bisa menggunakan yang membuat kami hidup sangat mudah. Jadi apa adalah beberapa hal-hal yang dilakukannya? Hal ini membuat memilih elemen lebih mudah. Itu membuat perubahan HTML, menambahkan kelas lebih mudah. Itu membuat Ajax lebih mudah. Kita akan sampai ke bahwa dalam satu detik. Dan itu analog dengan C perpustakaan. Jadi Anda termasuk string.h, Anda mendapatkan strlen. Anda mendapatkan strcpy, semua hal ini. Bila Anda termasuk jQuery, Anda mendapatkan bagus cara untuk memilih elemen untuk perubahan hal, dan sebagainya. Anda mendapatkan fungsi tambahan yang JavaScript tidak memberikan. Jadi jQuery bukanlah JavaScript. jQuery adalah library yang ditulis dalam JavaScript yang membuat JavaScript mudah untuk menulis. Jadi jQuery bukanlah suatu pemrograman bahasa. Tapi JavaScript. buat. Tentu Anda mendapatkan terminologi yang benar. Ada pertanyaan? Ya. Apakah itu pertanyaan? Baik. Jadi bagaimana Anda menggunakan jQuery? Nah, ketika Anda sedang menulis beberapa Kode JavaScript dan Anda menyertakan jQuery di bagian atas file Anda sebagai file script, Anda menggunakan tanda dolar sekarang untuk mendapatkan akses ke jQuery. Dan ini berbeda dari tanda dolar di PHP. Ini adalah simbol yang sama Anda mengetik pada keyboard Anda. Tapi mereka berarti hal yang sangat berbeda. Tanda dolar di PHP berarti ini adalah bagaimana saya mendeklarasikan variabel. Dalam JavaScript, ketika Anda telah menyertakan jQuery, itu singkatan dari jQuery. Jadi ingatlah bahwa dalam pikiran. Jadi bagaimana mungkin kita memilih elemen DOM? Nah, bila Anda melakukannya dengan jelek JavaScript cara, Anda mengakses mendokumentasikan variabel global. Dan kemudian Anda mendapatkan elemen dengan keluarga ID. Ini benar-benar panjang dan bertele-tele dan tidak sangat bagus. Atau Anda bisa mendapatkan semua elemen yang merupakan tag p. Yang bekerja juga dalam JavaScript. Tapi kita tidak pernah benar-benar menunjukkan Anda sintaks terlalu banyak. Apa yang kita tunjukkan kepada Anda adalah jQuery. Sehingga seluruh pemilih di sana yang diungkapkan dalam JavaScript hanya mendapat kental terhadap dolar ini sangat bagus menandatangani keluarga hashtag. Dan $ p, hanya di mana itu seperti itu. Jika Anda ingin memilih semua tag p dalam sebuah keluarga, kami menempatkan spasi antara keduanya. Dan sekarang, kita mendapatkan semua p tag di dalam keluarga. Dan tampak akrab? Nah, berbicara tentang Angela Penyeleksi CSS. Beri aku satu detik. Dan dalam rangka untuk memilih elemen, Anda hanya menggunakan hal yang sama seperti Anda akan melakukan dengan selector CSS. Jika Anda menempatkan hash di depan itu, ia memilih oleh ID. Sebuah dot memilih oleh kelas. Jika Anda hanya memiliki hal tanpa hash atau titik, akan memilih tag tersebut. Pertanyaan. Ya? AUDIENCE: Ketika kita menggunakan dot di kami HTML, adalah bahwa tidak jQuery? JOSEPH ONG: Dot di HTML kami adalah hal JavaScript. Ini bukan hal jQuery. Cara kalian belajar dengan jQuery adalah dengan menggunakan html.. Dan kemudian Anda melewati apapun yang HTML akan menjadi. Jadi saya akan mendapatkan bahwa hanya sebenarnya kedua. Jadi bagaimana kita melakukan hal-hal untuk elemen setelah kami telah memilihnya? Jadi itulah contoh memilih elemen. Jadi sekarang, kami ingin melakukan hal-hal itu. Jadi dalam hal ini, biarkan aku kembali ke slide sebelumnya. Itu Bob sebelumnya. Dan saya ingin mengubah itu dalam HTML ke Milo. Jadi saya memanggil fungsi HTML dari elemen. Bahwa fungsi HTML adalah metode elemen. Dan kemudian saya memberikan apa Saya ingin HTML untuk menjadi. Dan itu hanya menggantikan apa yang ada dalam bahwa tag dengan apa pun yang saya berikan. Ya. Pertanyaan? AUDIENCE: hashtag ini digunakan untuk hanya jQuery. [Tak terdengar] kami tidak akan menggunakan itu. JOSEPH ONG: Ya, persis. Tapi jangan terlalu khawatir JavaScript tentang murni. Aku hanya ingin kalian fokus pada bagaimana Anda akan melakukannya dengan jQuery, karena itu akan menjadi penting bagian di kuis. Benar. Tepat. Jadi Anda lihat hashtag itu, sehingga sesuai untuk memilih elemen dengan ID tengah karena hashtag itu. Hashtag berarti ID. Dan elemen ini memiliki ID tengah. Jadi itulah elemen yang kita pilih. AUDIENCE: [Tak terdengar]. tanda dolar hashtag [Tak terdengar]? JOSEPH ONG: Jadi tidak ada. Pertanyaannya adalah dapat Anda gunakan. Nilai. Dan nilai. Hanya bekerja pada elemen yang input. Dalam jQuery, itu akan menjadi . Val, tidak. Nilai. Jadi saya akan mendapatkan contoh kecil yang menunjukkan semua ini dalam kombinasi dalam satu detik. Tapi saya pikir ini menyajikan potongan kecil masuk akal untuk orang sejauh ini. Ingin mengubah HTML, memanggil metode HTML. Ya. AUDIENCE: Bisakah Anda menjelaskan metode lagi? JOSEPH ONG: Jadi metode ini hanya fungsi yang dimiliki oleh salah satu, dalam hal ini kasus, salah satu elemen DOM ini, karena Anda melihat saya dipilih elemen pertama. Sebenarnya, saya menggunakan mouse. Aku memilih elemen pertama. Dan kemudian aku menelepon HTML ini berfungsi bahwa itu. Dan karena fungsi ini milik hal ini, kita menyebutnya metode. Itu hanya sebuah nama indah untuk itu. Katakan itu lagi. Jadi ingat, kami memilih elemen sekarang. Dan kami sudah memasukkannya ke dalam dari variabel elemen. Benar? Jadi ketika kita ingin mengubah HTML pada di dalam, karena itu Bob sebelumnya, Anda ingin mengubah teks yang ke Milo. Jadi kita sebut HTML. Dan kami ceritakan apa yang HTML dalam unsur yang harus sekarang. Dan sehingga mengubahnya menjadi Milo, karena saya memberikannya Milo. AUDIENCE: Jadi mereka bekerja sama. [Tak terdengar] JOSEPH ONG: Yeah, yeah. Mereka bekerja bersama-sama. Jadi salah satu dari mereka memilih elemen pertama. Dan yang kedua tidak sesuatu untuk itu. Ya. AUDIENCE: [Tak terdengar]. Jika metode ini berbeda dengan di HTML Anda memiliki metode yang sama yang sebenarnya. JOSEPH ONG: Ya. Itu adalah metode yang berbeda. Itu adalah metode yang berbeda. Dan kita bisa menutupi bahwa hanya satu detik ketika kita sampai ke sebuah contoh. Saya ingin memastikan bahwa kita mempercepat karena kita kehabisan waktu. Tapi kita sudah menjalankan cara dari waktu ke waktu sekarang. OK. Keren. Jadi jika Anda ingin menambahkan kelas, ada juga merupakan metode add kelas. Ini hanyalah sebuah contoh dari apa yang Anda dapat melakukannya dengan jQuery. Itu hanya menambah kelas. Jika Anda ingin menghapusnya, Anda dapat menghubungi menghapus. Itu hanya hal lain yang dapat Anda lakukan. Contoh sehingga lebih banyak hal yang dapat Anda lakukan. Jadi bisa saya hanya menaruhnya di bagian atas seperti ini? Menghapus termuda. Jika saya hanya menjalankan bahwa JavaScript pada bagian atas file saya, akan yang bekerja? Benar. Karena tengah belum ada. Jadi ini tidak akan bekerja. Perintah eksekusi. It goes ke atas terlebih dahulu. Apa? AUDIENCE: Bungsu belum ada? JOSEPH ONG: Ya. Bungsu belum ada. Tepat. AUDIENCE: Kau bilang tengah. JOSEPH ONG: Maaf. Bungsu belum ada. Dan hal lainnya adalah saya belum termasuk jQuery mengajukan meminta skrip src. Jadi itu tidak akan bekerja. Sebenarnya, saya tidak melakukan itu di slide berikutnya, yaitu seharusnya untuk memperbaiki yang baik. Tapi cara kita melakukan ini adalah JavaScript adalah event driven. Jadi apa yang kita lakukan adalah kita menggunakan event Handler untuk membuat hal ini terjadi. Dan jadi saya pilih dokumen set pertama. Aku berkata, OK, ketika dokumen siap, biarkan aku menjalankan fungsi. Jadi itulah yang sintaks berarti. Aku memilih dokumen. Sekarang, ketika dokumen siap, jalankan fungsi. Dan di sini ketika dokumen siap, yang berarti semua HTML memiliki dimuat, maka saya menjalankan fungsi yang menghilangkan elemen tersebut. Dan sekarang, ketika saya menjalankan fungsi ini bahwa aku masuk ke siap, aku dijamin bahwa semua HTML pada Halaman akan ada terlebih dahulu. Ya. Pertanyaan? AUDIENCE: Apa kata kunci event dalam fungsi? JOSEPH ONG: Sehingga event kata kunci dalam Fungsi ini hanya parameter yang akan dilewatkan ke fungsi untuk acara apapun. Ini hanya sesuatu yang Anda dapatkan secara gratis. Bila Anda menggunakan kunci dalam penangan pset8, acara yang bisa memberitahu Anda, untuk Misalnya, tombol yang ditekan pada. Dalam hal ini, untuk acara siap, itu sebenarnya tidak super berguna. Tapi untuk acara ditekan, itu lebih berguna, karena Anda bisa tahu mana Key ditekan dengan tombol mengakses kode dari yang objek acara. Benar? Apakah itu masuk akal? OK. Ya. Pertanyaan? AUDIENCE: Jadi bisa Anda meletakkan tag script di bawahnya? JOSEPH ONG: Jadi ya. Anda bisa menempatkan script tag bawahnya. Tapi kemudian itu hanya menjadi benar-benar berantakan. Dan kami ingin memusatkan semua kode kita di satu tempat. Dan ini akan memungkinkan kita untuk melakukannya. Ingat sebelumnya saya mengatakan ada lebih baik cara untuk memastikan bahwa unsur-unsur yang pada halaman sebelum Anda mengeksekusi kode? Dan ini adalah cara yang bagus Anda akan mencapai itu. AUDIENCE: [Tak terdengar]. JOSEPH ONG: Ya. Anda masih harus, kan? Karena ingat, Anda termasuk mengajukan di bagian atas halaman. Jadi itu akan mengeksekusi terlebih dahulu sebelum Anda bisa sampai ke bawah halaman. OK. Jadi, Anda juga dapat menambahkan berbeda jenis event handler. Ini hanya proses klik. Ketika saya klik termuda, maka itu akan muncul dengan peringatan. Ini hanya berbeda jenis acara. Berbeda dengan acara siap, Anda sekarang menggunakan event klik saat Anda menerima klik pada sebuah elemen. Dan dalam hal ini, ingat, klik handler melekat termuda. Jadi hanya terjadi ketika Saya klik termuda. Dan di yang lain, acara siap melekat pada dokumen. Jadi menunggu dokumen siap. Masuk akal? Saya pikir saya bisa melanjutkan. Ya. Pertanyaan? AUDIENCE: [Tak terdengar]. dalam hal ini Anda menggunakan [Tak terdengar]. JOSEPH ONG: Oh, yeah, karena dalam hal ini kasus, saya harus menunggu termuda elemen untuk muncul di layar pertama sebelum saya bisa melampirkan handler klik untuk itu, itulah sebabnya saya memasukkannya ke dalam dokumen siap. OK. Dan selanjutnya, jadi ini adalah contoh besar bagaimana Anda akan menggabungkan semuanya. Ini hanyalah sebuah contoh validasi form Anda telah melihat dalam kuliah. Jadi mengambil langkah demi langkah sebagai Anda pergi melalui ini. Dan itu akan benar-benar OK. Hanya membacanya dari atas ke bawah. Saya memiliki bentuk di bagian bawah. Ketika dokumen siap, saya lampirkan mengirimkan handler untuk membentuk, sehingga ketika saya mengirimkan formulir, saya mendapatkan nilai-nilai dalam setiap input tersebut. Dan aku memeriksa apakah itu kosong. Jika itu kosong, aku kembali palsu, karena Saya tidak ingin mengirimkan formulir, karena bentuk yang salah. Jika password kosong atau kurang dari delapan karakter, saya tidak mengajukan bentuk, karena itu juga salah. Dan palsu kembali hanya mencegah bentuk dari mengajukan dan pergi ke halaman baru. Dan mudah-mudahan, ini masuk akal. Saya pikir kalian harus berjalan melalui ini langkah demi langkah kode Anda sendiri. Dan setelah Anda memahami apa yang pilih elemen dan melakukan hal-hal itu benar-benar memerlukan, ini akan membuat banyak akal untuk Anda. Ya? AUDIENCE: Apakah yang name = username artinya? JOSEPH ONG: Jadi nama = nama pengguna dan name = password hanya berarti melihat atribut apa pun Anda memilih. Dan kemudian yang harus sesuai. Jadi kita masuk ke pendaftaran. Dan kemudian kita melihat semua input dan pendaftaran. Dan kemudian kita memilih satu di mana nama Atribut sama dengan nama pengguna. Sehingga pemilih pertama hanya memilih masukan nama pengguna. Dan bahwa pemilih kedua hanya memilih password satu, karena mereka memiliki atribut nama mereka ditetapkan sebagai apa mereka seharusnya. Pertanyaan? AUDIENCE: Pada penyerahan, bagaimana bagian bawah menyelesaikan bagian atas? JOSEPH ONG: Jadi itu karena dari event handler. Jadi kita menunggu untuk menyerahkan acara yang dipecat dari formulir. Dan itu semua yang mengirimkan. Mengapa saya sebut menyerahkan sana? Ia mengatakan, ketika formulir dikirimkan, Saya mendapatkan menyerahkan acara. Jadi biarkan aku hanya mencegat itu dan kemudian jalankan kode ini sebagai gantinya. Ya? AUDIENCE: Mengapa Anda memiliki memiliki fungsi event? Mengapa kamu tidak bisa hanya [Tak terdengar]? JOSEPH ONG: Karena dalam JavaScript, Anda harus menyatakan fungsi. Itu hanya cara kerjanya dalam JavaScript. Anda harus mengatakan itu akan untuk menjalankan fungsi. Jadi kau mengatakan bahwa kau mengharapkan fungsi di sini bukannya hanya kurung kurawal. AUDIENCE: Dan fungsi adalah apa pun yang berikut? JOSEPH ONG: Ya. Fungsinya adalah apa yang ada di dalam kurung kurawal setelah bahwa fungsi kata kunci. Ya? AUDIENCE: [Tak terdengar]. JOSEPH ONG: Untuk mengirimkan? AUDIENCE: Tidak, untuk fungsi tanpa acara tersebut. JOSEPH ONG: Ya. Jadi tanpa acara tersebut, Anda dapat memiliki itu. Jika Anda tidak perlu acara tersebut, maka Anda hanya dapat menghilangkan itu. Tapi jika Anda melakukannya, maka Anda hanya menaruhnya di sana. Ya. Pertanyaan singkat? AUDIENCE: [Tak terdengar]. JOSEPH ONG: Ya. Karena apa yang perlu Anda lakukan, document.ready hanya mengatakan menunggu untuk semua HTML pada halaman untuk memuat pertama. Dan biasanya, Anda ingin elemen Anda di tempat sebelum Anda menjalankan kode apapun. Baik. Kami harus pergi ke Ajax. Kami tidak punya banyak waktu. Jadi pro dan kontra. JavaScript lebih mudah mencoba menulis dengan jQuery. Tapi jQuery agak lambat. Ini seperti PHP lebih lambat dari C, karena itu ditafsirkan. Dan jQuery adalah sedikit lebih lambat dari JavaScript, karena tidak banyak hal-hal di bawah tenda. Dan jadi jika Anda menggunakan jQuery, itu hanya sedikit lebih lambat dari JavaScript, meskipun memberi Anda bagus keanggunan. Dan akhirnya, Ajax. Sejauh ini dengan Ajax, Anda belum melihat Ajax dalam hal pset7 belum, karena ketika Anda melakukannya, Anda mengirimkan formulir untuk kutipan. Ini beban halaman baru. Jadi Anda mendapatkan lampu kilat putih besar ini pada halaman sementara yang beban halaman kedua, benar? Ini akan sangat baik jika Anda tidak memiliki flash ini. Seperti Facebook, jika Anda hanya gulir ke bagian bawah, ia menambahkan konten baru tanpa menyegarkan seluruh halaman. Jadi sesuatu seperti ini akan menyenangkan. Ini adalah kode JavaScript di sisi kiri. Anda mendapatkan apa yang ada dalam input itu. Anda mendapatkan info saham dari Yahoo! Dan kemudian Anda membuat string besar yang mengatakan, OK, ini adalah pesan yang saya inginkan untuk ditampilkan di layar. Dan kemudian Anda menaruh pesan bahwa di dalam dari beberapa elemen HTML yang mendapat ditampilkan pada layar. Jadi itu semua yang terjadi di sini. Jadi pada dasarnya, karena semua ini JavaScript dan Anda tidak perlu menjalankan PHP lagi, ini akan memastikan bahwa halaman tidak refresh. Jadi ini hanya sebuah ide abstrak yang saya katakan di sini untuk saat ini. Ide abstrak adalah bahwa jika Anda melakukannya semua dalam JavaScript, Anda tidak memiliki refresh halaman. Tapi bagaimana Anda benar-benar melakukan ini? Well, sebenarnya, mari kita bicara tentang masalah dengan ini terlebih dahulu. Masalahnya adalah dalam JavaScript, eksekusi sinkron. Jadi, Anda harus menunggu untuk satu line untuk menyelesaikan sebelum Anda mengeksekusi baris berikutnya. Dan bagaimana jika aku akan ke Yahoo!, dan server mereka benar-benar lambat, dan dibutuhkan mereka tiga detik untuk memberikan kembali info saham? Ketika saya memukul yang garis harga, jika eksekusi sinkron, seperti yang oleh default, apa itu hanya akan lakukan adalah browser Anda akan mengulur tiga detik. Dan Anda tidak akan dapat melakukan apa pun sementara mendapat data tersebut. Ini akan dibekukan. Dan itu buruk. Anda tidak ingin pengguna untuk memiliki halaman web beku. Benar? Itu hanya buruk. Semua orang setuju? Jika Anda browsing Facebook dan membeku dan Anda tidak dapat melakukan apa-apa, Anda mendapatkan benar-benar frustrasi. Jadi solusinya adalah kita membuat sesuatu asynchronous gantinya. Jadi semua hal ini mengatakan asynchronous adalah, aku akan menanyakan hal ini URL untuk beberapa data. Dan kemudian aku akan terus berjalan. Aku hanya akan terus melaksanakan kode itu setelah itu apa pun. Dan kemudian setiap kali data yang siap, maka saya akan memprosesnya. Itu semua yang ia katakan. AUDIENCE: Ajax hanya membuat kode asynchronous? JOSEPH ONG: Ini adalah asynchronous cara data pengambilan data. Jadi hal pertama tentang Ajax itu memungkinkan saya mendapatkan data dari situs eksternal. Dan yang kedua adalah ia memastikan bahwa halaman saya tidak warung sementara aku mengambil data tersebut. Itulah bagian asynchronous dari itu. Karena berbunyi di tempat lain, karena saya mengatakan saya terus berlangsung sementara itu mengambil data itu, yang membuat asynchronous. Aku terus mengeksekusi. Jadi, teruslah asynchronous yang ide dalam pikiran. Dan aku akan menunjukkan kepada Anda apa perbedaannya. Versi sinkron adalah di sisi kiri. Versi asynchronous adalah di sisi kanan. Lihatlah angka-angka untuk melihat mana langkah-langkah sesuai dengan apa yang mengeksekusi pada setiap baris. Di sana, waspada muncul pertama. Karena mendapatkan info saham dari Yahoo! mengambil tiga detik, warung selama tiga detik. Dan kemudian ia mengingatkan harga setelah tiga detik. Jadi sekarang, bahwa peringatan menunjukkan pada waktu itu - tiga detik masuk Dan kemudian ia mengingatkan dengan setelah itu. Jadi itu hanya berjalan langkah demi langkah. Ini seperti apa yang kalian akan menerima, benar? Dengan eksekusi asynchronous, Anda waspada pertama. Kemudian Anda pergi ke URL ini. Dan kau katakan, aku akan hanya meminta data. Dan kemudian aku akan proses nanti. Jadi segera mengeksekusi baris berikutnya setelah saya membuat permintaan asynchronous. Jadi 0,001 detik, Anda lihat hi waspada. Jalankan fungsi itu, bye waspada. Dan karena saya berjanji bahwa saya akan memproses data kemudian, apa terjadi adalah ketika data yang datang kembali tiga detik kemudian, maka saya menjalankan bahwa Fungsi yang saya miliki di sana. Ya? AUDIENCE: Bisakah Anda tentukan atau menjelaskan apa artinya Ajax? JOSEPH ONG: Jadi Ajax adalah cara yang jika saya membutuhkan data saat aku di sebuah situs web dan saya tidak ingin me-refresh halaman, maka Saya menggunakan teknologi ini disebut Ajax. Yang pada dasarnya hanya berarti, pergi mengambil Data dari situs web lain. Dan melakukannya dengan cara yang hanya tidak warung halaman web saya. AUDIENCE: Jadi adalah bahwa melekat bagian dari JavaScript atau jQuery? JOSEPH ONG: Jadi seseorang menulis cara untuk melakukan ini JavaScript lama. Pada satu titik, itu tidak ada. Dan begitu seseorang menemukan teknik ini untuk memungkinkan orang untuk meminta data ini dalam mode ini. Dan mereka menulis beberapa hal untuk melakukannya untuk Anda. Dan jQuery hanya memberi Anda ini cara yang sangat baik untuk melakukannya dengan $ ini. mendapatkan fungsi. pertanyaan? Saya bisa menjawab pertanyaan tentang Ajax sesudahnya juga. Aku akan berada di sini. Jadi mari kita mengambil data tanpa menyegarkan halaman. Dan mari kita melakukan ini di cara asynchronous yang tidak membeku halaman. Terlalu lama, tidak membaca jika itu Penjelasan itu terlalu lama bagi Anda. Jadi akhirnya, cross-site serangan scripting. Kami melihat ini dengan Zamyla. Jika dalam database saya seseorang memiliki nama ini, yang merupakan tag script ini, dan saya memiliki beberapa kode pada halaman saya yang dicetak nama-nama orang berturut-turut, atau saya harus beberapa kode JavaScript yang menyisipkan nama ini ke halaman, apa HTML akan dihasilkan? Yah, saya mencetak tag HTML. Saya mencetak semua tag tersebut. Aku sampai ke bagian di mana saya mencetak dengan teman-teman saya. Saya mencetak Lauren keluar. Ini mencetak Milo keluar. Dan kemudian nama saya dalam database adalah post script tidak menyenangkan Status Facebook. Karena saya dimasukkan ini ke halaman karena terlihat seperti JavaScript, ketika Halaman ini akan dikirim ke pengguna, itu akan dieksekusi sebagai JavaScript. Dan jadi ini adalah apa yang kita sebut cross-site scripting serangan. Seseorang menempatkan informasi berbahaya di database yang dapat sesuai dengan beberapa string tambahan atau beberapa string JavaScript. Dan ketika mendapat dicetak ke Halaman dalam mode ini, maka apa terjadi adalah bahwa kode buruk dijalankan bahwa saya tidak bermaksud untuk itu untuk dijalankan. Dan itu semua cross-site serangan scripting. Dan cara Anda mendapatkan sekitar ini adalah seperti Zamyla kata. Anda hanya membungkus hal-hal dalam HTML karakter khusus. Dan ini adalah HTML karakter khusus PHP fungsi yang akan mencegah semacam ini hal terjadi pada Anda jika Anda memiliki berbahaya string dalam database Anda. Itu hanya lolos itu, sehingga tidak mendapatkan ditafsirkan sebagai HTML. Ini menggantikan kurung kecil dengan apa yang kita sebut entitas. Dan kami pergi ini dalam kuliah juga. Jadi saya pikir kalian harus memiliki pemahaman yang baik tentang itu. Pertanyaan? Ya. AUDIENCE: Jadi bagaimana akan yang [Tak terdengar]? JOSEPH ONG: Katakanlah itu lagi. AUDIENCE: Bagaimana akan monitor - JOSEPH ONG: Benar. Jadi Anda memiliki sesuatu yang mengatakan, ketika Saya mendaftar, ketik nama saya. Aku hanya mengetik di bidang itu, nama saya dilucuti pasca tidak menarik Facebook Status close tag script. Dan itu akan dimasukkan ke dalam Database, karena saya tidak bisa mengatakan seseorang di dunia tidak memiliki nama dengan panah kiri di dalamnya atau naskah kata di dalamnya. Itu tidak benar-benar masuk akal. Jadi aku hanya harus memastikan bahwa saya membersihkan barang-barang sebelum saya mencetaknya keluar ke halaman. AUDIENCE: Jadi HTML kartu khusus mencegah tag script? JOSEPH ONG: Ya. Jadi tidak mencegah tag script. Itu hanya memastikan bahwa tag script tidak mendapatkan ditafsirkan sebagai HTML atau - ya. Itu hanya muncul sebagai apa sebenarnya. Baik. Jadi itu review kuis. Keren. [Tepuk Tangan]