>> DAVID Malan: Baiklah.
Ini adalah CS50, dan ini adalah akhir minggu sembilan.
Sudah angin puyuh lebih beberapa hari terakhir.
Dan permasalahan yang tujuh, jika Anda lutut jauh ke dalamnya, menyadari ada cukup
bit baru yang ada di sana.
Tapi mari kita lihat apakah kita tidak bisa potong segala sesuatu bersama-sama di sini sebentar
sebelum kemudian membelok di yet arah lain dan penglihatan
di mana lagi kita bisa pergi.
>> Jadi sejauh ini, kita sudah bicara tentang HTML.
Kami sudah berbicara tentang CSS.
Kita telah berbicara tentang PHP.
Anda sudah mulai mengalami SQL.
Hari ini, kita akan berbicara sedikit tentang JavaScript.
Tapi bagaimana semua ini berbeda bahasa cocok bersama-sama?
>> Jadi kami berbicara minggu lalu tentang gagasan memiliki server.
Jadi mari kita menggambar persegi ini sebagai web server di sini.
Dan web server berfungsi pasti file.
Dan beberapa dari file-file dapat file HTML.
Jadi salah satu hal bahwa server web bisa meludah keluar mungkin file yang
kami hanya akan menggambar seperti ini berisi beberapa HTML.
Jadi dalam istilah awam, apa apakah HTML membiarkan Anda lakukan?
>> AUDIENCE: Halaman tampilan yang bagus.
>> DAVID Malan: OK, membuat halaman terlihat bagus, meskipun saya pikir saya telah membuktikan
yang lain.
Jadi HTML tidak membiarkan Anda lay out halaman struktural, dan memungkinkan Anda untuk
semacam estetis mark up halaman, mark up konten statis, sehingga Anda
kemudian dapat melihatnya dengan browser web.
>> Tapi itulah kuncinya.
Ini konten statis.
Anda menulis itu, Anda menyimpannya, dan kemudian Anda kapal itu.
Dan web server kemudian berfungsi itu ke pengunjung Anda.
>> Tapi kita menyesuaikan dgn hal-hal yang berbeda menggunakan bahasa sama sekali.
Kami mulai menggunakan atribut style Tags tertentu.
Dan atribut style mari kita mengatur hal-hal seperti ukuran font dan warna.
Dan Anda mungkin mulai menemukan, atau Anda segera kemauan untuk akhir
proyek potensial, namun lain sifat yang dapat Anda gunakan dalam CSS.
Dan dalam istilah awam, apa benar-benar kemudian apakah CSS lakukan?
Mereka hanya contoh tersebut.
Apa membiarkan Anda melakukan itu HTML tampaknya tidak dari apa
kita lihat sejauh ini?
>> AUDIENCE: Tentukan gaya sendiri.
>> DAVID Malan: Tentukan gaya sendiri.
Jadi menentukan hal-hal seperti kelas Anda mungkin mengalami, atau unik
mengidentifikasi node dalam sebuah dokumen sehingga bahwa Anda dapat menyesuaikan dgn mode mereka.
Tapi yang lebih spesifik, saya akan mengatakan bahwa CSS benar-benar memungkinkan Anda mengambil hal-hal yang
last mile dan memungkinkan Anda untuk menentukan banyak lebih tepatnya estetika,
sedangkan HTML untuk sebagian besar memungkinkan Anda struktur halaman Anda.
>> Dan meskipun ada beberapa default, seperti yang kita lihat tag untuk
tag pos, yang berbicara kasar membuat hal-hal besar dan tebal.
Itu definisi yang cukup generik dari tag - besar dan tebal.
Apa ukuran font itu?
Apa warna itu?
Bagaimana berani itu?
Dan CSS memungkinkan Anda lebih halus hal-hal lagu seperti itu.
Serta tata letak, karena beberapa Anda telah melihat.
>> Dan terus terang, CSS sedikit dari bahasa berantakan.
Ini sangat kuat dalam bahwa Anda dapat membuat harfiah setiap situs web yang Anda sudah
dilihat di web hari ini dengan itu, tapi itu semacam rasa sakit di leher.
Dan beberapa dari Anda telah memukul kepala Anda terhadap dinding sudah hanya untuk melakukan
sesuatu yang bodoh seperti pusat menu pada permasalahan yang tujuh jika Anda sudah ke
saat itu sudah.
>> Tapi menyadari, hal-hal lebih mudah dari waktu ke waktu.
Anda mulai melihat pola.
Dan lagi, Google akan menjadi teman Anda untuk berbagai cara di mana Anda dapat
memecahkan jenis-jenis masalah.
>> Dan saya berani mengatakan dengan CSS, dan HTML lebih umumnya, Anda dapat memecahkan masalah dalam
banyak cara, yang semuanya mungkin sangat juga benar, daripada yang Anda bisa
dalam sesuatu seperti C, bahkan sekarang PHP, atau JavaScript.
Hanya ada banyak yang berbeda cara untuk meletakkan hal-hal.
>> Tapi ini mulai mendapatkan berantakan, kita katakan.
Hanya jenis percampuran HTML Anda dan CSS Anda dengan atribut style adalah
sedikit ceroboh.
Dan jadi kita malah berkata, semacam abstrak berbicara, bahwa Anda harus
setidaknya mulai faktor out CSS Anda mungkin.
Bukan gaya Anda atribut, tapi setidaknya menggunakan tag gaya dalam apa yang
bagian dari halaman web?
>> AUDIENCE: Head.
>> DAVID Malan: Dalam kepala.
Sampai sekarang, kami hanya memiliki judul up ada, tetapi Anda juga dapat menambahkan gaya
tag, dan Anda dapat menempatkan CSS Anda kira-kira berbicara ke arah bagian atas halaman.
Tapi kemudian kami mengambil hal-hal satu langkah lebih lanjut dan kita diperhitungkan bahwa tahu lebih lanjut
ke file terpisah.
>> Dan kedua file yang entah bagaimana sekarang terhubung.
Dan memang itu adalah tag yang melakukannya.
Dan apa adalah salah satu yang menyeluruh motivasi untuk anjak keluar CSS kami
semua lebih?
>> AUDIENCE: Reusability.
>> DAVID Malan: Usabilitas.
Benar?
Anda mungkin telah melihat dalam p-set tujuh sudah bahwa banyak halaman,
Halaman membeli, halaman penjualan, yang Halaman portofolio, mungkin
terstruktur agak sama.
Ada logo CS50 keuangan di atas kecuali jika Anda telah memutuskan untuk mengubahnya.
Ada footer di bawah halaman.
Dan CSS memungkinkan Anda kemudian untuk faktor itu menjadi file terpisah sehingga jika
Anda ingin mengubah sesuatu secara global di seluruh situs Anda, Anda dapat benar-benar
hanya mengubahnya dalam satu tempat.
>> Tapi ada harga yang Anda bayar berpotensi oleh karena faktor luar
CSS dari file HTML saya menjadi terpisah mengajukan referensi itu dengan
tag, yang kita lihat pada hari Senin.
Apa yang mungkin downside menjadi ini?
Berpikir kembali seminggu yang lalu ketika kami berbicara tentang HTTP dan TCP / IP dan bagaimana
internet bekerja.
Sesuatu di sini?
>> AUDIENCE: Ini membutuhkan waktu lebih lama.
>> DAVID Malan: Ini membutuhkan waktu lebih lama.
Mengapa?
>> AUDIENCE: [Tak terdengar].
>> DAVID Malan: Ya.
Jadi bisa dibilang membutuhkan sedikit lebih banyak waktu.
Karena salah satu, CSS jelas tidak dalam file yang sama.
Jadi sekarang Anda harus membuat tidak satu, tapi dua permintaan.
Dan masing-masing permintaan seperti yang kita lihat di Chrome di apa yang disebut Inspektur,
dan kami melihat tab jaringan, masing-masing file-file memerlukan satu HTTP
permintaan, yang kita lihat mengambil beberapa jumlah waktu.
Sekarang, mungkin itu tidak banyak.
Mungkin itu hanya 20 milidetik.
Mungkin 200 milidetik.
>> Tapi berpikir tentang halaman seperti Facebook, atau CNN, atau Google, yang jauh
lebih besar dari contoh kita sudah melihat sejauh ini.
Halaman tersebut mungkin memiliki puluhan file, masing-masing yang mungkin memerlukan
download file.
Jadi hal-hal dapat berpotensi mulai melambat.
>> Dan terutama hari-hari ini ketika kita semua memiliki ponsel di saku kita dan
koneksi internet lambat, harus tunggu milidetik lebih sedikit, beberapa
lebih milidetik untuk tambahan file sebenarnya bisa lambat.
Latency adalah kata yang menggambarkan jenis menunggu yang Anda miliki bahwa Anda
alami saat menunggu beberapa bagian dari informasi.
>> Tapi ada yang terbalik.
Jadi tidak semua semacam -
sebenarnya sedikit jungkat-jungkit di sini.
Downside sekarang, tapi apa browser dapat melakukan jika mereka pintar untuk menghindari
harus meminta styles.css yang sama file lagi dapat melakukan apa?
>> Cache.
Jadi caching -
C-A-C-H-E -
umumnya berarti di sini hanya untuk menyimpan file yang diminta pertama kali, dan
kemudian memeriksa cache untuk itu.
Periksa Anda semacam wadah penyimpanan, dan jika Anda sudah memiliki
salinan styles.css, bahkan jika beberapa lainnya Halaman dalam p-set, atau situs web apapun,
memintanya lagi, hanya untuk memberikan pengguna yang salinan cache yang sama.
Jangan repot-repot meminta itu.
>> Kelemahan di sana, meskipun, karena beberapa dari Anda telah tersandung dalam p-set.
Jika Anda membuat perubahan pada server dan Anda kembali ke browser dan Anda
ulang, kadang-kadang browser tidak Anda nikmat dan tidak mengganggu
kembali men-download file styles.css Anda karena, ayolah, apa yang kemungkinan
bahwa gaya ini yang menggunakan Facebook akan mengubah jam ke jam atau
hari ke hari?
Hal ini cukup rendah.
Mereka mungkin berubah dari waktu ke waktu, tetapi tidak menit ke menit atau per jam.
>> Jadi trik, hanya FYI ketika melakukan web pembangunan, sering tahan
kunci pergeseran misalnya dan kemudian klik ulang di browser Anda, dan kemauan yang
biasanya memberitahu reload Browser segala sesuatu, bahkan jika Anda sudah memiliki
dalam cache.
Jadi sekali lagi, keuntungan dan kerugian, tapi semuanya
akhirnya desain keputusan.
>> Jadi sekarang, kita tidak hanya mengakhiri cerita di sini.
Jika sekarang saya kembali dan kembali dan kembali dan kembali, kami mulai memperkenalkan tidak hanya
HTML, tetapi PHP.
Jadi dalam istilah awam, apa apakah PHP mari kita lakukan?
>> AUDIENCE: [Tak terdengar].
>> DAVID Malan: Apa itu?
>> AUDIENCE: Perkenalkan logika ke dalam kode.
>> DAVID Malan: Ya, memperkenalkan logika ke dalam kode Anda.
Jadi itu adalah bahasa pemrograman yang benar dengan loop, dan variabel, dan
fungsi, dan kondisi, dan semua hal yang kita telah menggunakan jalan kembali
ketika sejak awal.
Dan PHP, telah kita lihat, dapat digunakan baik pada baris perintah - itu
tidak harus ada hubungannya dengan web, meskipun itu
benar-benar asal-usulnya dan apa yang cenderung untuk menjadi baik dan kondusif untuk -
tetapi Anda dapat menggunakan PHP hanya oleh alam dari fakta bahwa ia memiliki cetak ()
fungsi, dan printf () fungsi, atau echo () function.
Ada tandan cara Anda dapat mencetak teks dengan PHP.
>> Oleh karena itu, Anda dapat menggunakan program ini bahasa ke output persis
apa yang kita bicarakan sebelumnya.
Anda dinamis dapat menghasilkan HTML Anda.
Mungkin tidak semuanya.
Mungkin Anda sulit hal kode, seperti header, dan footer, dan logo,
dan style sheet Anda, dan semua itu.
Tapi untuk sesuatu seperti p-set tujuh, di mana Anda memanipulasi saham dan
menampilkan portofolio pengguna, yang akan berubah secara dinamis, Anda bisa
pasti menggunakan PHP dan logika memberikan Anda sebagai bahasa pemrograman untuk
Output dinamis subhimpunan halaman.
>> Jadi, ketika Anda berbicara tentang website dinamis, atau pemrograman web, itu
apa yang Anda benar-benar berbicara tentang.
Menggunakan bahasa seperti PHP, atau hal-hal disebut Python, atau Ruby, atau Java, atau
namun bahasa lain, untuk query database sering, atau server lain, dan
kemudian secara dinamis meludahkan HTML.
>> Sekarang hasil akhirnya, sebagai samping, adalah bahwa HTML dari situs yang paling,
termasuk p-set tujuh Anda, mungkin akan menjadi kekacauan besar jika
Anda melihat sumber kode dalam browser.
Itu bukan masalah besar.
Pada titik ini, ketika kita peduli gaya, kita peduli tentang
hal-hal yang Anda tulis.
Kami tidak akan peduli tentang hal-hal bahwa apa output kode Anda.
Jadi jangan khawatir tentang lekukan di sini jika itu PHP yang
sebenarnya keluaran barang.
Setelah semua, browser tidak akan peduli, dan manusia tidak akan mencari
sumbernya pula.
Kami staf, misalnya, akan akan melihat PHP Anda.
>> Jadi izinkan saya memberikan contoh cepat sekarang mengapa yang lain ini mungkin berguna.
Jadi terus terang, saya tidak bisa ingat kapan terakhir kali saya menggunakan C untuk memecahkan masalah dalam
dunia nyata.
Itu mungkin di sekolah pascasarjana ketika Saya perlu menggunakan bahasa yang
adalah level yang cukup rendah dan memberi saya kesempatan untuk melakukan sesuatu yang sangat tinggi
melakukan untuk benar-benar menyimpan banyak CPU siklus yang saya bisa, sebagian besar
karena saya menggunakan set data yang besar, dan setiap siklus CPU dihitung.
Dan terus terang, bahkan dalam hal-hal seperti telepon hari ini dan perangkat lain
di mana Anda tidak cukup memiliki banyak memori dan Anda tidak cukup memiliki sebagai
banyak CPU, dengan menggunakan bahasa yang lebih cepat masih menarik.
>> Tapi di dunia nyata, ketika Anda hanya ingin melemparkan beberapa program yang sama untuk
menganalisis beberapa data, atau Anda telah dikumpulkan sejumlah besar pendaftaran untuk
beberapa kelompok mahasiswa dan Anda ingin sangat cepat mengotomatisasi pengiriman email
satu per satu untuk setiap salah satu dari mereka pendaftar, Anda akan meraih
bahasa tingkat tinggi dari C sehingga untuk berbicara.
Sesuatu seperti PHP atau Python, atau Ruby, atau setengah lusin orang lain yang ada
hari ini.
Tapi ketiga mungkin paling trendi saat ini.
>> Dan apa artinya ini adalah bahwa Anda dapat membuka up editor teks seperti gedit atau
kebanyakan apa pun dan kemudian hanya mulai menulis kode tanpa harus khawatir
tentang kompilasi, tanpa harus benar-benar khawatir tentang manajemen memori,
menjaga diingat meskipun sedikit Kecerobohan akhirnya akan kembali
menggigit Anda jika kumpulan data akan lebih besar atau masalahnya bertambah besar.
Tapi apa artinya ini bagi kami adalah sebagai berikut.
>> Biarkan aku pergi ke depan dan menjalankan ejaan dari masalah menetapkan enam.
Jadi ini adalah implementasi berbasis trie saya yang saya gunakan pada besar
papan di mana saya tampil tidak begitu baik.
Kami akan kembali dalam waktu seminggu dan kembali orang-orang yang tidak berakhir di atas
papan besar di kuliah terakhir kami.
Tetapi untuk sekarang, biarkan aku pergi ke depan dan hanya menjalankan solusi saya dalam teks, dan kami akan melakukan
King James Bible, dan di sini kita pergi.
>> Jadi mereka adalah semua seharusnya kata yang salah eja dari
King James Bible.
Dan implementasi saya mengambil setengah detik total.
Jadi tidak terlalu buruk ini komputer tertentu.
Tapi pikirkan berapa banyak kode saya harus menulis.
Pikirkan berapa banyak kode Anda harus menulis.
Pikirkan berapa banyak waktu yang Anda habiskan di D-hall atau asrama Anda atau di mana pun
sebenarnya coding up solusi itu.
>> Yah, kalau aku benar-benar memiliki tingkat yang lebih tinggi bahasa seperti PHP, perhatikan
apa yang bisa saya lakukan di sini.
Pertama, anggaplah bahwa ini adalah bukan kode distribusi Anda.
Ini adalah sebuah file yang bernama ejaan.
Ini tersedia sebagai bagian dari hari ini kode distribusi.
Dan aku akan melambaikan tangan saya di paling rincian, tapi ini sebenarnya
contoh menarik tentang bagaimana Anda mungkin pelabuhan bahasa
seperti C ke PHP.
Aku benar-benar membuka dua jendela teks, satu dengan versi C saya speller.c,
dan saya hanya mulai menerjemahkan dalam saya kepala ke PHP dan mengetik dengan menggunakan
fungsi yang paling dekat.
>> Jadi beberapa hal ini berbeda.
Kami melihat terakhir kali PHP tidak menggunakan termasuk dalam cukup dengan cara yang sama.
Menggunakan membutuhkan biasanya, meskipun termasuk tidak ada.
Tentukan sedikit berbeda dari # Define di C, tapi itu
bagaimana kita membuat sebuah konstanta.
$ Argc ternyata ada di PHP, jadi kami telah melihat itu sebelumnya.
Ini hanya variabel, semua yang dimulai dengan tanda dolar.
Ingat ini hanya sekelompok titik mengambang.
>> Jadi cerita panjang pendek, Anda dipersilakan untuk membolak-balik ini jika penasaran, ini
hampir konversi dari garis-untuk-line Versi C dari speller.c ke PHP.
Dan Anda bisa melakukan ini lagi untuk setengah lusin bahasa lain.
>> Namun yang menarik adalah ini.
Atau apa terus terang menyedihkan adalah ini.
Biarkan aku pergi ke depan dan ketik about dictionary.php, dan klaim bahwa aku
akan pergi ke depan dan melaksanakan re- Masalah menetapkan enam di sini.
>> Jadi mari kita mengusulkan pertama yang dalam hal ini File, yang akan dilaksanakan di
PHP, jadi biarkan aku membuka tag saya seperti itu.
Biarkan saya memberi diriku global variabel, $ size mendapat nol.
Dan aku akan memberikan diriku tabel hash.
Saya akan menggunakan tabel hash untuk hal ini.
Bagaimana cara mendeklarasikan sebuah tabel hash di PHP?
Selesai.
OK.
>> Braket begitu terbuka braket dekat mewakili apa di PHP, seperti yang kita lihat?
Array, tetapi sebuah array yang bisa menjadi array asosiatif.
Array asosiatif adalah struktur data yang
menghubungkan kunci dengan nilai-nilai.
>> Sekarang di sederhana numerik diindeks array, orang-orang kunci adalah apa?
Nol, satu, dua, tiga, kan?
Old school barang kembali dari C. Tapi itu bisa juga menjadi string seperti foo, dan bar,
atau Maxwell, atau string tersebut.
Jadi aku bisa memanfaatkan itu hanya dalam beberapa saat.
>> Biarkan aku pergi ke depan dan menyatakan fungsi seperti -
mari kita lakukan load () pertama.
Jadi fungsi load ().
Dan PHP adalah sedikit berbeda dalam Anda benar-benar tipe fungsi, tetapi Anda
jangan mengetik jenis kembali.
Aku akan pergi ke depan dan mengatakan bahwa load () fungsi harus mengambil
argumen $ kamus, hanya seperti versi C lakukan.
Saya melakukan itu dari memori.
>> Dan saya mengusulkan bahwa saya akan melakukan hal ini.
Saya hanya akan melakukan foreach.
Aku akan memanggil fungsi yang disebut file (), lewat di atas nama yang
mengajukan, yang merupakan variabel $ Kamus sebagai $ kata.
Dan kemudian dalam saya untuk loop di sini, aku akan pergi ke depan dan simpan di saya
$ $ Tabel yang kata mendapatkan benar.
Selesai.
Oh, tunggu.
Selesai.
OK.
>> Itu adalah beban () function mengatakan di PHP.
Sekarang, mengapa yang bekerja?
Dan Aku agak curang di sini.
>> Jadi, satu, foreach kita lihat sebentar terakhir kali.
Ini hanya berarti bahwa Anda dapat iterate atas array tanpa mengganggu dengan i
dan n dan plus plus, dan semua itu.
Kamus ini tentu saja nama file, sesuatu seperti besar atau kecil, dua
kamus kita gunakan terakhir kali.
File adalah fungsi yang membuka teks berkas, membacanya dalam baris demi baris, dan
tangan Anda kembali array besar, masing-masing elemen yang merupakan
baris dari file tersebut.
Jadi itulah kombinasi fopen, dan fread, dan while loop, dan fclose,
dan semua itu.
Akhirnya, seperti kata hanya berarti itulah variabel Aku akan memiliki akses ke
pada setiap iterasi dalam lingkaran ini.
>> Jadi singkatnya, ini satu kapal di sini berarti membuka file yang namanya di
kamus, variabel, iterate atas baris demi baris, dan setiap kali Anda mendapatkan
baris, simpan dalam variabel yang disebut kata, dan kemudian melakukan sesuatu dengan kata.
Apa yang ingin saya lakukan?
Saya ingin menempatkan kata ke dalam tabel hash saya.
>> Yah, aku bisa memasukkan sesuatu ke dalam saya hash table seperti di C
menggunakan tanda kurung siku.
Ini adalah nama untuk tabel hash saya.
Aku akan indeks ke hash yang tabel di lokasi ini.
Jadi tidak braket nol, tidak braket satu.
Bracket kutipan tanda kutip sesuatu, apa kata itu.
Dan seperti yang mungkin Anda miliki di Anda trie kerja tabel hash, Anda hanya toko
efektif Boolean, secara implisit atau secara eksplisit.
Selesai.
Aku menyimpan nilai benar.
>> Sekarang ada beberapa hal Aku memotong sudut di sini.
Secara teknis, ada akan menjadi baris baru mengganggu, / n, pada akhir
masing-masing kata-kata ini.
Jadi saya mungkin harus memanggil fungsi PHP disebut chop (), yang akan
secara harfiah memotong yang off.
Dan aku benar-benar perlu melakukan satu hal lain.
Aku mungkin harus kenaikan ukuran pada masing-masing iterasi, jadi aku melacak
global dari apa itu.
Dan terus terang, dan ini adalah salah satu aspek bodoh PHP, jika Anda
menggunakan variabel global, Anda perlu secara eksplisit mengatakan bahwa Anda.
Jadi aku akan benar-benar ketik dunia $ Ukuran, $ tabel global, dan sekarang
fungsi saya selesai.
>> Jadi tidak sesederhana seperti sebelumnya, tetapi mungkin mengambil waktu kurang dari C
versi, mungkin?
OK.
>> Jadi sekarang mari kita lakukan cek () function.
Mari kita lihat apakah ini setidaknya mengambil berjam-jam yang membawa kami di C. Jadi
biarkan aku pergi ke depan dan menyatakan periksa sebagai fungsi.
Membawa dalam kata argumen, yang akan datang dari ejaan.
Dan aku hanya akan memeriksa apakah berikut isset variabel, tabel
braket strtolower kata -
mari kita menyeimbangkan semua kurung saya -
kemudian kembali benar.
Lain -
itu benar-benar keras bagian dari program ini.
Lain, kembali palsu.
Selesai.
Itu cek ().
>> Sekarang, mengapa hal ini bekerja?
Nah, yang saya lulus dalam kata, yang merupakan string.
Dua, aku memeriksa dalam hash tabel, yang disebut $ tabel.
Aku memaksanya untuk huruf kecil dengan menelepon fungsi sangat mirip tolower () di
C, tapi ini tidak seluruh kata, bukan karakter tunggal.
Dan jika itu diatur, dengan kata lain ada adalah nilai yang ditetapkan, dengan kata lain,
jika itu benar, maka ya, ini adalah sebuah kata.
Karena aku menaruhnya di sana dengan beban ().
Dan jika tidak, aku akan kembali palsu.
>> Sekarang yang lain mudah.
Ukuran function (), bagaimana saya melakukan ini?
Pada dasarnya saya kembali $ ukuran.
Tapi aku secara teknis perlu melakukan hal ini menjengkelkan.
Dan sebenarnya sampai mendengar, saya memotong salah satu sudut terlalu banyak.
Aku benar-benar perlu melakukan $ tabel global.
>> Tapi itu dikatakan, membongkar).
Membongkar () menakjubkan.
Fungsi membongkar ().
Bagaimana saya ingin menerapkan membongkar ()?
Selesai.
OK.
>> Jadi membongkar (), manajemen memori benar-benar diambil dari perawatan untuk Anda dalam
sesuatu seperti PHP dan banyak dari bahasa tingkat tinggi.
Jadi ini luar biasa.
Seperti mengapa sih kita menghabiskan masa lalu delapan minggu ditambah pada penulisan C
rupanya benar-benar lambat, benar-benar waktu mengkonsumsi masalah dengan puluhan jam
dari bekerja di bawah ikat pinggang kita?
>> Nah, untuk satu hal, ini dapat bekerja baik untuk program kecil.
Ini tentu mempercepat saya waktu pengembangan.
Tapi mari kita lihat apa yang terjadi di dunia nyata.
>> Biarkan aku pergi ke direktori ini di jendela terminal.
Ada ejaan.
Dan perhatikan sebagai samping, dan Anda mungkin telah mengalami ini dalam masalah set
enam atau tujuh set masalah.
Anda tidak benar-benar perlu mengakhiri file PHP dengan php..
Jika Anda menempatkan sebuah baris seperti yang pertama di bagian paling atas, itu adalah jalur khusus
sintaks yang pada dasarnya berarti menemukan program yang disebut PHP dan menggunakannya untuk
menafsirkan file ini.
Jadi sekarang tidak ada yang benar-benar tahu bahwa Aku sedang menjalankan program PHP.
Saya bisa menjalankannya hanya seolah-olah itu yang sesuatu disusun dalam C.
>> Tapi ada satu hal.
Sebenarnya, mari kita lakukan ini lagi.
Dropbox/pset6 /.
Ada ejaan.
OK, 0,44 detik.
Hal ini menjadi lebih cepat saat ini.
>> Sekarang mari kita pergi ke versi PHP.
Bagus sekali sentuh.
Tapi hanya berpikir berapa banyak waktu Aku disimpan pada jam-jam kantor.
OK.
>> Jadi 3.59 detik, yang sebenarnya tidak terdengar akurat baik.
Tapi itu karena cerita panjang pendek, ketika Anda mencetak sejumlah besar
hal untuk layar, yang sendiri memperlambat segalanya.
Apa yang benar-benar mengambil CPU dalam alat adalah 3,59 detik, di
Berbeda dengan C, yang mengambil 0,44 detik yang paling baru.
Itu benar-benar sebuah urutan besarnya berbeda.
>> Jadi di mana harga itu berasal?
Mengapa begitu jauh lebih lambat?
Mengapa PHP melakukan begitu buruk?
Danielle?
>> AUDIENCE: Anda tidak benar-benar menggunakan tabel hash.
>> DAVID Malan: Aku tidak benar-benar menggunakan tabel hash.
Jadi aku agak lakukan.
Jadi array asosiatif.
Kemungkinan besar jika orang-orang di PHP benar-benar pintar, mereka digunakan di bawah
kap meja yang sebenarnya hash diimplementasikan dalam sesuatu seperti C atau C + +.
Tapi.
Ya.
>> AUDIENCE: [Tak terdengar].
>> DAVID Malan: Ya.
Jadi masing-masing fungsi yang saya tulis sekarang - sebenarnya, Anda dapat mengatakan bahwa sekali lagi a
sedikit lebih keras?
>> AUDIENCE: Setiap fungsi yang Anda termasuk memiliki lebih banyak penuh
Kapasitas dari -
>> DAVID Malan: Jadi itu sangat benar.
Ada lebih banyak overhead bahwa kita tidak benar-benar melihat dengan berfokus hanya pada
dictionary.php, yang saya baru saja menulis.
Sebaliknya, ada seluruh interpreter terjadi di latar belakang.
Memang, ketika saya menjalankan program ini, tidak berjalan nol disusun dan orang-orang
dirancang untuk CPU Intel saya.
Sebaliknya, itu adalah menjalankan baris demi baris Kode PHP yang terlihat persis
seperti kita mengetik.
Jadi setiap kali Anda menggunakan bahasa ditafsirkan, Anda
sebenarnya membayar harga ini.
Ini akan memakan waktu untuk membaca atas file Anda ke bawah, kiri ke
kanan, dan kemudian mengeksekusi setiap baris lagi dan lagi.
>> Sekarang dalam kenyataannya, khususnya di web, Anda benar-benar dapat mempercepat proses ini
dengan caching hasil Kode PHP ditafsirkan.
Dan itu masuk akal di web, karena jika Anda belum satu pengguna seperti
saya di sini, tapi 1.000 atau 10.000 pengguna, maka mungkin pertama kali file tersebut
diakses itu lambat, tetapi setelah itu itu jauh lebih cepat.
>> Tapi ini juga, sekali lagi, adalah trade off.
Dan untuk sesuatu seperti data penelitian mengatur, atau bahkan sesuatu yang besar seperti
ini, pengguna akhirnya akan mulai merasakan perlambatan itu.
>> Jadi singkatnya, ditafsirkan bahasa yang sangat banyak dalam mode, yang sangat populer, dan
terus terang mungkin bahasa Anda harus meraih ketika memecahkan masalah
setelah CS50.
Tapi menyadari betapa Anda benar-benar mengambil untuk diberikan di bawah tenda
benar-benar mereka beberapa minggu terakhir di hash tabel, dan pohon-pohon, dan mencoba,
yang digunakan pada akhirnya untuk benar-benar melaksanakan hal-hal seperti braket terbuka,
braket persegi, yang sekarang kita bisa syukur mengambil untuk diberikan.
>> Jadi mari kita lihat sekarang dalam konteks web ini.
Dan saya sebutkan terakhir kali bahwa ada sekelompok superglobals di PHP yang
tidak benar-benar relevan pada baris perintah.
Mereka lebih relevan dalam konteks menggunakan PHP dalam konteks web.
Jadi menjalankan PHP pada server web dalam rangka untuk menghasilkan hal-hal seperti HTML.
>> Dan kami melirik $ _GET dan $ _POST, dan di situlah otomatis pengguna
masukan berakhir hanya jika Anda mengirimkan membentuk ke file berakhiran. php di web
server seperti alat.
Tapi mari kita lihat secara singkat $ _COOKIE Dan $ _SESSION.
>> Dalam istilah awam, apa itu cookie sebagai Anda memahaminya dalam konteks
menggunakan web?
>> AUDIENCE: Berkas pada komputer.
>> DAVID Malan: Ya.
Ini adalah file di komputer pengguna ditanam oleh situs web apapun
Anda kebetulan mengunjungi.
Jadi, ketika Anda pergi ke Facebook, ketika Anda pergi untuk bankofamerica.com, ketika Anda pergi
ke google.com, ketika Anda pergi ke hampir semua situs di dunia hari ini,
termasuk cs50.net, cookie yang ditanam pada komputer Anda, yang
baik nilai yang tersimpan dalam RAM dalam Anda komputer dalam memori browser Anda, atau
kadang-kadang memang file yang tersimpan pada hard drive Anda.
>> Dan apa yang biasanya disimpan dalam file yang bukan nama pengguna Anda, bukan Anda
password, biasanya bukan sesuatu sensitif kecuali website ini tidak begitu
baik dengan keamanan mereka, melainkan itu adalah sebuah identifikasi unik besar di antara
hal-hal lain.
Ini adalah nomor acak yang besar ditanam pada Anda komputer tetapi Anda dapat anggap sebagai
semacam cap tangan virtual seperti dari klub atau taman hiburan yang
memungkinkan staf, pemilik yang layanan, untuk mengingat siapa Anda.
Jadi jika nomor acak yang besar seperti 12345678, walaupun itu jelas
tidak terlalu acak, memikirkan bahwa sebagai cap tangan bahwa ketika Anda mengunjungi
facebook.com untuk pertama kalinya, mereka cap nomor yang di tangan Anda.
Dan kemudian karena Anda berbicara HTTP, Anda menjadi browser, dan karena Facebook
jelas berbicara sama seperti web server, HTTP protocol mengatakan bahwa
kapan saja Anda kemudian mengunjungi facebook.com, apakah itu kedua
kemudian, satu jam kemudian, bahkan pada hari berikutnya, asalkan Anda tidak secara eksplisit
log out, yang secara efektif seperti mencuci tangan Anda.
HTTP mengatakan Anda harus hadir Anda cap tangan setiap kali Anda
kembali ke situs web tersebut.
>> Apa Facebook kemudian tidak adalah mereka melihat bahwa cap tangan dan
mereka mengatakan, oh, 123456789.
Saya tidak tahu pada pandangan pertama bahwa ini adalah David Malan di Cambridge,
Massachusetts, tetapi mereka dapat memeriksa mereka database dan berkata, oh, orang
pada komputer yang kami menanam 123456789 adalah David Malan dari Cambridge,
Massachusetts.
Mari kita tunjukkan bahwa pengguna maka profilnya Halaman atau News Feed-nya.
>> Tapi ada masalah di sini jika ini adalah bagaimana web memang bekerja.
Mari kita lihat contoh cepat.
Mari kita benar-benar pergi untuk mengatakan facebook.com.
Tapi sebelum kita bisa pergi ke sana, biarkan aku pergi ke depan dan membuka Chrome
Inspektur di sini.
Biarkan aku melihat tab jaringan.
Dan sekarang mari kita pergi ke depan dan ketik di https://facebook.com.
Dan aku melakukan hal itu sehingga kita tidak melihat semua orang pengalihan dan limbah
waktu melihat melalui mereka.
Mari saya tekan enter.
>> Baik.
Kita melihat sejumlah besar permintaan.
Ada datang Facebook.
Ada sejumlah besar file.
Dan di sini, per menyebutkan saya latency terakhir kali, itu
banyak permintaan HTTP.
Tapi yang pertama mungkin yang paling menarik.
>> Jadi mari kita gulir ke bawah sini, dan Aku akan memperbesar dalam detik.
Ini akan menjadi semacam berantakan, tapi mari kita lihat.
Facebook mengirim kami Seluruh banyak hal.
>> Tapi tunggu, menarik.
Mereka menanam tidak satu, tapi empat perangko tangan ke tangan saya di sini.
Set-cookie, Set-cookie, set-cookie, set-cookie.
Dan ada beberapa fitur di sini.
Semua dari mereka menyebutkan beberapa jenis kedaluwarsa.
Dan sepertinya Facebook berharap mengingat saya sampai 2015.
Jadi itu mungkin waktu dimana Aku harus log out atau mereka hanya akan
otomatis menganggap aku tidak akan kembali.
Jadi itu benar-benar layak jumlah waktu.
>> Dan ada beberapa lainnya hal yang terjadi di sini.
Cookie ini tampaknya paksa dihapus dengan mengatakan itu berakhir pada tahun 1970
sebelum cookies ada.
Sehingga browser hanya akan untuk menganggap OK, itu seperti
mencuci tangan cap.
>> Tapi sekarang ketika browser saya membuat permintaan berikutnya -
biarkan aku pergi ke depan dan melakukan hal ini lagi dan reload.
Sekarang mari saya gulir kembali ke atas permintaan dan turun
sini, header permintaan.
Perhatikan ini.
Jadi sekarang aku tidak di bawah header respon, tetapi pemberitahuan itu mengatakan header permintaan.
Dan melihat bahwa browser saya sebagai bagian dari permintaannya setelah ulang memukul memiliki
dikirim setidaknya berikut informasi.
Tidak set-cookie, tapi kue.
Jadi ini adalah garis, header HTTP sehingga untuk berbicara, di mana browser saya adalah semacam
dari tanpa saya sadari menyajikan tanganku untuk pemeriksaan Facebook.
>> Jadi cookie ini dapat digunakan maka untuk apa?
Untuk mengingat siapa Anda, atau ingat bagaimana banyak kali Anda sudah ada, atau
benar-benar sesuatu.
>> Jadi di sini adalah counter.php.
Dan biarkan aku memperbesar font.
Dan setiap kali saya reload halaman ini, perhatikan itu mengingat berapa kali
Aku pernah ke sana.
Nah, itu tidak semua yang mengesankan.
Mari kita hanya menutup tab tersebut, dan sekarang mari kita kembali ke
http://localhost/counter.php.
>> Oh, itu menarik.
Masih ingat, bahkan meskipun aku menutup tab.
Dan terus terang, jika saya menutup browser, jika diterapkan dengan cara yang benar, saya
masih bisa ingat bahwa pengguna ini siapa dia atau dia adalah pertama kalinya, dan
hanya sekali saya masuk ke menu Chrome, yang di sini di sini, dan pergi ke
Sejarah, dan klik Clear Browsing Data, karena beberapa dari Anda mungkin memiliki dalam
masa lalu, hanya kemudian akan cookie sebenarnya bisa dihapus selama web
pembangunan.
>> Jadi, jika kita pergi -
mari kita menutup gedit sini.
Dan jika kita pergi sekarang ke berkas ini.
Biarkan aku pergi ke kami vhosts / localhost / publik, dan biarkan aku melakukan
counter.php.
Perhatikan bahwa ini adalah cukup program sederhana.
Ini adalah situs yang cukup sederhana.
>> Jadi atas file hanya komentar.
Tapi di sini adalah garis baru yang Anda mungkin telah melihat sudah p-set tujuh,
session_start ().
Ini adalah baris kode PHP yang dasarnya memberitahu server web, membuat
Pastikan untuk cap tangan dan membuat Pastikan untuk memeriksa prangko tangan.
Itu semua baris yang tidak, dan melakukan semua proses yang bagi kita.
Kemudian perhatikan saya hanya punya dua cabang di sini.
Jika loket masuk utama dari variabel global khusus yang disebut
$ _SESSION Diatur - dengan kata lain, jika ada beberapa nilai di sana -
mari kita mendapatkannya dan menyimpannya di lokal variabel yang disebut $ kontra.
Lain, mari kita menetapkan $ kontra nilai default 0.
>> Sekarang inilah salah satu aspek dari PHP itu baik berkat dan kutukan.
PHP adalah sedikit ceroboh.
Jadi sedangkan di C, apa yang akan lingkup kontra telah
baik di sini atau di sini?
>> Ini akan telah terbatas bagi kurung kurawal.
Coba tebak?
Dalam PHP, itu ada bahkan di luar dari mereka kurung kurawal, di sini, dan di sini,
dan di sini, dan di sini, dan bahkan di bawah.
Jadi saya mengatakan ini adalah berkah dalam arti bahwa Anda tidak harus berpikir sebagai
keras seperti yang kita lakukan minggu lalu.
Tapi itu juga sedikit kutukan dalam tidak peduli di mana Anda menggunakan variabel dalam
PHP, setidaknya dalam program seperti ini, itu dapat diakses secara global untuk
baik atau buruk.
Jadi, Anda harus diingat bahwa sekarang variabel Anda mungkin tidak terdefinisi.
Anda mungkin telah menetapkan mereka di tempat lain.
>> Tapi apa yang akan saya lakukan pada akhirnya?
Aku akan menyimpan itu dalam dunia variabel sebagai nilai
kunci counter hasil melakukan kontra ditambah 1.
Jadi ini hanya aritmetik yang melakukan
incrementation counter itu.
Dan fakta bahwa aku menyimpan yang Nilai kembali di sini adalah sarana untuk
dasarnya memperbarui database untuk ingat bahwa pengguna telah 123456789
di sini dua kali.
Dan ketika saya melakukannya lagi setiap kali saya reload halaman, itu akan memeriksa
tanganku cap dan berkata, oh, pengguna 123456789 kini
di sini tiga kali.
>> Dan jadi apa bahasa PHP dan serupa lakukan bagi kita adalah mereka mencari
tahu bagaimana dan di mana dan untuk berapa lama untuk menyimpan nilai dalam khusus ini
superglobal.
Dan ini superglobal waktu berikutnya saya kunjungi halaman adalah semacam ajaib
pra-penduduk, diisi dengan nilai-nilai yang berada di sana terakhir kali Anda mengunjunginya,
apakah yang kedua yang lalu, seminggu lalu, atau pada 2013 dan sekarang kita berbicara
sekitar 2015.
PHP dan web server mengurus semua itu untuk Anda.
>> AUDIENCE: [Tak terdengar].
>> DAVID Malan: Variabel dalam PHP dasarnya selalu dunia kecuali Anda
menyatakan mereka dalam fungsi, dan kemudian mereka lokal untuk
fungsi saja.
Tetapi karena saya sudah tidak menulis apapun fungsi, mereka sekarang secara efektif
global sepanjang seluruh file saya di sini.
>> AUDIENCE: Apakah ada cara untuk membuat mereka lokal?
>> DAVID Malan: Apakah ada cara untuk membuat mereka lokal?
Hanya dengan membungkus mereka ke fungsi.
Yang dalam versi terbaru PHP, Anda dapat melakukan ini dengan
fungsi anonim.
Tapi lebih pada bahwa dalam konteks JavaScript.
Tapi Jawaban singkatnya adalah tidak.
Jawaban lagi adalah ya.
Nice.
Baik pertanyaan kuis.
Baik.
>> Jadi terakhir, halaman itu sendiri adalah sebenarnya cukup sederhana.
Perhatikan bahwa setelah saya keluar dari mode PHP, mengingat bahwa semua hal ini turun
di bawah ini hanya akan mendapatkan meludah keluar mentah ke browser.
Yang baik-baik saja, karena saya ingin mengirim pengguna beberapa HTML, tetapi saya ingin
untuk secara dinamis memperbarui HTML.
Dan salah satu cara saya bisa melakukan ini adalah untuk memilah yang sangat cepat jatuh kembali ke PHP
modus, menggunakan open braket tanda tanya tanda sama, dan kemudian output nilai
counter.
>> Atau jika ini tampak agak samar, ini tanda sama sebenarnya hanya beberapa
sintaksis gula untuk ini printf ($ counter).
Tapi terus terang, itu hanya sedikit jelek dan sedikit mengganggu untuk mengetik.
Jadi PHP sangat baik menawarkan fitur ini di mana Anda hanya bisa mengatakan lebih
singkat dengan cara yang sama.
>> Jadi apa yang terjadi di bawah kap?
Mari kita cepat-cepat melihat jaringan tab di sini untuk counter.php.
Dan biarkan aku pergi ke depan dan pertama mari kita hapus cookie.
Mari kita jelas data penjelajahan sejak awal waktu.
Sekarang mari kita kembali ke sini.
Sekarang mari kita kembali halaman tersebut.
Dan aku kembali nol.
Karena cap tangan saya telah dicuci, Sekarang saya mendapatkan cookie yang baru.
>> Memang jika saya melihat tab jaringan dan melihat header respon, perhatikan
bahwa alat sedang mengirim saya cookie yang namanya agak
sewenang-wenang, tetapi jenis cukup, PHPSESSID.
Dan itu mengirimkan saya ini benar-benar nomor acak yang besar.
Ini tidak cukup nomor.
Ini tidak cukup heksadesimal.
Ini semacam rangkaian alfanumerik tapi mungkin itu acak.
Dan itu adalah cap tangan sehingga untuk berbicara bahwa saya maksudkan.
>> Sementara jika saya klik kembali dan kemudian melihat baris ini kedua untuk kedua saya
permintaan, perhatikan sekarang bahwa permintaan saya header termasuk PHPSESSID sama ini,
tidak set-cookie, tapi hanya kue.
Dan itulah presentasi browser saya cap tangan saya.
>> Jadi sekarang sebagai penggoda, dan kita akan berbicara lebih tentang hal ini dalam satu minggu atau lebih, tapi
dengan cara apa hal ini membuat Anda rentan, akun Facebook Anda
rentan, dan lainnya seperti account rentan?
>> AUDIENCE: Jika seseorang memiliki cookie Anda.
>> DAVID Malan: Ya, jika seseorang memiliki cookie Anda.
Maksudku benar-benar, seperti beberapa dari Anda mungkin telah mencoba pada seperti sebuah klub atau
taman hiburan, jika Anda mencoba sesuatu seperti ini untuk menyalin cap, meskipun
mundur ke tangan orang lain, dan kemudian ia menyajikan sebagai
mereka sendiri, jika itu benar-benar tidak terlihat identik, 123456789, maka web
server tampaknya hanya akan percaya bahwa pengguna yang Anda.
>> Dan ini memang mendasar ancaman setiap kali Anda menggunakan cookie
karena jika seseorang hanya parodi sehingga untuk berbicara cookie, angka keluar apa
adalah, baik dengan benar-benar menyalin dengan melihat komputer Anda
dan menjadi seperti, OK.
Cookie David adalah JJ3JIK dan sebagainya, dan kemudian mereka cukup pintar untuk mengetahui
cara untuk menyortir secara manual mengirim bahwa cookie dari browser atau dari
Program yang mereka tulis, mereka bisa benar-benar login ke situs seperti Anda.
Hal ini tidak sulit untuk berpura-pura menjadi orang lain kecuali kita kembali p-set
dua, yang memperkenalkan apa?
>> AUDIENCE: Kriptografi.
>> DAVID Malan: Sedikit sedikit kriptografi.
Kriptografi sederhana, setidaknya dalam edisi standar, tapi kripto
tetap.
kurang.
Jadi ternyata jika Anda mengenkripsi semua header ini menggunakan sesuatu yang Anda
sekarang mungkin tahu lebih akrab sebagai SSL, secure socket layer, atau URL https://,
maka semua hal ini kita sudah melirik sebenarnya dienkripsi,
yang berarti bahwa itu seperti Anda tidak dapat membaca cap tangan.
Hanya facebook.com bisa, atau google.com, atau dalam hal ini, alat bisa
membaca bahwa cap tangan.
>> Tragisnya meskipun, dan lagi, ini adalah semua terlalu sesuai dengan hal-hal NSA
akhir-akhir ini, bahkan SSL yang pecah.
Dan itu sebenarnya tidak sulit bahkan memecahkan enkripsi tersebut.
Tidak begitu banyak yang dirusak oleh enkripsi, tetapi dengan menipu
browser ke dalam mendekripsi data sebelum waktunya.
Tapi sekali lagi, kami akan menggoda Anda dengan lama.
Untuk saat ini, hanya takut.
Ini tragis semacam benar.
>> Baik.
Jadi, mana sekarang ini meninggalkan kita?
Nah, mari kita lakukan ini.
Mari kita pergi ke depan dan mengambil cepat teaser sebelum kita istirahat.
Dan saya pikir kita akan berlama-lama sedikit lebih lama hari ini, tapi kita akan menyelam ke
sesuatu yang baru dan seksi, yang akan merangsang selera Anda untuk lebih.
Jadi itulah penggoda.
>> Jadi SQL, kita mulai berbicara tentang pernah begitu singkat terakhir kali.
Anda benar-benar akan mendapatkan tangan Anda kotor dengan beberapa di p-set tujuh.
Dan dalam istilah awam, apa SQL -
S-Q-L -
lakukan untuk Anda?
Apa itu?
Ya.
>> AUDIENCE: Mari kita mengakses data Anda.
>> DAVID Malan: Ya.
Ini mari kita mengakses data Anda dalam database.
Structured Query Language.
Dan ini pada dasarnya adalah bahasa pemrograman.
Ada fitur itu yang kita bahkan tidak akan menggunakan di kelas.
Tapi Anda dapat secara efektif mendefinisikan fungsi.
Mereka disebut disimpan prosedur di SQL.
Tapi kita akan tetap cukup sederhana dan hanya menggunakannya untuk beberapa operasi dasar
seperti memilih data, memasukkan data, pemutakhiran data, dan menghapus data.
>> Dan Anda benar-benar bisa memikirkan database, seperti database SQL, hanya sebagai
menjadi Microsoft Excel.
Karena SQL mengacu pada relasional database, dimana
hubungan hanya berarti tabel.
Baris dan kolom.
Jadi apa pun yang Anda dapat dimasukkan ke dalam spreadsheet seperti ini atau Google Docs,
Anda bisa dimasukkan ke dalam database SQL dengan menyatakan meja.
>> Sekarang, bagaimana Anda benar-benar mengakses informasi itu?
Nah, dengan perintah atau pertanyaan seperti ini.
SELECT, INSERT, UPDATE, dan DELETE.
Dan untuk sebagian besar, mereka adalah empat hanya bahan yang Anda harus
melakukan sesuatu yang sangat kuat dalam permasalahan yang tujuh.
>> Sekarang kembali pada hari, Anda akan benar-benar berinteraksi dengan database di
hitam dan putih jendela terminal prompt berkedip seperti ini.
Dan database kita berjalan pada alat ini disebut MySQL, yang merupakan
mesin database bebas dan open source.
Jika Anda Google dan membaca Wikipedia artikel, Anda akan tahu bahwa nama itu
sedikit transisi untuk beberapa versi Linux.
Maria database sebenarnya garpu sehingga untuk berbicara dari MySQL.
>> Singkat cerita, Oracle membeli MySQL.
Oracle adalah perusahaan besar.
Orang-orang telah khawatir bahwa itu akan tidak lagi tetap cukup sebagai open source,
jadi ini hanya salinan MySQL yang masih gratis, masih open source, dan
dipasang di Fedora Linux secara default.
>> Tapi ini adalah jenis rasa sakit di leher untuk berkenalan dengan
Database dengan cara ini.
Jadi kita termasuk dalam alat CS50 alat open source gratis yang disebut
phpMyAdmin.
Hanya kebetulan bahwa itu ditulis dalam PHP.
Tidak ada dasar perlu untuk PHP di sini.
Tapi ini hanyalah sebuah alat berbasis web yang kita download secara gratis, yang dipasang di
alat, yang memungkinkan kita untuk memiliki antarmuka pengguna grafis dengan yang
untuk mengeksplorasi p-set tujuh database dengan yang untuk membuat database baru,
mengatakan untuk proyek akhir Anda sendiri kalau kau lebih seperti, dan akhirnya menciptakan
website dinamis seperti CS50 Keuangan yang memungkinkan Anda untuk query data dan
update data dinamis.
>> Anda tidak akan harus menggunakan hanya file teks sederhana atau CSV.
Anda benar-benar dapat menggunakan database cerdas Program sehingga Anda dapat menjalankan lebih
query canggih daripada hanya membaca melalui segala sesuatu linear.
>> Jadi misalnya, ini adalah apa yang kita berikan Anda keluar dari kotak untuk p-set tujuh.
Ini adalah tabel dengan rupanya setidaknya tiga kolom, salah satunya adalah
nama pengguna, salah satunya adalah hash, dan lainnya yang merupakan ID.
>> Tapi yang menarik, dan hanya untuk menggoda satu pikiran di sini, username
diduga sudah unik, kan?
Maksudku, sebagian besar situs web apapun, jika Anda memiliki username, ada
tidak bisa dua caesars.
Tidak bisa ada dua Malans.
Tidak bisa ada dua jharvards.
Yang unik.
Jika tidak, mereka tidak tahu mana jharvard sebenarnya.
Jadi apa yang mungkin menjadi motivasi untuk juga memiliki kolom ketiga di sebelah kiri
ada yang disebut ID, yang terlihat seperti jumlah yang sama yang unik?
Rasanya sedikit berlebihan bagi saya pada pandangan pertama.
Mengapa itu menjadi menarik untuk memiliki tidak hanya nama pengguna yang unik,
tetapi juga nomor unik?
>> AUDIENCE: Mereka bisa memiliki password yang sama.
>> DAVID Malan: Orang-orang mungkin memiliki password yang sama, yakin.
Itu benar-benar bisa terjadi.
Tapi jika mereka memiliki nama yang unik ini, saya akan berpendapat bahwa itu tidak benar-benar
materi, karena jika mereka mengetik mereka nama pengguna, saya hanya perlu memeriksa mereka
password, hash mereka daripadanya.
Kenapa lagi?
>> AUDIENCE: Cepat pencarian.
>> DAVID Malan: Cepat pencarian.
Kenapa?
>> AUDIENCE: ID hanya satu.
>> DAVID Malan: ID hanya satu karakter, atau lebih tepatnya, itu nomor,
jadi mungkin 32 bit atau sesuatu seperti itu.
Sedangkan username, tampaknya Jason Hirschhorn terserah ada semacam
ridiculously lama, dan itu akan membawa saya lebih banyak waktu ke string
membandingkan H-I-R-S-C-H-H-O-R-N, dan mungkin a / 0 atau sesuatu seperti itu, dalam rangka
untuk mencari Jason, sebagai lawan hanya mengatakan memberikan pengguna nomor dua.
Itu 32 bit.
Ini adalah INT tunggal yang Anda harus membandingkan.
Dan memang, itulah mengapa database cenderung untuk menetapkan ID unik untuk
baris di dalamnya.
>> Sekarang apa tipe data lain yang ada selain INT dan tampaknya
string seperti ini?
Nah, untuk lebih tepat, Database SQL, seperti
MySQL, memiliki bidang CHAR.
Dan CHAR sedikit menyesatkan bukan CHAR tunggal.
Bidang CHAR dalam database MySQL satu atau lebih karakter, tapi itu
jumlah tetap karakter.
>> Jadi misalnya, jika saya pergi ke phpMyAdmin karena Anda mungkin sudah, atau
segera akan masalah memisahkan tujuh, dan aku pergi ke database saya, dan hanya untuk bersenang-senang,
mari kita membuat tabel baru yang disebut menguji dengan hanya dua kolom.
Saya kemudian akan klik Go.
Dan ini akan menjadi cukup akrab, terutama karena Anda bermain-main
di sekitar Anda sendiri.
Di sini saya bisa mengetik ID untuk membuat tabel baru tipe INT.
Tapi di sini saya bisa mengetikkan username untuk menciptakan bahwa tabel sebelumnya.
Dan perhatikan bahwa saya memiliki seluruh banyak jenis untuk memilih dari.
>> Dan ini juga adalah mengapa phpMyAdmin adalah jenis yang baik.
Ini semacam self-mengajar dalam bahwa Anda bisa hanya semacam titik, dan klik, dan
melihat menu dropdown, dan menyimpulkan dari bahwa apa kekuatan SQL memberi Anda.
>> Dan memang, jika saya memilih CHAR, saya kemudian harus menentukan panjang, atau bagaimana
banyak nilai, berapa banyak karakter.
Jadi nilai-nilai yang sangat umum adalah hal-hal seperti 255, tapi itu agak panjang.
Umumnya adalah delapan untuk nama pengguna.
Tapi itu sedikit kecil hari ini.
Jadi ini adalah keputusan desain.
Apakah 8 karakter max, 32, 255, 1.000?
Ini benar-benar terserah pada Anda.
Tapi lapangan CHAR adalah nomor tetap.
Jadi memilih terlalu sedikit dan Anda jenis kacau jika Anda ingin username lagi.
Pilih terlalu banyak dan apa downside?
>> AUDIENCE: [Tak terdengar].
>> DAVID Malan: Ini boros.
Sama seperti di C, jika Anda memiliki lebih besar sepotong memori dari yang Anda butuhkan, Anda
hanya membuang-buang waktu dan membuang-buang ruang.
Jadi sebagai alternatif, terdapat VARCHAR, yang memecahkan masalah ini dengan
mengobati panjang bukan sebagai panjang tetap, tetapi sebagai panjang maksimum, dan menggunakan
variabel jumlah karakter, yang kemudian cenderung menggunakan hanya sebagai banyak karakter yang Anda
benar-benar membutuhkan.
Kedengarannya sempurna.
>> Mengapa kita tidak menyingkirkan Data CHAR tipe itu?
Apa yang mungkin menjadi sisi buruk menggunakan varchars, yang terdengar
seperti itu adalah kemenangan yang bagus?
Ya?
>> AUDIENCE: [Tak terdengar].
>> DAVID Malan: OK, baik.
Jadi, jika semua data adalah sama panjang, apa kekhawatiran?
>> AUDIENCE: Karena Anda membuang-buang Data dengan mengatakan kepada mereka semua.
>> DAVID Malan: Jadi, jika semua data Anda panjang yang sama, meskipun, saya berpendapat
yang menentukan panjang maksimum pada VARCHAR tidak berbeda dari
menentukan panjang tetap pada CHAR jika Anda tahu nomor yang di muka.
Tapi memang ada, dan aku akan semacam ekstrak dari jawaban bahwa realitas
bahwa masih ada max, yang bisa mengganggu, terutama jika Anda
menemukan nama seseorang yang luar biasa panjang bahwa Anda tidak
mengantisipasi.
Dan itu juga sedikit kurang efisien untuk benar-benar mencari di varchars sebagai
bertentangan dengan mencari karakter, terutama untuk meja-meja panjang yang memiliki banyak dan
banyak data.
Jadi di sini juga, tematik lagi tidak ada pilihan yang jelas.
>> Jadi hanya untuk memberikan rasa lainnya tipe data yang mungkin menarik
baik untuk p-set tujuh atau di masa depan, ada INT.
Ada BIGINT, yang adalah seperti lama.
Ini cenderung menjadi 64 bit.
Ada DECIMAL, yang akan Anda lihat di set masalah, yang merupakan banyak
jawaban cleaner untuk masalah yang kita ditemui dengan mengambang dan mengambang
titik ketidaktepatan.
Dan kemudian ada DATETIME.
Ada harfiah tipe data yang memiliki terlihat seperti satu tahun, satu bulan, satu hari,
dan satu jam, menit, dan detik.
>> Tapi database SQL juga memiliki hal yang kita akan menelepon indeks.
Dan indeks adalah sesuatu yang Anda tentukan saat membuat meja untuk
membuat pencarian dan operasi lainnya lebih efisien.
Secara khusus, ada sesuatu yang disebut PRIMARY indeks yang Anda bisa
menyatakan sebagai berikut.
>> Kami melakukan ini untuk Anda dengan tabel pengguna kami memberikan.
Tapi perhatikan jika aku menciptakan manual tabel pengguna di sini memberikan
itu nama pengguna.
Aku sudah ditentukan ID.
Saya ditentukan INT.
Saya ditentukan nama pengguna dengan maksimum 32 karakter.
Tetapi jika kita terus bergulir dalam hal ini cukup jendela lebar, pemberitahuan ada
banyak hal-hal lain yang bisa saya tentukan.
>> Satu, saya dapat menentukan atribut seperti, Anda tahu apa, ini
INT harus UNSIGNED.
Saya tidak ingin angka negatif, jadi mari kita membuatnya UNSIGNED.
Null tidak relevan di sini karena Saya ingin setiap pengguna untuk
memiliki nomor unik.
Saya tidak ingin menjadi null.
>> Tapi ini menarik.
Saya dapat menentukan bahwa ID adalah baik primary key dari database ini, atau itu
unik, atau itu diindeks, atau teks lengkap.
Jadi untuk tujuan hari ini, cerita panjang pendek, PRIMARY berarti bahwa ini akan
menjadi baik secara konseptual dan teknis bidang yang kita gunakan untuk secara unik
mengidentifikasi pengguna.
>> Jadi ketika kita mencari pengguna, ini adalah semacam dari janji untuk melihat mereka kebanyakan oleh
bahwa identifier unik.
Dan database akan memastikan bahwa jika Anda memiliki nomor pengguna 3, Anda tidak bisa
secara fisik memasukkan pengguna lain dengan nomor yang sama 3.
Database hanya akan menolak untuk menyimpan perubahan.
Yang merupakan hal yang baik, karena Anda dapat melindungi diri dari diri sendiri. diri
>> Atau, untuk username.
Jadi baris kedua, ingat, adalah kolom username.
Jadi baris kedua di sini adalah nama pengguna, seperti yang kita lakukan di paling kiri di sana.
>> Jadi apa lagi yang mungkin saya ingin menentukan?
Saya tidak diperbolehkan, menurut SQL, untuk menentukan dua kunci primer.
Anda dapat menentukan kunci bersama di mana Anda melihat kedua bidang, tetapi mereka tidak bisa
individual menjadi kunci utama.
Jadi itu keluar dari pertanyaan.
Jadi yang mungkin saya ingin memilih?
>> Nah, UNIK adalah semangat yang sama dengan primary key di mana Anda menentukan ini
lapangan harus unik, tapi itu tidak akan menjadi satu
Saya menggunakan semua waktu.
Dan kita tidak akan menggunakan satu ini semua waktu untuk alasan apa lagi?
Ini lebih lambat jika berpotensi itu adalah nama panjang.
Itu hanya membuang-buang waktu.
>> INDEX, sementara itu, menentukan bahwa itu tidak akan menjadi unik, tapi aku ingin
Anda untuk bekerja sihir Anda di bawah hood untuk membuatnya lebih cepat bagi saya untuk
mencari di bidang ini.
Jadi ini mungkin tidak relevan di sini.
Untuk nama, aku berpendapat bahwa UNIK adalah jawaban yang baik.
Tapi misalkan kita membuat lebih banyak pengguna menarik daripada username adil,
hash, dan nomor ID.
Bagaimana jika kita memberi orang nama lengkap?
Bagaimana jika kita memberi mereka alamat dan data lain tentang mereka?
>> Nah, jika Anda menentukan bahwa sebuah kolom dalam database diindeks, itu berarti bahwa
MySQL, atau Oracle, atau apa pun Database Anda gunakan, harus bekerja sihir
dan menggunakan beberapa jenis data mewah struktur seperti pohon, atau trie, atau
tabel hash, atau sesuatu untuk menjamin bahwa ketika Anda mencari data menggunakan
pilih pada bidang tertentu -
seperti menunjukkan semua orang bahwa kehidupan di Oxford Street.
Sebuah query seperti itu.
Jika Anda telah menetapkan sebelumnya bahwa Anda ingin indeks di lapangan itu,
pencarian akan jauh, jauh lebih cepat.
>> Jika Anda tidak menentukan indeks, yang terbaik dapat Anda lakukan adalah pencarian linear jika
itu tidak diurutkan.
Tapi jika Anda menentukan INDEX, smart orang yang membuat database -
orang seperti Anda yang sekarang tahu pohon dan mencoba dan tabel hash -
otomatis akan membangun data tersebut Struktur dalam RAM memastikan bahwa
mereka pencarian yang lebih cepat.
>> Sementara fulltext mirip dalam roh, tetapi memungkinkan Anda untuk melakukan wildcard
pencarian, seperti menunjukkan semua orang bahwa hidup di jalan-jalan yang dimulai dengan
huruf O untuk alasan apa pun.
Anda dapat melakukan pencarian wildcard seperti itu.
Atau, hal yang lebih menarik seperti acara saya orang yang memiliki kata -
menunjukkan orang yang namanya dimulai dengan huruf tertentu.
Anda dapat mencari kata kunci dengan cara ini.
Baik.
>> Jadi, peluang desain ada berpotensi.
Ada yang lain yang aku akan melambaikan tangan saya di.
Ternyata bahwa Anda dapat memiliki mesin penyimpanan yang berbeda.
Dan ini lebih misterius daripada yang kita butuhkan tentu saja untuk masalah memisahkan tujuh.
Secara default, kalian menggunakan sesuatu yang disebut InnoDB.
Anda akan melihat menyebutkan ini di suatu tempat di antarmuka phpMyAdmin kemungkinan besar.
Tapi tahu bahwa ada desain lainnya keputusan yang potensial
bunga datang proyek akhir jika Anda melakukan sesuatu berbasis web.
>> Tapi mari kita lakukan ini.
Mari kita pergi ke depan dan menempatkan ini pada layar sebagai teaser untuk sebuah cerita
melibatkan Anda, teman sekamar, dan segelas susu.
Mari kita mengambil dua menit atau jadi istirahat di sini.
Dan jika Anda bisa tetap tinggal, mari kita kembali, terlihat sedikit lebih di SQL, dan
maka sedikit JavaScript dengan p-set delapan dalam pikiran.
>> Baik.
Jadi, mari kita Anda berpikir tentang sudut kasus yang dapat sangat mudah timbul
dalam konteks menggunakan database, atau terus terang, bahkan menggunakan hal-hal dunia nyata
seperti ATM untuk mendapatkan uang.
Jadi, inilah kulkas.
Misalkan Anda punya satu juga di asrama atau rumah Anda.
Dan Anda punya satu teman sekamar, dan kedua Anda benar-benar seperti susu misalnya.
>> Jadi Anda pulang dari kelas satu hari.
Dia atau dia belum kembali.
Anda membuka kulkas.
Anda benar-benar ingin segelas besar susu.
Tidak ada susu.
Jadi apa yang Anda lakukan?
Anda menutup lemari es.
Anda ambil kunci Anda.
Anda pergi ke alun-alun.
Dan Anda mendapatkan dalam antrean di CVS pada saat- hal checkout diri, yang selalu
memakan waktu lebih lama daripada benar-benar memiliki kasir.
Bagaimanapun.
>> Jadi, sementara itu, dot dot dot, Anda teman sekamar pulang dan dia
sama memiliki keinginan besar beberapa susu.
Jadi dia membuka lemari es, terlihat di dalam, dan oh, sialan.
Tidak ada susu.
Jadi ia kepala keluar, terjadi untuk pergi ke CVS lainnya, yang hanya
blok jauhnya untuk beberapa alasan, dan dia atau dia mendapat dalam antrean untuk membeli susu.
>> Sementara itu, Anda pulang ke rumah, ia atau ia datang, dan apa yang dilakukan
Anda akhirnya punya?
Dua kali lebih banyak susu.
Tapi Anda tidak benar-benar seperti susu yang banyak.
Jadi sekarang Anda memiliki begitu banyak susu yang sekarang salah satu dari mereka hanya akan pergi asam
akhirnya.
Jadi ini adalah masalah benar-benar buruk.
Benar?
>> Jadi apa yang terjadi?
Jadi pada dasarnya, ini adalah jenis dari contoh konyol.
Tapi di balik kap mesin, apa yang kita punya terjadi di sini adalah Anda berdua diperiksa
keadaan beberapa bagian dari memori, kulkas.
Anda berdua diperiksa negara beberapa variabel.
Anda berdua menarik kesimpulan itu maka Anda bertindak.
Namun sayangnya, sementara teman sekamar Anda berada di toko, keadaan yang
variabel berubah, dia kembali dan sekarang ingin mengubah negara, tetapi
itu sudah berubah pada dirinya.
Dan tentu saja, ia tidak akan memiliki pergi ke toko jika mereka tahu
bahwa Anda sudah dalam perjalanan.
>> Jadi di dunia nyata, bagaimana kau bisa menghindari masalah ini, dengan asumsi Anda memiliki
kulkas, Anda memiliki teman sekamar, dan Anda benar-benar suka susu?
>> AUDIENCE: Berkomunikasi.
>> DAVID Malan: Berkomunikasi.
OK.
Tapi bagaimana mungkin Anda berkomunikasi?
>> AUDIENCE: Tinggalkan catatan.
>> DAVID Malan: Tinggalkan catatan, kan?
Selalu meninggalkan catatan, untuk penggemar dari pertunjukan.
Baiklah, jadi selalu meninggalkan catatan, atau menempatkan benar-benar seperti gembok atau sesuatu
pada lemari es yang membuat Anda teman sekamar dari memeriksa keadaan
bahwa variabel.
>> Sekarang, mengapa hal ini menjadi erat dengan permasalahan yang tujuh, atau ATM.
Nah, bayangkan sebuah dunia di mana ATM Anda mungkin bisa pergi ke ATM
mesin di sini, dan ATM lain di sini.
Dan ini terjadi cukup sering.
Dan misalkan Anda memiliki dua kartu ATM, yang mungkin untuk mendapatkan.
Dan Anda login ke kedua mesin efektif secara bersamaan, mudah-mudahan
sementara tidak ada yang melihat.
Dan kemudian Anda ketik PIN Anda kira-kira bersamaan.
Dan kemudian Anda melakukan query keseimbangan untuk melihat berapa banyak uang tunai yang Anda miliki.
Dan katakanlah anda $ 100 tersisa dalam account Anda.
Jadi pada dasarnya secara bersamaan, Anda mengatakan satu, nol, nol, masukkan.
Dan mudah-mudahan Anda mendapatkan kembali uang.
>> Tapi berapa banyak uang yang mungkin Anda dapatkan kembali?
Sekarang komputer di akhir hari, terutama jika mereka sedang berbicara dengan
server, tidak perlu melakukan hal-hal dalam urutan yang diharapkan.
>> Jadi misalkan apa yang terjadi, karena jaringan apapun masalah kecepatan ada
adalah, atau masalah CPU ada, atau sesuatu seperti itu, anggaplah bahwa
ATM pertama cek saldo dan melihat, oh, orang ini memiliki $ 100.
Tapi kemudian akan terganggu karena mungkin cadangan yang terjadi dan jadi
melambat.
Atau mungkin saat memeriksa, jaringan koneksi mendapat sedikit lebih lambat karena
ini terjadi begitu saja.
Mereka perangkat fisik.
Jadi sementara itu, ATM kedua adalah mengajukan pertanyaan yang sama.
Berapa banyak uang yang David miliki? $ 100 jawabannya.
Tetapi karena ATM pertama belum mengirim pesan kurangi $ 100, baik
ATM telah memeriksa lemari besi bank, melihat ada $ 100 di sana, dan sekarang
kedua mesin berpotensi adalah akan memuntahkan jawaban.
>> Sekarang, ini sangat bagus untuk Anda dalam beberapa hal jika apa yang bank tidak akhirnya
adalah mengubah jumlah yang minus 100 oleh pengaturan variabel sama dengan Anda
Bank rekening sama dengan 0, sebagai lawan untuk melakukan minus 100.
Sekarang dalam kasus terburuk untuk bank -
atau yang terbaik untuk bank, sementara itu, mereka memberi Anda $ 200, dan
rekening bank Anda sekarang menunjukkan negatif $ 100, yang benar-benar tidak
menguntungkan Anda sama sekali.
Tetapi intinya adalah bahwa lomba ini kondisi dua teman sekamar mendapatkan
susu, atau untuk dua ATM mencoba untuk mendapatkan uang tunai dan mengubah keadaan lemari besi
pada saat yang sama ada setiap waktu Anda memiliki sebuah database.
>> Sekarang dalam masalah menetapkan tujuh, masalah ini muncul dalam arti bahwa jika Anda membeli
lembar saham Facebook, dan kemudian untuk Misalnya Anda membeli saham kedua
Saham Facebook, Anda perlu membuat keputusan sebagai programmer.
Dalam rangka untuk memutuskan bagaimana untuk memperbarui Database, kemungkinan Anda akan
memiliki satu baris untuk saham itu, dan ini adalah salah satu cara untuk menerapkannya.
Dan Anda akan memiliki satu saham FB, yang merupakan simbol ticker saham mereka
username ini, atau pengguna ini ID, pengenal unik.
>> Tapi cerita yang sama bisa terjadi di sini.
Jika Anda melakukan SELECT di SQL, seperti yang Anda akan melihat dalam masalah menetapkan tujuh ketika Anda melihat,
oh, David memiliki satu saham saham Facebook.
Sekarang saya mengubah ini menjadi dua bagian, karena dia ingin membeli
saham kedua.
Tapi misalkan David benar-benar memiliki dua jendela browser terbuka, atau menganggap bahwa
itu rekening bersama dengan dua pasangan, dan keduanya berusaha untuk melakukan
operasi yang sama, ada juga, ada potensi untuk keputusan untuk menjadi
dibuat berdasarkan sebelumnya keadaan dunia -
account memiliki satu saham -
dan kedua orang atau kedua server, sekarang mencoba untuk mengatakan kenaikan itu menjadi dua saham.
Tapi dalam kasus ini, Anda mungkin telah dibebankan saya uang untuk kedua saham, tetapi
bertambah hanya satu kali.
>> Jadi singkatnya, masalah mendasar di sini, seperti dengan lelucon tentang meninggalkan
catatan, atau menempatkan gembok di atasnya, adalah jika dua orang, atau dua thread -
berpikir kembali ke awal -
dapat memeriksa keadaan beberapa variabel dan kemudian mencoba untuk mengubah variabel itu,
tetapi kedua hal tidak terjadi pada waktu yang sama tetapi bisa terganggu
oleh hal-hal lain yang terjadi, data yang dapat masuk ke keadaan yang sangat aneh.
Dan Anda bisa mendapatkan keuntungan atau Anda bisa menderita dalam arti contoh uang.
>> Jadi dalam masalah set tujuh, kami memberikan baris ini salah satu kode, yang panjang
cerita pendek, memecahkan ini masalah dalam MySQL.
Instruksi ini sangat panjang yang tidak bahkan masuk dalam satu garis pada
layar di sini memastikan bahwa operasi Anda adalah apa yang disebut atom.
Itu semua terjadi sekaligus, atau itu tidak terjadi sama sekali.
Ungkapan yang sangat panjang ini tidak bisa mendapatkan terganggu sebagian.
>> Dan apa yang dilakukannya adalah benar apa yang dikatakannya.
Masukkan ke dalam beberapa tabel berikut tiga bidang nilai-nilai tertentu,
tetapi pada duplikat kunci, tidak melakukan insert.
Melakukan update.
Jadi ini seperti melakukan SELECT dan INSERT sehingga untuk berbicara pada waktu yang sama.
Dan apa adalah kunci yang mungkin yang dimaksud di sini?
>> Ternyata, dan Anda akan melihat ini dalam permasalahan yang tujuh itu spec, karena
kami telah menyatakan ada menjadi kunci yang unik di meja tertentu sehingga
Anda tidak dapat memiliki beberapa baris untuk pengguna yang sama dengan
sama simbol saham penny -
dalam contoh ini di sini, adalah DVN.V saham penny konyol yang kita
lihat di spec.
Karena kita sudah menyatakan itu menjadi unik, apa artinya ini adalah bahwa jika Anda
mencoba untuk menyisipkan baris duplikat, Anda bukannya akan memperbaruinya tanpa
orang lain memiliki kesempatan untuk mengubah keadaan dunia baik.
Jadi singkatnya, ini memastikan hal-hal yang atom.
>> Secara umum meskipun, database seperti MySQL -
dan Anda tidak perlu fitur ini untuk p-set tujuh, tapi menyimpannya dalam pikiran untuk
masa depan -
mendukung apa yang disebut transaksi, di mana Anda dapat mengatakan
MULAI TRANSAKSI harfiah.
Anda kemudian dapat mengeksekusi dua pernyataan SQL.
Dan pernyataan SQL, seperti yang Anda akan melihat dalam p-set tujuh, terlihat sedikit
sesuatu seperti ini.
Memperbarui tabel yang disebut akun.
Mengatur kolom saldo sebesar apapun kolom saldo saat ini
minus 1.000 di mana nomor tersebut, nomor rekening, seperti ID pengguna,
sama dengan 2, dan kemudian memperbarui akun dot dot dot.
>> Jadi dalam istilah awam, apa yang kedua query tampaknya akan melakukan dalam
arti dunia nyata perbankan?
>> AUDIENCE: Mentransfer tabungan.
>> DAVID Malan: Tepat.
Mentransfer dana dari satu akun yang lain.
Dan ini adalah contoh lain di mana Anda benar-benar ingin dua hal ini terjadi
atau tidak terjadi.
Anda tidak ingin sesuatu untuk mendapatkan di tengah-tengah mereka dan berpotensi mengacaukan
matematika, atau mengacaukan berapa banyak uang yang Anda miliki, atau berapa banyak
uang bank memiliki.
Jadi apa yang benar-benar baik tentang transaksi di MySQL adalah bahwa, dan
database lebih umum, adalah bahwa mereka dan orang-orang pintar yang pernah diimplementasikan
fitur ini mencari cara untuk membuat memastikan bahwa kedua hal terjadi
atau tidak sama sekali.
>> Dan jika Anda benar-benar bercita-cita untuk membuat sebuah website yang digunakan oleh orang-orang di
kampus, orang-orang di dunia nyata, melakukan sesuatu dalam arti startup,
ini adalah jenis keputusan desain yang
menjadi pernah begitu penting.
Jika tidak, Anda mulai kehilangan data, kehilangan pengguna, atau dalam kasus terburuk sebagai
kita lihat di sini, berpotensi kehilangan uang.
Jadi sekali lagi, lebih pada bahwa dalam permasalahan yang tujuh, serta mungkin untuk beberapa
Anda dalam proyek akhir.
>> Jadi mari kita mengubah gambar yang kita miliki saat lalu hanya dalam satu cara.
Jadi biarkan aku benar-benar melihat apakah saya bisa -
nope, yang sudah pergi.
Ada itu.
>> Jadi ini adalah di mana kami meninggalkan terakhir kali.
Dan ternyata kita akan melemparkan satu hal lagi ke dalam campuran di sini -
bahasa yang disebut JavaScript.
Jadi benar-benar cocok JavaScript ke dalam bagian ini -
dan aku tidak cukup meninggalkan ruang yang cukup, jadi ini bukan sekarang untuk skala.
OK, ini benar-benar menyedihkan.
OK, jadi itu JavaScript.
Baik.
Aku benar-benar melakukan tindakan merugikan.
Baik.
>> Jadi JavaScript adalah pemrograman lain bahasa, dan terakhir kami, Jika yang membantu
meyakinkan bahwa tidak ada lebih banyak dari hidran kebakaran di sini.
Jadi JavaScript juga ditafsirkan bahasa, yang berarti Anda tidak
compile menjadi nol dan satu.
Anda hanya menjalankannya.
Tapi apa dasarnya berbeda dengan JavaScript biasanya adalah bahwa Anda
tidak berjalan di server web Anda.
Ini tidak bisa dijalankan dalam alat per se.
Sebaliknya, hal itu akan di-download oleh pengguna melalui HTTP ke browser mereka -
Chrome, Safari, Internet Explorer, Firefox, apa pun -
dan itu browser yang mengeksekusi ini bahasa pemrograman tertentu.
>> Jadi harus jelas, PHP sejauh ini telah dijalankan baik pada baris perintah di
jendela hitam dan putih, pada server seperti alat, komputer
seperti alat, atau sudah dieksekusi oleh server web
berjalan pada komputer.
Tapi tema di sini adalah PHP yang sejauh ini telah dieksekusi di sisi server, sehingga
pengguna dan browser pengguna tidak pernah melihat baris kode PHP.
>> Bahkan, jika Anda pernah membuka browser untuk website atau lain dan Anda
benar-benar melihat kode PHP di jendela Anda, seseorang telah kacau.
Karena itu tidak dimaksudkan untuk menjadi dikirim ke browser langsung.
Ini seharusnya akan dieksekusi dan berbalik menjadi sesuatu seperti HTML.
>> Tapi JavaScript pada dasarnya sebaliknya.
Ini dimaksudkan untuk dijalankan biasanya dalam jendela browser pengguna.
Dan apa jenis website menggunakan JavaScript kemudian hari ini?
>> Seperti harfiah setiap situs populer.
Setiap situs web yang kalian mungkin gunakan sehari-hari menggunakan JavaScript untuk
sederhana dan bahkan fitur terseksi.
>> Jadi sesuatu seperti Facebook Chatting jika Anda menggunakan itu.
Bagaimana yang benar-benar bekerja?
Nah sejauh ini, semua barang-barang kami sudah dilakukan dengan HTML dan PHP mengasumsikan bahwa
Anda menarik sebuah URL, dan Anda tekan Enter, dan Anda melihat beberapa konten HTML.
Dan Anda klik link, yang mengubah URL, mengubah halaman, dan reload
beberapa konten baru.
Klik URL lain atau mengirimkan formulir, Anda bisa dibawa ke halaman lain dan
Anda melihat beberapa konten baru.
>> Tetapi menggunakan sesuatu seperti Facebook Chat, atau Gchat, atau Google Maps, jarang
tidak seluruh halaman menyegarkan sehingga Anda melihat layar putih sebentar dan
maka konten baru.
Sebaliknya, halaman web saat ini dinamis mendapatkan diperbarui lagi dan
lagi dan lagi semua jenis dari belakang layar.
Dan ternyata bahwa ketika Anda pergi ke sesuatu seperti Facebook, atau Gchat,
atau Gmail, dan update halaman otomatis tanpa reload
seluruh layar, apa yang terjadi adalah bahwa browser Anda telah membuat semacam diam-diam
permintaan HTTP tambahan -
bukan untuk halaman web secara keseluruhan, tetapi hanya untuk potongan kecil dari data, seperti
pesan instan bahwa teman Anda hanya mengirimkan, atau status update yang
seseorang hanya mengirimi Anda, atau tweet bahwa seseorang hanya dikirim.
Ini hanya membuat permintaan sedikit untuk data, dan kemudian menggunakan JavaScript, ini
bahasa pemrograman, untuk mengubah apa halaman web terlihat seperti tanpa
Server membantu, tanpa server menghasilkan HTML itu.
>> Jadi singkatnya, JavaScript dapat digunakan kemudian untuk tidak hanya mengambil data baru dari
server tanpa reload keseluruhan Halaman atau mengirimkan formulir.
Hal ini juga dapat digunakan untuk perubahan yang disebut DOM -
dokumen objek model -
yang hanya cara mewah untuk mengatakan pohon HTML
bahwa kita melihat terakhir kali.
>> Jadi untuk meyakinkan, JavaScript adalah sintaksis sangat mirip dengan C juga.
Tidak ada fungsi utama.
Anda hanya mulai menulis kode dan itu akan dieksekusi, atau
ditafsirkan lebih tepat.
Kondisi akan terlihat seperti ini.
Tidak ada yang berbeda dari C atau PHP dalam hal ini.
Ekspresi Boolean atau-ed bersama-sama akan terlihat seperti ini.
Anded bersama-sama terlihat seperti ini.
>> Switch akan terlihat seperti ini.
Untuk loop akan terlihat seperti ini.
Sementara loop akan terlihat seperti ini.
Lakukan perulangan while akan terlihat seperti ini.
>> Ini baru.
Jadi JavaScript belum foreach membangun per se, tetapi konstruksi ini
untuk variabel i dalam array, dan saya dalam hal ini kasus menjadi nilai indeks.
Jadi itu sedikit berbeda dari yang foreach, meskipun versi baru
JavaScript yang keluar sepanjang waktu, sehingga bahkan fitur bahasa ini
berkembang.
>> Dan sebagai samping, JavaScript hari ini juga dapat digunakan pada server seperti
PHP menggunakan kerangka kerja yang disebut Node.js.
Salah satu CS50 di TF, Kevin, telah memimpin seminar tentang Node.js yang tersedia di
cs50.net/seminars.
Jadi, jika Anda penasaran, tahu bahwa Anda dapat menggunakan ini pada sisi server sebagai
baik, tapi itu tren yang lumayan baru, tapi satu yang kuat pada saat itu.
>> Ini adalah sedikit berbeda.
Ini adalah sebuah array di JavaScript.
Dan apa yang mengejutkan Anda sebagai berbeda dibandingkan C atau PHP?
Ada sebuah cerita cepat beberapa kita bisa mengatakan di sini.
Apa yang hilang dibandingkan PHP?
>> AUDIENCE: [Tak terdengar].
>> DAVID Malan: Ya?
Maaf, katakan lagi?
>> AUDIENCE: Tidak menyatakan jenis variabel.
>> DAVID Malan: Kami tidak menyatakan jenis variabel.
Jadi sebenarnya cukup seperti PHP, kita tidak menentukan jenis variabel ini.
Sebaliknya, kita lebih umum mengatakan var untuk variabel.
Kami tidak memiliki gangguan PHP dari tanda dolar, yang sementara membosankan untuk
jenis, tidak membuat lebih jelas bahwa sesuatu yang variabel.
Sedangkan di sini, kami semacam kembali ke Pendekatan C dengan hanya memanggil
variabel dengan nama yang kita inginkan untuk memberikan, seperti nomor.
Dan juga seperti PHP, kita memiliki kurung persegi untuk
nilai-nilai dalam array itu.
>> Jadi variabel dalam JavaScript juga mungkin terlihat seperti ini.
Perhatikan di sini ini adalah sebuah string disebut s, tapi sama memiliki kita tidak ditentukan
bahwa itu string.
Di sini meskipun adalah fitur yang tidak ada dengan cara yang persis sama di PHP,
tapi agak sama.
Ini adalah obyek dalam JavaScript.
Dan objek semacam Swiss Army Pisau dari struktur data dalam bahwa Anda
dapat menggunakannya untuk banyak hal.
>> Di sini, misalnya, kita menyatakan variabel yang disebut quote.
Jenis variabel yang adalah obyek.
Anda dapat menganggap ini sebagai struct C yang memiliki kunci dan nilai.
Simbol adalah kunci.
FB adalah nilai, rupanya simbol saham.
Koma.
Harga adalah kunci lain, dan nilainya rupanya floating point, atau
jumlah yang lebih umum di JavaScript, dari $ 49,26.
>> Jadi PHP tidak memiliki -
kami belum melihat dalam objek PHP cukup seperti ini, tapi kami melihat analog,
yang adalah apa?
>> AUDIENCE: [Tak terdengar].
>> DAVID Malan: Associative array.
Jadi sedangkan PHP memiliki array asosiatif yang sintaks yang pernah sedikit sehingga
berbeda -
kami melihat tanda kurung siku.
Kami melihat aneh panah simbol.
JavaScript memiliki objek, tapi ini sebagian besar perbedaan semantik dan
sinonim yang berbeda untuk saat ini.
Namun, sebagai samping, PHP juga memiliki objek dalam cara yang Java dan lainnya
bahasa memiliki benda-benda di pemrograman berorientasi objek.
Tapi kita akan menggunakan ini hanya untuk tipe data untuk saat ini.
Obyek dan array asosiatif.
>> Yang satu ini mungkin membuatnya sedikit lebih jelas.
Inilah mengapa sebuah benda berguna.
Bila Anda ingin mendeklarasikan mahasiswa, seperti Zamyla, kita bisa benar-benar
merangkum sehingga untuk berbicara dalam yang objek menggunakan kurung keriting seperti
sebelum sejumlah besar kunci dan nilai-nilai di sini.
Kami memiliki ID, rumah, dan nama Zamyla, diikuti dengan titik koma sebagai
biasanya di akhir.
>> Di sini juga, ini sedikit berbeda, tetapi juga sangat kuat
hari ini.
Berikut ini adalah array, dan aku tahu bahwa karena ada braket persegi up
atas dan braket persegi di bagian bawah.
Dan ini adalah array dari data apa ketik rupanya di JavaScript?
Ini adalah sebuah array terlihat seperti tiga obyek.
Dan aku tahu itu adalah sebuah objek hanya karena kurung kurawal.
Dan melihat ada terbuka keriting brace, beberapa hal, dekat keriting brace, koma,
kemudian lagi, koma, dan kemudian beberapa lagi.
Jadi itulah tiga argumen dipisahkan oleh dua koma.
>> Jadi ini adalah sebuah array dari tiga objek.
Dan masing-masing obyek tampaknya anggota mahasiswa atau staf perusahaan tertentu
macam, masing-masing dengan ID, rumah, dan nama.
Tapi aku sudah disebut sesuatu ini disebut JSON -
JavaScript Object Notation.
Dan ini adalah format data yang benar-benar begitu sangat populer dan di
vogue hari ini bahwa jika Anda menulis aplikasi yang menggunakan Facebook
API, API Twitter, benar-benar hampir setiap API luar sana hari ini,
termasuk beberapa CS50 sendiri, yang Data Anda kembali tidak di
Format CSV sekolah tua.
>> Karena ingat bahwa CSV super sederhana.
Ini hanya kolom dipisahkan dengan koma.
JSON Data memberi Anda lebih banyak metadata.
Ini asosiasi kunci dengan setiap nilai sehingga mereka tidak harus hanya berasumsi bahwa
kolom ke nol adalah satu nilai, kolom satu sama lain, dua kolom adalah hal lain.
Segala sesuatu di objek JSON di sini adalah semacam dari self-describing, karena setiap
salah satu nama dalam file ini telah benar-benar Nama di depannya sebagai
string yang dikutip.
>> Jadi mari kita melihat sebuah beberapa contoh di sini.
Biarkan aku pergi ke dalam alat.
Dan biarkan aku pergi ke vhost kami direktori ke publik.
Dan biarkan aku pergi ke Direktori JavaScript.
Dan mari kita pergi ke depan dan membuka dom-0.html, di mana DOM hanya berarti
dokumen objek model.
Ini adalah hal pohon yang Saya sebut sebelumnya.
>> Dan biarkan aku mengusulkan berikut.
Berikut adalah halaman web yang tubuh sangat sederhana.
Jadi di sini di bagian bawah, Saya perhatikan memiliki bentuk.
Kami telah melihat mereka sebelumnya.
Ini memiliki dua input, salah satunya memiliki ID nama, salah satunya memiliki jenis
submit, dan yang pertama jenis satu adalah teks.
Jadi ini benar-benar terdengar sangat sederhana.
>> Mari kita pergi di sini.
Mari kita kembali ke halaman ini di sini.
Mari kita pergi ke localhost, dan pergi ke direktori JavaScript kami, dan pergi ke
dom-0, dan di sini kita memiliki formulir ini.
Jadi itu rupanya semua halaman ini tidak.
Ia memiliki nama field dengan tombol Submit.
Tapi aku tidak akan menggunakan PHP sini.
Aku akan melakukan segala sisi client sehingga untuk berbicara dalam JavaScript sebagai berikut.
>> Perhatikan bahwa saya memang diberi nama bidang masukan ini unik
identifier, yang sebenarnya akan menyelamatkan saya beberapa waktu dalam sekejap.
Dan perhatikan saya telah memperkenalkan tag lain di kepala halaman web saya,
tag.
>> Jadi dalam pengertian ini bahwa JavaScript bahasa pemrograman sisi klien.
Dalam hal ini, seperti CSS, saya telah menempatkan langsung dalam HTML saya.
Tapi perhatikan aku sudah menyatakan fungsi yang terlihat sedikit seperti PHP
sintaksis, tapi ini sebenarnya JavaScript, karena sekali lagi, itu
sisi klien dalam browser.
Dan mengambil menebak apa ini akan lakukan, meskipun beberapa sintaks
di sini adalah baru.
>> AUDIENCE: Menyapa siapapun.
>> DAVID Malan: Ini akan menyapa kepada siapa pun yang mengunjungi halaman ini.
Jadi bagaimana?
>> Jadi pemberitahuan, ternyata dalam JavaScript ada fungsi alert ().
Ini adalah sangat semacam fungsi sedih bahwa benar-benar hanya cenderung mengganggu pengguna.
Ini bukan yang Anda benar-benar harus menggunakan biasanya, tapi itu cepat dan kotor
cara semacam mencetak sesuatu ke pengguna grafis
antarmuka, seperti browser.
Perhatikan di sini bahwa saya punya string dalam tanda kutip tunggal.
Ternyata tidak seperti C, JavaScript dapat benar-benar telah Anda gunakan tunggal
kutipan, dan terus terang itu hanya jenis konvensi gaya antara
Programmer JavaScript menggunakan tanda kutip tunggal.
PHP, mereka benar-benar memiliki sedikit arti yang berbeda.
Tetapi untuk sekarang, hanya tahu bahwa itulah satu-satunya alasan.
Konvensi dalam JavaScript yang sering menggunakan tanda kutip tunggal, tetapi kita bisa menggunakan
tanda kutip ganda di kedua tempat juga.
>> Jadi ini menarik.
Ingat terakhir kali kita punya gambar di layar yang menarik pohon
di mana Anda memiliki node HTML, dan kepala node, dan node tubuh,
dan kemudian beberapa teks.
Tapi ada satu node khusus di paling atas yang saya disebut dokumen.
Nah, ternyata dalam JavaScript, setiap kali Anda menulis sebuah program dalam JavaScript
dalam browser, Anda memiliki akses ke variabel global khusus.
Semangat yang sama superglobals PHP, satu ini disebut dalam
semua dokumen huruf kecil.
>> Ini seperti struct, tapi struct ini juga memiliki fungsi di dalamnya.
Jadi struct C hanya memiliki data yang biasanya.
Tapi objek JavaScript karena ini secara teknis juga memiliki fungsi,
atau dikenal sebagai metode, di dalamnya.
Dan Anda dapat memanggil fungsi dalam objek ini secara harfiah melakukan nya
nama, dot, dan kemudian nama fungsi, atau lagi metode.
Ini hanya sinonim, benar-benar.
>> Dan apa fungsi ini lakukan?
Anda dapat jenis menebak dari namanya.
Dapatkan elemen dengan ID.
Jadi ini akan mencari halaman web, mencari pohon itu, mencari
apapun node, elemen AKA, memiliki ID unik kutipan nama tanda kutip.
Lalu apa yang akan saya lakukan?
Aku akan mendapatkan nilai dalam bahwa node di pohon, dan aku akan
entah bagaimana menyapa nama itu.
>> Jadi mengambil menebak, meskipun kita sudah tidak melihat ini belum, apa yang ditambah
simbol maksud di sini dan di sini mungkin?
>> AUDIENCE: concatenate.
>> DAVID Malan: concatenate.
Benar, dan ini hanya semacam keputusan desain
orang membuat tahun yang lalu.
Di PHP, Anda menggabungkan hal dengan titik-titik.
Dalam C, Anda melompat melalui beberapa simpai dan memanggil fungsi seperti strcopy () atau
strcat () atau fungsi seperti lainnya.
Tapi dalam JavaScript, Anda menggunakan plus.
Jadi ini hanya concatenating tiga senar -
halo, nama, dan kemudian tanda seru.
>> Jadi kapan dan mengapa fungsi ini disebut meskipun?
Nah, mengambil menebak dari HTML di bagian bawah.
Mengapa menyapa () disebut, atau kapan?
>> Rupanya, seperti terbaik yang bisa saya katakan, pada submit, ketika formulir ini diajukan,
Aku akan melakukan apa pun yang dalam kutipan ini.
Dan secara khusus, aku akan menelepon menyapa () dan kemudian kembali palsu.
>> Nah, mari kita lihat apa net Efek sini pertama.
Jadi biarkan aku pergi ke depan dan ketik dalam, katakanlah, Loren, Submit.
Hello Loren.
Mari kita lihat apakah mungkin ini hanya implementasi beruntung.
Tidak.
Jadi itu mengetik apapun nama saya benar-benar diletakkan di sana.
>> Tapi perhatikan apa yang tidak berubah.
URL masih dom-0.html.
Tidak ada register.php.
Tidak ada file kedua.
Tidak ada atribut aksi.
Jadi apa ini kembali palsu mungkin lakukan?
Mengapa saya memanggil menyapa () dan kemudian kembali palsu mungkin?
Apa yang biasanya terjadi bila Anda mengklik Kirim pada formulir yang bahkan kita miliki
terlihat dalam seminggu terakhir?
>> AUDIENCE: [Tak terdengar].
>> DAVID Malan: It goes suatu tempat, kan?
It goes beberapa URL tujuan.
Tapi aku tidak ingin hal itu terjadi di sini.
Saya ingin halaman web saya harus benar-benar dinamis seperti Gmail, di mana setelah Anda
ada, Anda tinggal di sana.
URL tidak berubah dengan cara yang menunjukkan seluruh halaman reload.
Sebaliknya, saya hanya ingin mengubah sesuatu seperti mencetak sesuatu
di sini di layar.
>> Yah biarkan aku membersihkan ini up sedikit.
Mari saya membuka dom-tidak 0, tetapi biarkan aku membuka dom-2.
Hanya jadi Anda telah melihat beberapa sintaks di sini.
>> Ternyata apa yang kita hanya tidak menggunakan baku JavaScript.
Jadi ini benar-benar bahasa JavaScript.
Beberapa dari Anda mungkin tahu perpustakaan disebut jQuery.
>> Jadi jQuery tidak sama hal seperti JavaScript.
Ini hanya sebuah perpustakaan yang benar-benar cerdas Orang menulis dan dipopulerkan seperti
bahwa hampir semua orang di dunia sekarang menggunakan jQuery ketika menggunakan JavaScript.
Dan pada pandangan pertama, jujur, terlihat sedikit lebih samar.
Tapi Anda akan menemukan, terutama jika Anda pergi ada untuk proyek akhir Anda dengan web
pengembangan, Anda akan menemukan bahwa ini membersihkan hal-hal dan menghemat cukup
beberapa baris kode.
>> Jadi mari kita melirik bagaimana Bentuk ini bekerja.
Perhatikan apa yang saya menghapus rupanya dari HTML saya?
Tidak ada di submit handler sehingga untuk berbicara.
Tidak ada atribut.
Karena Anda tahu, apa yang Aku tidak benar-benar suka?
Saya merasa seperti kita jatuh ke kebiasaan lama di sana.
Sama seperti itu mulai merasa ceroboh untuk berbaur baik dengan CSS
HTML, karena kau jenis melemparkan bahasa yang berbeda di seluruh
tempat, sama hal ini bisa mulai merasa seperti jalan yang buruk untuk turun di mana
Aku menempatkan kode JavaScript dalam saya HTML daripada anjak keluar.
>> Jadi itulah pelajaran di sini.
Dalam dom-2.html, aku anjak keluar.
Dan aku melakukan hal-hal yang sedikit berbeda.
Untuk saat ini, aku akan melambaikan tangan saya apa ini benar-benar
bawah tenda.
Tapi untuk saat ini menganggap bahwa yang pertama kali baris kode di perpustakaan ini
disebut jQuery hanya berarti ketika dokumen siap, lakukan langkah berikut.
>> Karena halaman web dapat mengambil beberapa waktu untuk memuat.
Anda mungkin pada internet lambat koneksi, dan mungkin akan berputar
dan berputar, dan akhirnya itu dimuat.
Itu baris kode hanya mengatakan menunggu sampai seluruh halaman siap, dokumen
siap, sebelum mengeksekusi kode ini.
>> Dan sekarang pemberitahuan, ini mungkin yang paling berguna pertama
mengambil dari jQuery.
Baris ini di sini sangat mirip dalam roh ini lebih lama line di sini.
Sedangkan dalam kode JavaScript baku, ada ada sebuah obyek global dokumen yang
memiliki fungsi yang disebut getElementById (), orang-orang yang menulis
jQuery disederhanakan bahwa hanya mengatakan tanda dolar, dan kemudian dalam
kurung menempatkan dua tanda kutip, dan kemudian menaruh simbol hash diikuti oleh
ID unik Anda ingin mengambil.
Jadi ini adalah setara dengan document.getElementById.
>> Sementara itu,. Mengirimkan hanya berarti pada pengajuan bentuk apapun Anda
mengacu pada sebelah kiri, pergi depan dan melaksanakan ini.
Tapi ini sekarang rasa ingin tahu juga.
Apa yang aneh tentang apa Aku sudah disorot di sini?
Tidak hanya itu jenis sintaksis baru, ada juga sesuatu yang hilang.
>> AUDIENCE: Ini hanya disebut fungsi?
Itu tidak disebut waspada?
>> DAVID Malan: Ya.
Nah, jadi waspada () turun di sini, untuk menjadi adil.
Tetapi tidak ada disebutkan tentang nama, seperti Anda tahu, foo atau
sesuatu di sini.
Dan memang, ini adalah salah satu fitur JavaScript yang cukup
kuat, tetapi juga cukup baru.
Dan PHP sebenarnya memiliki ini juga.
>> Biarkan aku pergi ke depan dan melakukan sesuatu yang nyata cepat.
Biarkan aku pergi ke depan dan menempatkan hal ini di sini.
Biarkan aku melakukan ini.
Fungsi.
Mari kita sebut pawang ini ().
Sebuah fungsi pengendali sehingga untuk berbicara.
Sesuatu yang menangani beberapa operasi.
Biarkan aku membersihkan lekukan saya.
Dan menempatkan ini di sini.
Dan letakkan itu di sini.
Yep.
OK.
>> Jadi sekarang aku punya fungsi yang disebut handler () bahwa saya tidak benar-benar tahu
apa yang belum.
Itu hanya masih memiliki hal itu.
Whoops.
Mengambil terlalu banyak.
Mari kita lakukan ini.
Baik.
Maaf.
Baik.
Biarkan aku melakukan ini.
OK.
Itu terlihat bagus dan lurus maju sekarang.
Biarkan aku melakukan ini.
Lakukan ini.
Dan OK.
Jadi sekarang, mari kita menempatkan ini di sini.
Tidak ada lagi program on the fly.
OK.
>> Jadi sekarang, mari kita kembali ke mana cerita dimulai.
Sebelumnya, saya mengatakan bahwa baris ini di sini berarti ketika dokumen siap, pergi
ke depan dan melakukan hal ini.
Apa yang ingin saya lakukan?
Nah khusus, saya ingin pergi ke depan dan melakukan hal berikut.
Jalankan baris kode, dan kemudian apa yang saya ingin Anda lakukan adalah menyebutnya
berfungsi ketika formulir dikirimkan.
>> Sekarang ini adalah apa yang menarik.
Ini bukan fungsi itu sendiri.
Perhatikan saya tidak menempatkan tanda kurung di sini dengan cara biasa.
Aku benar-benar melewati fungsi yang disebut handler () ke fungsi lain
disebut submit () sebagai argumen meskipun itu seperti variabel.
Dan ini adalah salah satu fitur dari JavaScript, adalah fungsi sendiri
benar-benar hanya objek.
Bahkan, mereka benar-benar hanya variabel dari beberapa macam.
Dan jika nama fungsi tersebut handler (), tidak ada alasan aku tidak bisa
lulus sebagai argumen di sini.
Dan ini berarti ketika form dengan ID dari demo
disampaikan, memanggil fungsi ini.
>> Tapi sekarang jika saya membatalkan semua ini, mengapa saat itu aku mungkin melakukan
ini beberapa saat yang lalu?
Nah, ini adalah fungsi anonim.
Karena terus terang, saya menyadari mengapa saya repot-repot buang waktu mendeklarasikan
fungsi yang disebut handler () hanya untuk memanggil dalam satu dan hanya satu tempat?
Jika saya tidak perlu nama, dan aku tidak perlu menyebutnya lebih dari satu tempat,
mari kita melaksanakan fungsi tepat di mana saya membutuhkannya.
Maka JavaScript dan PHP mendukung apa disebut fungsi anonim yang
memungkinkan saya untuk melakukan hal itu di sini.
>> Tapi kami hanya menggaruk permukaan.
Mari menggoda dengan hanya beberapa contoh akhir di sini.
>> Jika saya pergi ke quote.php.
Perhatikan bahwa ini sebenarnya PHP fungsi, program PHP, yang saya tulis
yang mengharapkan parameter HTTP yang disebut simbol, dan saya bisa lulus dalam
nilai seperti FB.
Dan jika kita benar-benar melihat sumber kode, ini query website gratis
disebut Yahoo Finance, seperti p-set tujuh, dan itu kembali ke saya
sesuatu rupanya format yang dikenal adalah JSON -
JavaScript Object Notation.
Ini hanya sebuah objek.
Perhatikan kurung kurawal, tanda kutip, usus, dan koma.
>> Sekarang sementara itu, ini cukup keren.
Karena aku mungkin dapat menggunakan program yang bahasa untuk menghasilkan URL
yang terlihat seperti ini secara dinamis, benar?
Saya dapat mengubahnya ke Google dan kembali Google
harga saham dari $ 1,017.55.
Jadi mari kita lihat jika kita tidak dapat menggunakan ini sekarang.
>> Biarkan aku pergi ke ajax-0 di sini, yang terlihat seperti berikut ini.
Ini hanya situs Web yang memiliki bentuk dengan tombol.
Biarkan aku di sini pergi ke depan dan ketik YHOO untuk simbol saham Yahoo, klik Get
Kutipan, dan sekarang melihat aku sudah peringatan dengan 32.86.
>> Biarkan aku benar-benar pergi ke versi lebih bagus halaman ini, versi dua, dan
ketik katakanlah Microsoft, MSFT.
Dapatkan Penawaran.
Dan sekarang perhatikan, tidak ada peringatan.
Perhatikan di mana ia mengatakan harga akan ditentukan?
Ada yang paling sederhana dari contoh yang mengisyaratkan apa Gchat, dan Facebook
Chatting, dan Gmail, dan semacamnya lainnya website lakukan dengan benar-benar
mengubah halaman web.
>> Perhatikan ini.
Biarkan aku kembali halaman tersebut.
Mari saya membuka Inspektur Chrome.
Biarkan aku pergi ke elemen tab di sini.
Sekarang perhatikan jika saya zoom in di sini dan membuka hal ini, perhatikan bahwa ini adalah saya
HTML DOM - model objek dokumen saya.
Ini adalah HTML saya.
Tapi sekarang perhatikan, meskipun itu akan menjadi agak sulit untuk melihat dengan kedua
tempat sekaligus, jika saya ketik di FB di sini, menonton bagian bawah
layar saja.
>> Ini benar-benar mengubah HTML saya on the fly.
Dan itu melakukan hal ini cukup sederhana dengan melakukan sesuatu seperti ini.
Jika saya membuka ajax-2, pemberitahuan pelaksanaan sesuatu yang seksi
bahwa, meskipun itu sangat jelek, tapi canggih seperti yang
fungsional, memiliki beberapa HTML di bagian bawah.
Tapi perhatikan aku digunakan untuk menandai.
Kami sudah tidak menggunakan ini sebelumnya, tapi ini adalah seperti, tetapi tidak memaksa
segala sesuatu ke baris baru.
Itu hanya membuat wilayah persegi panjang pada baris yang sama dasarnya.
>> Perhatikan bahwa saya memberikannya ID harga.
Dan ternyata dengan menggunakan yang sama JavaScript perpustakaan, saya memiliki fungsi
disebut quote () yang dipanggil setiap kali formulir tersebut diajukan.
Dan apa yang saya lakukan adalah ini.
Saya menyatakan variabel dalam JavaScript disebut url, menyimpan nilai
quote.php? simbol =.
Dengan kata lain, aku sendiri mulai untuk mempersiapkan permintaan HTTP, dan kemudian
Saya concatenating ke bahwa dengan plus apapun elemen dengan ID yang
simbol adalah, pemberitahuan adalah bahwa text field yang tepat di sini.
Jadi sama seperti kita punya bentuk di masa lalu.
>> Dan kemudian ternyata di jQuery, jika Anda menelepon. val (), yang menyebut dari val a
fungsi, fungsi nilai, yang mendapat apa pun pengguna telah diketik masuk
Dan kemudian semua lalu lintas jaringan yang terjadi adalah ini.
$. GetJSON.
>> Dan sebagai samping, tanda dolar hanya notasi singkat.
Ini benar-benar jQuery.getJSON.
Dapatkan saya ke JSON dari URL ini, dan ketika permintaan datang kembali, menyebutnya
fungsi dan lulus sebagai argumen apa kembali dari server.
>> Jadi dengan kata lain, jika saya kembali ke Browser, dan aku kembali ke quote.php,
apa browser saya lakukan semakin potongan data ini.
Dan ketika saya pergi ke halaman web di sini, perhatikan jika kita bukannya pergi ke jaringan
Jenis tab dan jelas itu, dan kemudian di sesuatu seperti GOOG untuk Google dan Dapatkan
Kutipan, perhatikan halaman tidak berubah.
Tapi permintaan HTTP dibuat, dan apa datang kembali ke sini jika kita melihat
respon sejumlah besar JSON bahwa kita diakses akhirnya dengan
ini garis sederhana di sini.
>> Data yang didapat dari server.
Harga merupakan nama kunci yang saya peduli.
Jadi data.price memberi saya itu.
>> Sekarang sementara itu, dan ini adalah contoh terakhir.
Anda dapat melakukan lebih banyak lagi dengan halaman.
Satu sebenarnya, baik dua.
Kita bisa membawa kembali tag, jika Anda ingat ini.
Itu JavaScript.
Kita bisa melakukan itu.
Sangat menarik.
Kami akan meninggalkan bahwa sebagai Cliffhanger.
>> Tapi yang lebih menggairahkan, Anda dapat melakukan hal-hal seperti ini.
Jika saya pergi ke geolocation-1, ternyata bahwa Chrome tahu bahwa kita berada di
lintang bujur 42.37. -71,10.
Jadi ada lebih ada Anda inginkan.
Tetapi lebih pada minggu depan.
Sampai jumpa hari Senin.