ROB Bowden: ini adalah bagian lebih nyaman, tetapi itu tidak berarti bahwa jika Anda merasa seperti Anda tidak lebih nyaman Anda tidak akan belajar hal-hal di sini. Jadi mari kita mulai. Apakah Anda memiliki slide akan langsung ke hal. Apakah saya akan hanya mengambil sekarang? Switching laptop. ALLISON: Anda tidak ingin memperkenalkan diri, Rob? ROB Bowden: Oh, aku Rob. Ini adalah tahun kelima saya TF-ing CS50. GABRIEL: Aku Gabriel. Aku kepala TF dari CS50. Aku TF tahun lalu dan tahun ini. ALLISON: Dan aku Alison, dan ini adalah tahun kedua saya TF-ing CS50. ROB Bowden: Baiklah, jadi hal ini di sebelah kiri, mudah-mudahan Anda pernah melihat itu sebelumnya. Jika tidak karena Anda download untuk diri sendiri, Anda harus melihatnya dalam kuliah. Jadi ini adalah alat CS50, dan dia melakukan sedikit dari deskripsi itu dalam kuliah. Tapi pada dasarnya itu hanya Anda sedang menjalankan operasi sistem dalam operasi Anda sistem sehingga kami dapat memberikan program tanpa perlu khawatir, oh apakah ini akan bekerja pada kedua Windows dan Mac, atau jika beberapa dari Anda sudah menggunakan Linux, Linux. Hanya saja seharusnya menjadi bermain umum bidang sehingga setiap orang memiliki lingkungan yang sama persis. Jadi jika Anda belum download ini sudah, Anda harus men-download, karena kau akan membutuhkannya untuk set masalah. Dan itu adalah dua gigabyte men-download, jadi mungkin butuh waktu. Di Harvard itu akan pergi cepat. Alat Jadi CS50. Sekarang di awal, kita akan berbicara tentang hanya sekelompok baris perintah barang, dan sebagainya dengan itu, maksud saya bekerja dalam lingkungan kecil ini di sini. Dan perhatikan semua hal Saya katakan di sini sekarang akan bekerja jika Anda dalam terminal dalam alat, atau jika Anda berada di dalam jendela terminal gedit dalam alat. Jadi lingkungan-lingkungan yang identik. Tapi aku akan pergi rute ketiga. Dan perhatikan di sini ini alamat IP kecil di sini. Jadi Anda tidak perlu melakukan hal ini, tapi IP ini address-- jika Aku-- kecuali itu diblokir oleh hal ini. OK, sehingga alamat IP lebih dalam terminal sini-jadi terminal ini lebih di sini adalah terminal di Mac saya. Jadi ini sama sekali tidak saat ini terkait dengan alat sama sekali. Dan jika Anda berada di Windows, maka Anda akan perlu men-download sesuatu khusus untuk ini, khususnya orang cenderung menggunakan Putty, P-U-T-T-Y. Jadi apa yang akan saya lakukan adalah mengetikkan SSH dan kemudian alamat IP. Nah, jharvard pada alamat IP. Jadi 192.168.24.220. Pesan menakutkan ini, mengabaikannya. Ketik saja ya. Ini adalah CS50 dalam sebuah kotak. Meminta password Anda. Dan dalam banyak konteks ini di mana itu meminta password, [tak terdengar]. Kami punya banyak pertanyaan di mana ia mengatakan itu tidak benar-benar mengetik. Ini tidak menampilkan karakter password saat Anda mengetik, jika ada, untuk fitur keamanan, karena jika seseorang melihat melewati bahu Anda dan mereka melihat bintang bintang bintang bintang, maka mereka tahu bahwa password Anda adalah empat karakter. Jadi idenya adalah ia akan meminta kata sandi anda, jenis. Ini tidak akan menunjukkan Anda karakter, tapi itu benar-benar menerima mereka. Dalam hal ini, setiap kali Anda pernah melihat password prompt berurusan dengan alat, sandi akan menjadi merah. Jadi crimson. Dan sekarang di sini dalam hal ini window yang ada di Mac saya, Saya pada dasarnya memiliki pandangan yang sama persis sebagai dalam terminal di alat. Jadi Anda tidak perlu melakukan ini. Anda dapat melakukan segala sesuatu yang Anda inginkan di dalam alat. Aku hampir tidak pernah benar-benar melakukan apa pun di alat. Saya hampir selalu meminimalkan itu dan sekarang Aku SSH bekerja ke dalam alat. Jika ada, jika Anda memiliki komputer lebih lambat, Anda mungkin melihat perbedaan. Saya melakukan ini karena saya lebih memilih jendela terminal ini. Ini memiliki beberapa fitur seperti Saya dapat membagi jendela, dan sekarang saya bisa SSH di melalui alat. Aku punya dua SSH yang terjadi sekaligus. Jika komputer Anda sangat lambat dan Anda bekerja di alat, dan Anda menyadari hal ini adalah benar-benar laggy, apa pun. Cenderung lebih cepat jika Anda SSH-ed di. Tapi jika tidak, anda dapat bekerja dengan cara baik. AUDIENCE: Apa SSH artinya? ROB Bowden: kerang Aman, sesuatu seperti itu? Apa artinya SSH? GABRIEL: shell aman. ALLISON: Ini shell hanya aman. ROB Bowden: shell aman. Ini adalah protokol yang you-- itu protokol aman, jadi dienkripsi. Orang tidak bisa mengintip jaringan dan melihat apa yang Anda katakan untuk apa pun Anda SSH-ed untuk. Dan pada kenyataannya, di dahulu hari CS50, sehingga pada tahun 2009 ketika saya masih seorang mahasiswa, cara yang Anda bekerja pada CS50 masalah set, adalah Anda SSH-ed beberapa server bahwa kami memberi Anda akses ke, dan Anda bekerja di sana. Jadi Anda tidak memiliki ini alat grafis. Anda tidak memiliki gedit. Anda tidak memiliki semua hal-hal yang Anda bisa secara visual titik dan klik. Anda harus bekerja di interface ini. Saya lebih suka bekerja di interface ini. Jadi bagian dari apa yang akan kita untuk pergi ke lebih dari sekarang adalah sekelompok orang perintah bahwa Anda harus mulai mendapatkan akrab dengan sebagai Anda pergi bersama dalam kursus. Dan jujur, setelah Anda terbiasa dengan mereka, itu jauh lebih cepat untuk bekerja di lingkungan ini daripada untuk bekerja dengan finder, menyeret dan mengklik sesuatu. Jadi di sini kita. Sekarang aku hanya SSH-ed in, dan sebagainya default yang lokasi Anda melihat beberapa perintah dalam kelas, namun kami akan pergi ke semua dari mereka lagi. Lokasi default kami di adalah direktori home. Dan direktori, hanya kata lain untuk folder. Jadi kita berada di direktori home. Ketik ls, daftar file dalam direktori ini. Jelas saya membuat blah.c sebelumnya. Jadi kita memiliki direktori desktop yang. Anda melihat penyorotan sintaks? Warna biru muda menunjukkan direktori dan putih lurus menunjukkan hanya file biasa. Jadi ada akan menjadi beberapa warna lain yang Anda lihat. File eksekusi mungkin akan untuk menjadi hijau atau sesuatu seperti itu. OK, jadi kami berada di direktori home. Sekarang jika saya ingin pergi ke yang berbeda direktori, cd adalah perintah yang saya inginkan. Jadi mengubah direktori, dan kemudian Anda lulus nama direktori bahwa Anda ingin pergi ke. Jadi di sini kita memiliki empat pilihan. Aku bisa masuk ke download, dan sekarang kita melihat di sini telah diperbarui ini disisipkan mengatakan saya di ~ / downloads. Jadi apa yang tilde? Ini adalah singkatan untuk direktori home Anda. Jadi hampir semua yang Anda lakukan akan menjadi sehubungan dengan direktori home Anda, dan pwd hanya perintah Saya menggunakan sekali dalam setahun yang hanya mencetak direktori saat ini. Dan Anda lihat di sini bahwa ~ / Download benar-benar menyelesaikan ke / home / jharvard / download. Jadi / home / jharvard adalah direktori rumah saya. Jadi kita bisa cd dot dot. Sekarang dot dot adalah direktori khusus yang selalu mengacu pada satu direktori up. Jadi jika saya di ~ / download, maka cd dot dot akan membawa saya untuk tilde. Apa yang kita pikirkan cd dot dot akan membawa saya ke saat ini? Ini akan membawa saya ke / home. Jadi tilde oleh cetak direktori kerja, Aku sudah di / home / jharvard. satu direktori up itu, sekarang mengatakan di sini / home. Sekarang cd dot dot. Sekarang aku di direktori root, dan Anda tidak dapat melakukannya lagi. Anda akan hanya tinggal di direktori root selamanya. Direktori root memiliki sejumlah besar hal-hal yang, jika Anda ingin melihat ke dalam, Anda bisa. Sebagai contoh, jika saya pergi ke tempat sampah, yang berisi semua binari tersebut, seperti ls, dan cd, dan semua hal-hal. Jadi perintah ini harus ada di suatu tempat dalam sistem, dan itu adalah di direktori / bin. Tapi hampir semua yang Anda lakukan adalah akan dari direktori home Anda. Dan cd tanpa argumen apapun, Anda bisa mengatakan cd ~, tidak perlu. cd akan membawa Anda kembali ke direktori home Anda. Satu yang terakhir. cd - akan membawa Anda kembali ke direktori terakhir yang Anda berada di. Jadi aku hanya cd'd dua kali berturut-turut, jadi saya Direktori yang terakhir adalah direktori home. Jika saya pergi untuk memangkas bin, dan sekarang mari kita naik dan menjadi user. Share pengguna. Mari kita pergi ke pangsa pengguna. Sekarang aku sekarang dalam pangsa pengguna. cd -, kembali bin. Jadi ini akan sangat berguna ketika Anda have-- dan itu akan beralih. Jadi pengguna berbagi, kembali bin, pangsa bin. Jadi ini akan berguna. Anda mungkin menemukan diri Anda memiliki banyak, banyak, banyak direktori bersarang. Dan Anda ingin melakukan sesuatu cepat nyata dalam direktori atas. Anda pergi ke direktori tersebut, membuat perubahan dan hal-hal seperti itu, dan sekarang Anda ingin pergi kembali ke tempat Anda. cd -. Aku selalu frustrasi ketika saya kebetulan pergi ke direktori saya ingin melakukan pekerjaan di. Saya selalu merasa frustrasi ketika aku dalam dua langkah, bukan satu langkah, karena itu berarti cd itu - akan untuk membawa ke lokasi tersebut antara bukannya di mana saya ingin pergi. Jadi kita melihat semua file daftar. Kita tahu bagaimana untuk mendapatkan sekitar sejauh ini. Jadi sekarang mari kita bicara tentang mengedit file. Jadi dalam kursus ini, Anda hampir selalu diharapkan untuk menggunakan gedit. Jika Anda ingin, Anda dapat mengambil langkah berikutnya dan mulai belajar teks baris perintah Editor. Jadi berbagai pilihan yang ada. Dan orang-orang yang mungkin akan relevan bagi Anda, kita memiliki Nano, Vim, dan Emacs. Jadi Nano adalah pemula baris perintah editor teks. Jadi Nano mari kita pergi blah.c saya buat sebelumnya. Hanya saja ini file C standar. Dan Anda melihat sejumlah besar barang terjadi di bagian bawah layar, dan tampaknya blah.c berisi kode C ini. Jadi dalam editor tertentu, apa itu mengatakan di bottom-- sekarang simbol tanda sisipan ini, kita melihat ini ^ G, ^ X, ^ O. Sehingga di hampir semua konteks yang Anda lihat, Anda mungkin melihat bahwa simbol tanda sisipan di tempat-tempat lain secara online, pada Stack Overflow, sesuatu seperti itu. Ini hampir selalu mengacu untuk mengontrol. Jadi untuk keluar yang ingin saya lakukan Kontrol X. Kontrol X, keluar. Dan saya dapat menggunakan panah saya kunci untuk bergerak di sekitar. Perhatikan saya tidak bisa menunjuk dan klik mudah. Anda perlu menggunakan panah Anda kunci untuk bergerak di sekitar. Mungkin ada pengaturan untuk titik dan klik. Tapi mari kita membuat beberapa perubahan. Sekarang Kontrol X untuk pergi keluar. Ini akan mengatakan Hemat penyangga dimodifikasi. Sekarang prompt, y untuk yes, n untuk no. Kontrol C untuk membatalkan. Aku hanya akan mengatakan ya. Nama untuk menulis file. Standarnya adalah file bahwa sudah ada. Tekan Enter. OK. Sekarang aku baru saja diedit file itu, menyimpannya, dan itu berubah. Jadi Nano adalah yang paling mudah editor teks terbiasa. Alternatif adalah Vim dan Emacs. Mereka adalah tingkat yang lebih tinggi editor teks yang memiliki kurva belajar yang sangat curam. Jadi preferensi pribadi saya adalah Vim. Dan memiliki berbagai macam pilihan. Dan sekali Anda terbiasa untuk itu, Anda tidak akan pernah ingin pergi ke lain editor teks karena Anda hanya memiliki begitu banyak hal tersedia bagi Anda di ini, namun butuh benar-benar waktu lama untuk belajar. Jadi mungkin Anda hanya ingin memaksa diri Anda sekarang untuk mendapatkan digunakan untuk itu, tapi aku akan mengatakan itu worth it. Tetapi sulit. Dan kemudian Emacs. Saya selalu berjuang di Emacs karena Aku tahu bagaimana melakukan apa-apa. Rupanya Emacs tidak secara default diinstal pada alat. Kami mungkin akan menambahkan bahwa sebagai instalasi default. Setelah Anda mempelajari salah satu Vim atau Emacs, ada ada alasan kuat untuk pernah belajar lainnya, tetapi itu adalah gaya yang sama sekali berbeda. OK jadi itu mengedit file teks. AUDIENCE: Jika Anda terjebak di Vim sekarang, bagaimana we-- ROB Bowden: Ada beberapa mode di Vim, dan ada seluruh tutorial belajar Vim. Jadi jika Anda kebetulan berada dalam mode insert dalam rangka untuk mengetik teks, yang dapat Anda masukkan bahwa dalam berbagai cara, tetapi saya adalah bagaimana Anda masuk ke modus insert. Atau keluar dari setiap khusus Modus yang Anda berada di, hanya melarikan diri. Dan Anda hanya menampar Escape untuk mendapatkan dari setiap mode bersarang di Anda. Hanya OK, sekarang aku kembali dalam mode normal. Dan dalam mode normal, titik dua. Anda melihatnya muncul di bagian bawah. Dan kemudian q. Jadi q akan berhenti jika Anda telah membuat perubahan, yang Aku-- Aku telah membuat perubahan? Saya telah membuat perubahan rupanya. Jadi jika Anda telah membuat perubahan, itu akan mengatakan Anda dapat menempatkan tanda seru. Aku akan menyebutnya sebuah ledakan. Sehingga Anda dapat menempatkan larangan untuk hanya keluar tanpa melakukan apa-apa, atau wq usus akan menyimpan dan keluar. Jadi w pada umumnya adalah menulis. Jadi menulis file. Saya bisa menulis dan berhenti. Atau Anda bisa saja qx slam, q Bang hanya untuk keluar dari sana tanpa setiap perubahan yang Anda buat. Baiklah, jadi sekarang mari kita go-- kita dapat membuat file. Mari kita mulai menghapus file. Dan aku hanya akan melemparkan dalam satu perintah baru cepat, sentuh. Jadi menyentuh foo. Bar Touch. Sentuh baz. Jika saya ls, sekarang kita melihat bahwa file-file yang ada. Mereka benar-benar kosong. Jadi sentuh hanya mudah cara satu, [tak terdengar]. Dua, secara teknis hanya untuk negara itu, itu update cap waktu. Jadi setiap file yang Anda buat memiliki timestamp yang terkait dengannya. Jadi baz dibuat pada September 14 at 16:21. Sekarang 16:22, jadi jika Aku menyentuh baz lagi, kita melihat baz yang paling baru-baru ini diubah pada 16:22. Tapi kalau tidak aku hampir tidak pernah melihat cap waktu pada file. Jadi sentuhan, di sini aku hanya menggunakan untuk membuat beberapa file cepat. Baiklah, jadi sekarang rm adalah perintah yang kita peduli tentang di sini. Dan kita dapat rm boo. Katakanlah menghapus reguler kosong berkas boo. Dan kita dapat mengetik y, dan sekarang Menghapus. rm baz. Hapus file kosong biasa baz dan jenis n untuk no. Sekarang itu tidak dihapus. Jadi bar dan baz masih ada. Foo hilang. GABRIEL: Terus bicara. ROB Bowden: Great. Jadi pesan menjengkelkan sini, hapus empty-- biasa apa yang kamu lakukan di sana? Hapus file kosong biasa. Jadi jika kita tidak ingin menjadi terganggu oleh pesan itu, kita dapat melempar -f ini bendera, dan jadi itu kekuatan. Dan sekarang jika saya rm -f, itu tidak akan mengatakan apakah Anda ingin menghapus file ini. Itu hanya akan melakukannya. Dan ls, saya tidak melihat bar sana lagi. Sekarang adalah berpotensi perintah berbahaya. Hal ini cenderung untuk tidak terlalu buruk. Kami akan kembali dalam detik bagaimana itu bisa sangat berbahaya. Dan mari kita membuat beberapa direktori temp. mkdir, perintah lain. Jadi mkdir adalah perintah yang membuat direktori. Dan sekarang dengan ls kita melihat cahaya ini bagus biru disorot direktori temp. Aku bisa cd ke temp. Dan aku bisa mkdir foo. cd ke foo. mkdir bar. cd ke bar. Jadi kita melihat kita dapat dengan mudah mendapatkan ke dalam beberapa bersarang cukup mendalam. Sekarang bagaimana cara menghapus direktori? rmdir. Jadi jika saya hanya lurus mencoba untuk rm, seperti yang kita lakukan dengan file biasa, rm bar akan mengatakan tidak dapat menghapus bar. Ini adalah sebuah direktori. Ada perintah khusus untuk menghapus direktori, jenis. Bar sehingga rmdir. Sekarang bar hilang. OK, jadi rmdir saya cukup banyak tidak pernah menggunakan. Alasan sekarang being-- mari membuat file bar biasa di sini. Boo Jadi rmdir. rmdir. Gagal menghapus foo. Direktori tidak kosong. Jadi Anda tidak dapat menggunakan menghapus dir pada direktori yang memiliki hal-hal di dalamnya. Jadi Anda memiliki beberapa pilihan. Anda dapat masuk ke direktori tersebut, hapus semuanya secara manual, dan kemudian keluar dan rmdir direktori. Itu jelas terdengar menjengkelkan. Bagaimana jika ada ribuan file di sana? Nah, Anda bisa rm *. Kita akan berbicara tentang * dalam detik. Ini pada dasarnya berarti semua hal. Tapi lebih baik lagi, r sehingga rm. Jadi rm -r-- dalam banyak konteks, r berarti rekursif, yang kita akan berbicara tentang apa yang cara rekursif dalam beberapa minggu. Tapi pada dasarnya berarti melintasi keseluruhan direktori ini dan menghapus segala sesuatu. Jadi rm foo r yang akan dikatakan turun ke direktori foo? Ya. Hapus biasa kosong berkas foo / bar? Ya. Hapus direktori foo? Ya. Jadi sekarang foo dan segala sesuatu di dalamnya telah dihapus. Sekarang yang bisa sangat mengganggu when-- mari kita sentuh 1, sentuh 2, sentuh 3. Bisa memiliki sejumlah besar file. Jika saya ingin, saya bisa menciptakan ribuan file di sini. Dan rm foo r akan menjadi cukup menjengkelkan. Ya, ya, ya, ya, ya, ya. Dengan lebih banyak file yang Anda cepat melihat berapa kali Saya harus mengetik ya. Yah, kita hanya melihat sebelum bagaimana kita bisa menyingkirkan perlu mengetik ya, -f. Jadi mkdir foo cd foo sentuh 1 2 3. OK, jadi rm foo rf akan membabi buta menghapus foo seluruhnya. Tidak ada prompt. Tidak ada apa-apa. Foo hilang. Jadi saya cenderung untuk menggunakan ini perintah sepanjang waktu. Yang mengatakan, itu adalah perintah yang sangat berbahaya, karena jika saya melakukan sesuatu seperti ini, tidak akan meminta Anda. Itu akan hilang. Dan itu terjadi cukup sering, dan bahkan di tingkat yang lebih tinggi program CS. Kadang-kadang kita akan melihat sesuatu di mana seseorang bilang aku sengaja rm kami rf-ed rumah saya direktori dan semua P set saya hilang. Dan itu menghancurkan, tetapi tidak ada tempat sampah. Ada tidak ada tidak ada bagi Anda untuk mengambil. Hanya saja pergi. Lebih buruk lagi akan sesuatu seperti rm -rf /. Jadi kita hanya dibahas direktori root. Ini memegang semua file di sistem anda. Hal cenderung jadi sangat berantakan ketika Anda menghapus hal-hal seperti ls, dan cd, dan semua dari mereka. AUDIENCE: Apa bedanya antara rm, rf, dan rm * ROB Bowden: Jadi rm * - ALLISON: Pertanyaan adalah apa perbedaan antara rm, rf, dan rm *. ROB Bowden: Jadi rm *. Bintang di sarana umum semua isi direktori ini. Berusaha untuk memikirkan lainnya cara menampilkan bintang. Nah, bintang sebenarnya umum berarti cocok dengan pola apapun. Jadi jika saya memiliki sebuah file yang bernama dog1, menyentuh dog2, sentuh cat1, sentuh Cat2. Jadi ls * 1 akan mencetak cat1 dan dog1, karena bintang yang dapat diisi di with-- satu kebutuhan untuk berada di sana, tapi bintang dapat berupa kucing atau anjing. Ini adalah kartu liar. Itulah kata yang saya cari. Wild card. Atau aku bisa ls anjing *, dan Aku harus melihat dog1, dog2. Jadi mereka adalah daftar file dan sesuai dengan pola tertentu. Anda dapat menggunakan ls dengan cara ini. Ls * bintang pertandingan apa pun. Jadi itu akan mencetak semua isi direktori ini karena semua dari mereka cocok. Ini tidak akan mencetak apa-apa di direktori tingkat atas. Jika saya memiliki sub direktori, foo, dan menyentuh 1 2 3-- jadi jika rm * bintang, menghapus cat1, Cat2, dog1, dog2. Tidak dapat menghapus foo. Ini adalah sebuah direktori. Jadi Bintang mengembang untuk semua file dalam direktori. Jadi secara teknis rm * seperti mengatakan rm cat1, Cat2, dog1, dog2, foo. Sedangkan rm-rf, secara teknis star akan mencapai apa yang kita inginkan, tapi rm -rf-- jika aku pergi keluar dari ini direktori, rm-rf suhu, yang akan masuk ke temp dan rekursif menghapus semuanya. Jadi Bintang terpisah di bahwa dipahami by-- sehingga hal ini bahwa aku berjalan di, hal ini yang mendorong saya untuk perintah dan kemudian melaksanakan dan melakukan mereka, saya menyebutnya shell saya. Dan shell ini sendiri program. Dan jika saya ingin, saya bisa berjalan di / bin / bash. Shell disebut bash. Dan sekarang kita melihat sesuatu telah sedikit berubah, dan itu karena setting saya untuk shell agak berbeda. Tapi sekarang aku teknis berjalan shell dalam shell asli saya, dan aku bisa keluar shell itu, dan sekarang Aku kembali ke shell tingkat atas saya. Tujuan mengatakan yang is-- bintang. Jadi Bintang adalah sesuatu dipahami oleh bash. Jadi rm-rf, rf bendera dipahami oleh hanya rm. Ia tahu bahwa ketika Anda lulus rf yang Anda ingin rekursif menghapus semua file tanpa disuruh. Bintang tersebut sesuatu dipahami bash bahwa ketika Anda mengatakan rm *, bash tidak akan mengatakan hey rm *, menghapus bintang. Bash akan mengatakan rm * menghapus cat1, Cat2, dog1, dog2. Ini secara otomatis akan memperluas semua file dalam direktori. Dan sama tilde adalah lain simbol yang pesta mengerti. Ketika Anda mengatakan cd ~, bash memperluas bahwa ke direktori home Anda. Pertanyaan lain sejauh ini? OK jadi kita akan mulai terjadi cepat. Tab selesai. Hanya untuk membuangnya di luar sana. Banyak orang tidak menyadari hal ini ada. Jadi jika saya ketik cd dow, saya ingin pergi ke download. Saya tidak perlu mengetik nloads. Aku hanya bisa memukul Tab. Jadi mengakui bahwa dow adalah awalan yang tidak cocok dengan lain di direktori ini, sehingga akan menyelesaikan untuk Anda. Sekarang aku bisa masuk. Saya juga melakukan itu secara rekursif. Foo Jadi mkdir. Mari kita pergi ke foo. mkdir bar. Jadi kembali ke rumah saya direktori, aku bisa melihat download. Sekarang memukul tab lagi, otomatis akan mengisi foo. Ini satu-satunya direktori. Menekan tab lagi, otomatis akan mengisi bar. Jadi sekarang aku di (~ Downloads / foo / bar). Jadi tab completion ini, setiap kali aku harus jam kantor, dan aku berdiri di atas bahu seseorang, dan mereka akan rm D-O W-N-L-O-A-D-S, aku sekarat. Tab Hanya, tab, tab, tab. Jadi pasti digunakan tab. Dan sama dan down, banyak orang Hanya saja terjadi pernah memukul atas dan ke bawah. Ini akan pergi melalui sebelumnya perintah, jadi jika Anda hanya berlari sesuatu, dan Anda ingin menjalankannya lagi, hanya tahan sampai Anda sampai ke sana. OK. Begitu cepat, beberapa hal lain. Mari kita kembali ke temp. Mari kita membuat beberapa file. Jadi di sini, aku hanya akan daftar beberapa kata. anjing, kucing, meong. Mari kita lakukan anjing, ikan. Jadi sekarang rep adalah sangat perintah yang berguna bahwa Anda gunakan untuk mencari seluruh file untuk teks tertentu, dan secara teknis Anda dapat melakukan benar-benar ekspresi kompleks untuk itu untuk mencocokkan. Jadi di sini, jika saya grep, dan apa saya ingin mencari? Katakanlah aku mencari kucing, dan Saya ingin mencari semua file-file ini. Jadi bagaimana saya melakukan semua file-file ini? Bintang. Jadi dalam satu file, saya punya kucing. Aku mungkin bisa memiliki menyebutnya sesuatu yang lebih baik, karena yang terlihat seperti nomor baris atau sesuatu. Tapi dalam satu file saya memiliki garis dengan kucing. Dalam file kedua saya memiliki garis dengan kucing. Jadi sekarang saya bisa melihat ke dalam satu file dan lihat oh yeah, file yang memiliki kucing. File pemberitahuan tiga tidak cocok karena kucing tidak di sana. Aku bisa grep untuk meong. Hanya mengajukan dua memiliki meong. Jadi ini Anda dapat menggabungkan, lagi, dengan r, yang seperti yang saya katakan sebelumnya sering berarti rekursif. Dan jadi aku bisa datang ke sini, grep -r misalnya setiap of-- mari kita mengedit yang satu ini hanya untuk membuang kucing di sana. Jadi grep -r untuk setiap contoh kucing seluruh direktori ini. Dan akan secara rekursif mencari subdirektori. Jadi dalam baz, ada kucing. Dalam temp / 2, ada kucing. Dan di temp / 1 ada kucing. Jadi itu mencari di dalam file. Sekarang Anda juga dapat menggunakan menemukan. Dan menemukan secara khusus tentang mencari file dengan nama yang diberikan. Jadi mari kita membuat beberapa lagi. Mari kita pergi ke download. Sentuh dog1. Sentuh Cat2. Sentuh cat_dog. Sentuh catcat. Jadi saya ingin mencari semua file dengan anjing dalam nama. Jadi menemukan, dan untuk terpanjang waktu aku tak pernah ingat bagaimana menemukan bekerja, sampai akhirnya aku membaca sesuatu yang membuatnya begitu jelas. Jadi menemukan, otomatis rekursif. Anda tidak harus lulus r a. Jadi menemukan titik. Kami belum berbicara tentang titik belum. Sedangkan dot selalu dot berarti satu direktori up. Dot selalu berarti direktori saat ini. Jadi saya bisa rm dot-r di cara yang sama saya dapat rm-rf *. Pada akhirnya mereka mencapai hal yang sama. rm -rf dot akan menghapus seluruh direktori saat ini. OK, yang saya tidak mau lakukan di sana. Tapi menemukan titik. Jadi secara rekursif mencari saat direktori, dan sekarang semuanya setelah ini adalah sekelompok bendera yang gunakan untuk mengecualikan hal-hal dari return. Jadi menemukan titik mengembalikan segala sesuatu yang dapat menemukan dari direktori saat ini. Mereka adalah semua file rekursif mencari. Kita akan melihat beberapa dari mereka dalam detik. Tapi dalam kasus Anda bertanya-tanya bagaimana saya melakukannya itu, jadi Komando K, setidaknya di terminal saya di Mac membersihkan itu. Kontrol L umumnya membersihkan untuk segala macam terminal. Anda juga dapat mengetik jelas. Dan jika Anda pernah mendapatkan menjadi scenario-- aneh itu terjadi padaku pasangan time-- dimana warna prompt Anda semua kacau, atau Anda tidak dapat melihat apa-apa sedang diketik ketika Anda mengetik, karena kadang seperti warna latar belakang disetel sama dengan warna foreground dan sekarang Anda tidak dapat melihat font. Ulang adalah sesuatu yang hanya me-reset Anda ke default latar belakang hitam, depan putih, atau apa pun Anda mengatur mereka untuk. Jadi di mana kita? Cari titik. Jadi sekarang semuanya melewati ini Titik membatasi hasil sesuatu yang cocok pola yang diberikan. Jadi di sini saya ingin mencari segala sesuatu dengan nama kucing. Aku punya apa-apa. Mengapa hal itu terjadi? Yah, aku hanya mencari sesuatu dengan tepat nama kucing. Jika saya ingin mencari sesuatu yang memiliki beberapa pola, dan cat-- tanda kutip teknis tidak diperlukan, tapi aku melemparkan mereka di sana. Jadi sekarang ia menemukan catcat karena itulah satu-satunya hal yang memiliki beberapa sewenang-wenang Pola diikuti oleh kucing. Saya dapat menempatkan kucing *, dan sekarang menemukan catcat, cat_dog, Cat2, karena mereka adalah segala hal dengan kucing pada awal diikuti oleh apa pun. Anda dapat menggabungkan ini. Jika Anda ingin mencari semua file C yang Anda miliki, yang mungkin Anda lakukan * .c. Kami telah blah.c sini. Jadi itu menemukan karya. Anda dapat mencari. Ini memiliki sejumlah besar bendera untuk pembatasan lebih lanjut. Dan satu pada mereka, katakanlah -d. Jadi usang. Oh, bukan itu yang saya inginkan. Tidak -d. Jenis d. Jadi menemukan dot - Jenis d. Jadi apa yang baru saja lakukan adalah aku mencari untuk semua file dalam direktori saat ini dengan a-- d singkatan directory-- Jenis direktori. Ini mengembalikan semua direktori di direktori saat ini. Dan tipe F adalah semua biasa file, semua direktori non. Jadi itu hanya sebuah contoh cara lain Anda dapat membatasi pencari lainnya dari sekedar nama file. Sudah 30 menit. Masih terjadi. ALLISON: Aku akan angin melalui. Ini akan baik-baik. ROB Bowden: Jadi beberapa hal lain. Sekarang Bang, tanda seru. Sehingga pada umumnya means-- baik, mari kita lihat contoh. Jadi! F, apa yang yang akan dilakukan? Yah tampaknya memiliki diulang menemukan dot -type f. Bagaimana! G? Itu hanya grep kucing r *. Jadi Bang dapat Anda gunakan untuk mengulang perintah baru-baru ini dilakukan. Jadi jika saya ketik! Gre, itu akan kembali berjalan perintah yang dimulai dengan gre paling baru-baru ini. Dan Anda bisa melihat semua ini perintah dengan sejarah. Jadi sejarah. Ini semua perintah aku sudah menjalankan hari ini. Dan juga, itu tidak benar-benar terbatas pada hari ini, tapi aku hanya menggunakan ini alat untuk hari ini. Ini keseluruhan Anda dari sejarah shell bash Anda, kecuali itu memotong di beberapa titik. AUDIENCE: Apa yang terjadi jika Anda lakukan Sejarah [tidak terdengar] perintah dan kesalahan dalam hasil masih akan mencetak the-- ROB Bowden: Ya, jika ada kesalahan dalam salah satu commands-- ini jadi mari kita katakan, yang merupakan Perintah kesalahan tidak ditemukan. Masih muncul dalam sejarah. Baik. Pertanyaan lain pada apa pun? Jadi itu Bang. Sekarang, perintah yang benar-benar berguna, man. Sehingga memberikan Anda Panduan untuk perintah yang diberikan. Jadi katakanlah ls manusia, sehingga ini menunjukkan saya ls. Itu daftar isi direktori. Dan ini adalah di mana saya melihat bahwa ada adalah berbagai bendera yang ada. Jadi kita lihat bahwa Ls-l ada jika kita membaca itu. ls-l memberi saya daftar lengkap ini dari direktori dengan yang memiliki file tersebut, ukuran file, timestamp dimodifikasi. Jadi ls -a adalah salah satu lain yang Anda mungkin benar-benar menggunakan agak sering. -al adalah saya bendera paling umum ini ls terakhir. Jadi -a, melihat ada banyak lebih banyak file dari sekedar ls. ls-a. Apa kesamaan dengan semua file-file ini? Mereka mulai dengan sebuah titik. Jadi ini adalah sebuah konvensi di Linux yang file yang dimulai dengan sebuah titik yang tersembunyi. Jadi itu hanya berarti bahwa ketika kita hanya ls lurus, atau kita mencari direktori ini menggunakan setara finder, atau Windows Explorer setara, bahwa kita tidak ingin melihat ini dot file. Mereka hanya mencemari pandangan hal. Jadi mereka tersembunyi kecuali Anda secara khusus meminta mereka dengan sesuatu seperti -a. Jadi saya bisa cd ke Setempat, dan saya melihat bahwa itu adalah dirinya sendiri sebuah direktori dengan direktori bersama, dan aplikasi, dan bla bla bla. Jadi dot, file mereka hanya tersembunyi. OK, yang penting sehingga lainnya. Saya memiliki beberapa saya dapat melewati. Mari kita nyata bicara singkat tentang hal-hal berkas pengalihan. Jadi ada serangkaian kompleks hal yang dapat Anda lakukan dengan ini, tapi hanya untuk melihat mereka, katakanlah, gema. Perintah lain. Perintah benar-benar bodoh. Semua hal ini adalah apa yang saya cetak kirim ke. Jadi gema halo. Itu hanya menggema menyapa layar. Halo dunia. Echoes hello world. Jadi satu perintah atau satu simbol bahwa pesta mengerti apakah ini lebih besar dari simbol, dan itu adalah output ke simbol berkas. Jadi jika saya output ini untuk foo, sekarang ada file disebut foo, dalam yang hello world. Jadi melihat bahwa ketika Aku echo halo pipa dunia ke foo, itu tidak gema hello world. Sebaliknya itu dimasukkan ke dalam file foo. Dan perintah lain hanya untuk membuangnya pada Anda, kucing. Itulah cara mudah untuk hanya benar-benar daftar isi file sehingga saya tidak perlu membuka editor teks untuk melihatnya. Jadi isi File foo adalah hello world. Dan aku bisa kucing blah.c, isinya ini. Sekali lagi, ini adalah perintah itu, bukan berharap Anda memiliki mereka semua hafal. Idenya adalah Anda telah melihat mereka. Mungkin Anda bekerja pada sesuatu, dan Anda seperti aku muak membuka file ini. Saya berharap saya bisa melihat di isi dengan cepat. Anda bisa melakukan itu, maka melihat ke belakang dan mengatakan oh saya ingat sesuatu seperti yang ada, dan itu kucing. Sehingga akan file. Sekarang ada tidak benar-benar ada gunanya contoh membaca dari sebuah file belum. Apa sesuatu yang membutuhkan sesuatu dari standar dalam? Setiap perintah sederhana Linux? Ketika kita sampai ke sana, di pasangan minggu semua piece-- baik, minggu ini Anda memiliki sepotong di mana Anda mulai mengambil input dari user. Dan biasanya Anda mengetik bahwa masukan pada keyboard. Alih-alih mengetik yang masukan pada keyboard, Anda malah dapat pipa dalam dari sebuah file sehingga ketika Anda melakukan Mario, ./mario, pipa di dari setiap file yang diberikan, dan itu akan menjalankan program mario. Tidak mengharapkan masukan pada keyboard, bukan itu hanya akan membaca baris dari file foo. Jadi lebih besar dari foo menempatkan ke file foo, dan kurang dari foo mengambil barang-barang dari file foo dan menggunakan itu sebagai masukan untuk program ini. Dan hanya untuk melihatnya, kami juga bisa menggemakan foo bar baz, dan kemudian bukan satu lebih besar dari, mari kita lakukan dua menjadi foo. Apa yang dilakukan? Itu hanya menambahkan ke file. Jadi, bukannya melihat jika saya menggemakan bla ke foo dan kemudian kucing foo, itu hanya bla. Jadi, ketika Anda output ke file, benar-benar menimpa file itu. Jika Anda hanya ingin menambahkan, double [? grader. ?] Dan terakhir adalah pipa. Pipa Mendapat jauh lebih rumit, di mana dibutuhkan output dari satu perintah dan feed ke dalam perintah selanjutnya. Jadi beberapa hal yang lazim, sejarah. Jadi, ugh, saya tidak ingin melihat ini. Tunjukkan semua perintah dalam sejarah saya di mana saya grep-ed untuk sesuatu. Tidak, itu membingungkan. Tunjukkan semua perintah di mana saya menemukan. Semua menemukan perintah yang pernah saya berlari. Jadi sejarah. Sekarang output sejarah ke layar daftar ini perintah, tapi saya tidak ingin output ke layar. Sebaliknya aku akan pipa ke grep. Jadi mari kita grep untuk semua contoh find. Jadi sekarang bukannya mengambil grep input, bukan of-- grep mampu menangani sebagai input-- kami menggunakan grep sedikit berbeda di sini. Jadi, bukannya mengetik daftar hal yang kita ingin mencari dan mengatakan grep mengambil sebagai masukan. Jadi jika saya hanya grep menemukan, menunggu bagi saya untuk mengetik sesuatu. Jadi kucing halo menemukan. Hello. Cari. Perhatikan setiap kali saya ketik menemukan mengakui bahwa saya mengetik menemukan. Jadi, bukannya ini, akan mencari data untuk menemukan. Jadi sejarah sekarang akan Output daftar semua perintah. Kami menempatkan output yang, dan kita makan itu grep, dan itu menyemburkan semua contoh find. Alasan saya mengatakan itu akan membingungkan adalah jika Aku-- itu masih membingungkan. Jika saya grep untuk grep. Perhatikan itu cukup banyak selalu menunjukkan perintah saya hanya berlari karena perintah yang sendiri memiliki grep di dalamnya. OK, jadi pertanyaan pada apa pun? Dan aku akan transfer lebih dari pada saat ini. Semoga ini menjadi bagus gambaran dari semua perintah bahwa Anda tidak perlu memiliki hafal, tapi ini membuat solid 95% dari apa yang saya dilakukan pada baris perintah. Juga perlu diingat bahwa baris perintah itu sendiri, bash adalah bahasa pemrograman, dan jadi ketika Anda turun ke sana, Anda mungkin ingin melakukan hal-hal yang benar-benar kompleks. Dan sehingga memiliki hal-hal seperti loop, dan jika, dan semua orang bahwa Anda akan terbiasa dengan dengan bahasa pemrograman Anda. Tapi itu di luar ruang lingkup bagian ini. OK, jadi tidak ada pertanyaan? ALLISON: Tidak ada? GABRIEL: Apakah Anda akan to-- ALLISON: Aku bisa melakukannya pada saya jika Anda ingin. Kita bisa melihat apa yang terjadi. ROB Bowden: Off to Allison. ALLISON: Woo. Kau tindakan keras untuk diikuti, Rob. Apakah Anda ingin saya untuk beralih dengan Anda? Atau Anda punya, OK. Aku akan mencoba dan tidak cukup sebagai panjang di sana. Mari kita lihat apakah akan ini bekerja seperti yang saya inginkan. Mungkin? Haha! Ya. Jadi aku hanya akan sangat cepat pergi melalui variabel, loop, conditional, dan sedikit pada kompilator. Jika Anda memiliki pertanyaan di setiap saat, silahkan menghentikan saya. Orang-orang ini akan mengingatkan saya untuk mengulang pertanyaan Anda dalam kasus saya lupa, tetapi tidak boleh terlalu buruk. Jadi variabel, ya. Kami tidak memiliki salah satu dari Anda Potongan awal di sini. Saya yakin sebagian besar dari Anda, jika Anda punya semacam permainan yang Anda buat dengan Scratch, Anda harus untuk melacak sesuatu seperti skor, atau waktu, atau sesuatu seperti itu. Jadi mereka oranye terang potongan yang kita lihat di sana hanya berupa Scratch dari variabel, dan Anda pasti akan akan menggunakan variabel seluruh program Anda. Jika Anda tidak, aku tidak benar-benar Pastikan apa yang Anda lakukan. Tapi bagaimanapun, hal yang besar, mendefinisikan variabel. Dengan C setiap variabel memiliki untuk memiliki tipe menyatakan, jadi saya memberi Anda sangat umum satu di atas. Jadi Anda akan memiliki Anda ketik dan kemudian apa pun Anda memutuskan untuk memanggil variabel Anda. Jadi dalam hal ini, jenis dalam daftar variabel Anda. Kami memiliki tiga contoh. Char beberapa grade, dari A, yang adalah apa yang Saya yakin Anda semua ingin untuk masuk kelas ini. Anda dapat menentukan beberapa variabel pada satu baris asalkan mereka semua jenis yang sama, yang merupakan contoh kedua kami ada di mana Anda memiliki tiga variabel, x, y, dan z. Mereka semua mengapung. Dan kemudian Anda juga bisa, dalam hal ini yang terakhir Misalnya dengan skor int dan nomor tim, Anda bisa menginisialisasi mereka di sana. Jadi, dalam contoh tengah di mana kita hanya float x, y, dan z, tersebut tidak diinisialisasi belum. Mereka tidak memiliki nilai. Atau mereka memiliki nilai sampah. Dan jika Anda mencoba dan menggunakannya, compiler akan berteriak pada Anda. Anda harus baik menyatakan dan menginisialisasi variabel Anda. Jadi dalam satu terakhir ini, kami melakukan keduanya. Kami menyatakan variabel dari skor dan jumlah tim, dan kami menginisialisasi mereka, memberikan mereka nilai awal mereka 7 dan 4 masing-masing. Keren. Semua orang baik? Mengagumkan. OK, jadi beberapa konvensi. Jika kalian telah membaca melalui gaya 50, ini hanya hal-hal yang kami ingin untuk Anda untuk menerapkan gaya Anda. Nama begitu berarti. Jika Anda mulai menelepon hal-hal hanya x, y, dan z, terutama ketika Anda masuk ke lebih panjang program, Anda mungkin akan membingungkan diri sendiri dan menjadi seperti apa variabel ini mengacu. Aku tidak tahu apa artinya ini. Jadi, jika itu dimaksudkan untuk menahan skor, sebut saja mencetak gol. Jika itu dimaksudkan untuk memegang beberapa jawaban atau hasil, memberikan nama seperti itu. Untuk loop, yang kita akan masuk ke dalam slide berikutnya, variabel huruf-baik saja. ROB Bowden: I, j, dan k adalah hanya konvensi untuk untuk loop bahwa setiap orang mengharapkan mereka disebut i, j, dan k. Anda dapat menghubungi them-- saya melihat baris kolom atau baris panggilan kadang-kadang untuk dua loop bersarang, dan itu juga jenis standar. Tapi i dan j benar-benar dipahami. ALLISON: Yeah, i dan j Anda benar-benar baik-baik saja. Demi kejelasan seperti di beberapa P set Anda, mungkin masuk akal untuk memiliki lebih hal deskriptif di sana hanya untuk melacak itu. Tapi saya pikir i, j, dan k saya pikir sebagian besar dari kita semua digunakan. ROB Bowden: Dengan ini konvensi, sehingga gaya adalah penting. Ini adalah salah satu dari empat sumbu di mana Anda dinilai, dan hal tersebut sangat mudah untuk hanya pergi P Anda ditetapkan pada akhir dan pastikan bahwa tidak ada kesalahan gaya. Jadi pastikan Anda tabbing dengan benar. Pastikan variabel diberi nama. Tinggalkan beberapa komentar. Hal ini sangat mudah untuk mendapatkan titik-titik. Anda tidak harus berpikir tentang apa pun untuk mendapatkan titik-titik. Anda tidak harus mencari apa-apa. Hanya saja sehingga terlihat cantik. ALLISON: Pada kenyataannya, kita memiliki gaya 50, yang akan memberitahu Anda di mana Anda bermain-main jika Anda mengacaukan gaya dan akan memberitahu anda apa yang anda harus memperbaiki dan bagaimana Anda harus memperbaikinya. Hal ini juga hanya baik untuk menyebutkan bahwa itu kebijakan program bahwa jika Anda berada di kantor jam dan kode Anda berantakan, kita dapat menolak untuk membantu Anda sampai terlihat lebih baik. Jadi mulai benar, menjaga gaya konsisten, Anda juga hanya akan membuat hidup Anda jauh lebih mudah ketika Anda mencoba untuk pergi melalui debug. Jika Anda mencoba untuk mencari tahu di mana kau hilang kurung kurawal dan mereka adalah seluruh tempat, Anda hanya membuat hidup Anda sendiri lebih keras. Jadi konsisten dengan gaya. Aku berjanji itu akan membuat hidup Anda lebih mudah. Ini akan membuat hidup kita lebih mudah. Semua orang akan jauh lebih bahagia. Dan itulah yang Anda inginkan. GABRIEL: kelas Anda akan lebih tinggi. ALLISON: Ya, dan kelas Anda. Jika TF Anda seperti Anda, cenderung menguntungkan. Baiklah, dan kemudian hanya titik kedua di sini. Inisialisasi konsisten. Jadi seperti yang kita lihat, Anda dapat mendeklarasikan dan menginisialisasi hal. Beberapa variabel pada baris yang sama. Satu hal yang kami ingin Anda tidak lakukan adalah untuk mendeklarasikan beberapa variabel dan tidak menginisialisasi mereka pada yang sama baris yang Anda menginisialisasi lain. Jadi dalam kasus yang membuat tidak masuk akal sama sekali, kami memiliki contoh di sini di mana kita menyatakan int dalam variabel perempat dimes dan uang, tapi perempat dan uang tidak memiliki nilai awal. Kami belum diinisialisasi mereka, tapi tepat di tengah ada kita sudah diinisialisasi sen menjadi 0. Jadi baik dilakukan perempat, dime, sen. Atau melakukan perempat sama 0. Dime sama 0. Uang sama 0, atau apa pun nilai-nilai awal yang. Hal besar dengan gaya, konsisten. Jika ragu, konsisten. Tetapi mengikuti panduan gaya kita juga. Keren. Semua orang baik di sana? AUDIENCE: Di mana panduan gaya? ALLISON: Panduan Gaya adalah on-- apa website? GABRIEL: Saya pikir itu manual.cs50.net/-- ALLISON: Style? GABRIEL: Style. Yep. ALLISON: Ya. Jadi pertanyaan, di mana gaya 50. manual.cs50.net/style. Ya? AUDIENCE: Jika kita mendefinisikan variabel, apakah OK jika kita menempatkan seperti [tak terdengar] seperti Rata-int dan kemudian int gol. Jadi akan Anda katakan bahwa sekarang kita sudah harus mendefinisikan mereka bersama-sama? ALLISON: Jadi pertanyaan, harus Anda memiliki kode berlebihan ketika Anda mendefinisikan variabel seperti int skor dan pada baris int pertandingan berikutnya? ROB Bowden: Ada pasti kasus di mana kode berlebihan adalah buruk. Saya tidak akan mempertimbangkan bahwa kode berlebihan. Aku hampir tidak pernah menyatakan beberapa variabel pada baris yang sama pernah. Dan jika ada, itu karena biasanya saya meninggalkan semacam komentar menjelaskan apa variabel adalah untuk. Jadi saya akan mengatakan int skor slash slash. Melacak apa pun. Secara total slash slash. Sehingga jauh lebih kotor dengan cara itu untuk menempatkan mereka semua pada baris yang sama. Aku tidak pernah menempatkan mereka pada baris yang sama. ALLISON: Saya merasa seperti itu preferensi pribadi pada saat ini. AUDIENCE: Apakah itu pergi untuk untuk loop dan hal-hal juga? ROB Bowden: Anda suka di dalam? Seperti int i sama dengan 0 koma panjang sama sesuatu? Bahwa Anda tidak punya pilihan. Dengan untuk loop inisialisasi part-- sehingga Anda mungkin hanya melihat int i sama dengan 0 koma i kurang dari titik koma i plus plus apa pun. Itu i int sama dengan 0, secara teknis Anda juga bisa melakukan apa yang kita lihat sebelumnya dengan sintaks koma. int i sama dengan 0 koma j sama dengan 3 koma k sama dengan 5. Anda tidak punya pilihan untuk membagi yang menjadi beberapa baris, dan itu standar. Melihat itu ada baik-baik saja. ALLISON: Awesome. Nah, Shalawat nyaman dalam loop. Jadi ya, di sini kita memiliki beberapa contoh dari loop bahwa kalian lihat di Scratch. Dan tentu saja semua ini hanya dapat diciptakan di C. Dan pada dasarnya mereka memungkinkan Anda untuk mengulang beberapa bagian dari kode sampai kondisi tertentu terpenuhi, yang kita akan masuk ke kanan setelah berbicara tentang loop dengan conditional. Jadi kita memiliki tiga jenis utama. Untuk sementara, dan dilakukan sementara, yang kita semua akan melalui sekarang. Jadi yang pertama adalah untuk loop. Jadi untuk beberapa kondisi, mengeksekusi blok kode. Kami memiliki sedikit keren ini diagram di sini di bagian bawah. Tapi pada dasarnya Anda miliki dalam untuk Anda, bahwa baris pertama, Anda akan menginisialisasi variabel Anda. Jadi seperti yang kita bicarakan, saya adalah sama dengan 0 atau i sama dengan 10. Apa pun yang Anda butuhkan bahwa variabel menjadi itu akan diinisialisasi di sana, menyatakan dan diinisialisasi untuk beberapa nilai. Jadi kita memiliki beberapa Kondisi yang terjadi menjadi memeriksa kami variabel terhadap sesuatu. Jadi dalam kasus kasus yang khas di mana mungkin Anda ingin bagian kode untuk mengeksekusi lima kali. Sehingga kita akan memiliki int i sama dengan 0, dan kami ingin menjadi ketika saya kurang dari 5. Jadi kondisi itu hanya akan memeriksa bahwa setiap kali. Jika kondisi itu bernilai true, itu akan menjalankan kode, yang persis apa diagram kecil ini menunjukkan. Dan sehingga mengeksekusinya. Itu update variabel, yang adalah apa yang kita lihat di bagian terakhir dari untuk kami lingkaran inisialisasi sana. Jadi itu hanya akan terus melakukan hal ini sampai kondisi yang tidak terpenuhi, dan kemudian akan keluar loop dan terus bergerak dengan sisa program anda. Semua orang baik di sana? Keren. Jadi, inilah contoh, sangat mirip untuk sesuatu yang saya hanya berbicara tentang. Jadi kita hanya ingin mencetak ini adalah CS50 10 kali. Jadi Anda lihat di sini kita memiliki untuk kami, dan kemudian kami menginisialisasi variabel i menjadi sama dengan 0. Kondisi kita adalah memeriksa bahwa itu kurang dari 10. Jadi mengevaluasi dengan benar ketika kami pertama kali mulai, dan kemudian update variabel kami setiap kali itu benar-benar mengeksekusi dan print ini CS50. Dan akan berakhir setelah 10 kali. Keren. Jadi sementara loop berikutnya. Dan seperti yang Anda lihat di sini, kita hanya perlu beberapa saat pertanyaan condition-- ini? AUDIENCE: Bagaimana saya bisa melompat sebenarnya hanya tidak satu nomor, tapi dua angka [tidak terdengar] i plus plus plus? ALLISON: Jadi pertanyaannya adalah bagaimana Anda bisa memperbarui variabel Anda dengan lebih dari satu pada suatu waktu. Jadi saya plus plus akan Update per satu setiap kali. Jika Anda ingin memperbaruinya dengan dua, Anda bisa melakukan i ditambah sama 2. ROB Bowden: Apakah Anda melihat ditambah sama dalam kuliah belum? AUDIENCE: [tak terdengar]. ALLISON: Ini secara efektif hal yang sama seperti saya sama i ditambah 2. Jadi itu akan mengambil dan memperbaruinya dengan dua setiap kali. Ditambah sederajat hanya sesuatu kita sebut gula sintaksis. ROB Bowden: Ya, mereka ada untuk hampir semua operator aritmatika. Kali jadi aku sama dengan akan menggandakan jumlah tersebut. j membagi sama 3 adalah sama sebagai j sama j dibagi dengan 3. ALLISON: Atau dikurangi sama 2 akan pengurangan i oleh dua setiap kali. ROB Bowden: Bahkan equals mod. Anda belum melihat operator bitwise, tapi sisipan sama dan ampersand sama, semua orang ada. ALLISON: Jadi banyak kali, terutama dengan pasangan pertama Anda dari P set, Anda akan mungkin incrementing oleh satu, jadi saya plus plus, j plus plus semua hal yang Anda akan untuk biasanya akan menggunakan. Tapi itu kondisi pembaruan sepenuhnya dalam kendali Anda. Anda dapat memperbaruinya dengan pertambahan apapun atau dengan cara apa pun yang Anda memutuskan untuk. Mungkin Anda bahkan ingin menjadi nomor acak kadang-kadang. Tapi ya, ada banyak hal yang bisa dilakukan dengan itu. Anda tidak dibatasi untuk i plus plus. ROB Bowden: Asal Anda tahu itu ada, itu juga ada dalam bentuk lain, plus plus i. Jadi jika Anda pernah mencari online dan kebetulan melihat plus plus i, cukup banyak berarti hal yang sama. ALLISON: Cool. Baik? Mengagumkan. Jadi sementara loop. Sangat mirip. Anda memiliki beberapa kondisi. Hal utama untuk melihat di sini adalah bukan memiliki tiga bagian yang berbeda untuk mengatur, kita memiliki satu. Kami hanya memiliki beberapa kondisi yang sedang diperiksa. Dan dengan cara yang sama, asalkan Kondisi yang bernilai true, kode Anda akan berjalan. Dan jika itu palsu, akan berakhir, bergerak ke bagian selanjutnya dari program anda. Jadi ini adalah jenis like-- apa contoh yang baik untuk memeriksa untuk beberapa kondisi normal? GABRIEL: Sementara benar. ALLISON: Anda bisa melakukan sementara benar. Nah, 1 sama dengan 1. ROB Bowden: Anda dapat melakukan while-- hanya daripada menggunakan untuk loop, Anda selalu dapat kode untuk loop dalam loop sementara, jadi saya lebih besar dari 0 atau sementara aku kurang dari 10. ALLISON: Awesome. Dan kemudian kami telah lakukan sementara loop, yang sangat bagus untuk pengguna validasi, di mana Anda ingin mendapatkan sesuatu dari pengguna Anda, melihat apakah itu valid, dan kemudian melanjutkan dari sana. Jadi salah satu hal yang perlu diketahui adalah dengan lakukan sementara adalah bahwa hal itu akan mengeksekusi, dan kemudian akan mengeksekusi kembali jika kondisi ini terpenuhi. Jadi mungkin cara terbaik untuk melakukan hal ini hanya untuk melihat contoh di sini. Jadi seperti yang saya sebutkan, pengguna validasi benar-benar useful-- atau melakukan sesekali benar-benar berguna dengan validasi pengguna. Jadi ini hanya akan untuk kembali meminta beberapa pengguna sampai mereka masukkan angka positif, yang mungkin berguna untuk P setel minggu ini. Dan dalam hal ini, ketika kita awalnya menjalankan program ini, itu akan mencetak masukkan angka positif. Ini akan mendapatkan beberapa input dari user, dan kemudian itu akan memeriksa bahwa masukan terhadap kondisi bahwa Anda telah ditetapkan untuk itu. Jadi dalam hal ini itu akan memeriksa. Itu akan berkata, OK, adalah masukan kami negatif, atau itu 0 atau negatif, yang akan menjadi tidak valid. Jadi itu akan kembali prompt. Pertanyaan? AUDIENCE: Apakah ini sama maka sebagai while jika Anda hanya menyalin kode yang dan meletakkannya [tak terdengar] while loop? ALLISON: Jadi pertanyaan itu akan ini sama dengan hanya sementara lingkaran jika kita hanya salin while loop di atas. Jadi dalam hal ini, loop sementara Anda akan memeriksa kondisi pertama. Jadi dalam hal ini, jika kita mencoba menulis hanya sebagai loop sementara, itu akan mengatakan saat input kurang dari satu. Tapi kita tidak memiliki masukan untuk itu. AUDIENCE: Jika Anda [tidak terdengar] while termasuk kode ini, tapi kemudian Anda diatasi kode di atas loop sementara juga. Anda hanya memiliki kode ini [Tak terdengar] while loop. ALLISON: Akan hal yang sama, ya. Jadi Anda hanya bisa write-- alih-alih memiliki ya do--. GABRIEL: Tapi itu lebih elegan. ALLISON: Ya, itu lebih elegan. Anda bisa mendapatkan ke dalam desain dan yang lainnya, tapi ya, Anda benar-benar bisa melakukan itu. Ada pertanyaan lain? OK, keren. Jadi kami sudah bicara banyak tentang kondisi dengan semua loop ini yang kita miliki, jadi kita benar-benar mendapatkan ke kondisi dalam ekspresi Boolean. Sekali lagi, Anda menggunakan ini di C, jadi hanya semacam transisi dari antarmuka grafis lebih untuk benar-benar coding. Cool, yang begitu besar, jika. Pada dasarnya hanya memungkinkan kita untuk memperkenalkan beberapa logika ke dalam program dan kami cek kondisi sys. Jadi dalam hal ini, OK, adalah n lebih besar dari 0? Ya itu, sehingga Anda dapat mengeksekusi ini. Ini hanya memeriksa beberapa Kondisi yang Anda sudah mengatur, yang saya pikir kita semua nyaman dengan memeriksa kondisi. Keren. Jadi, jika yang lain adalah satu lagi Anda, Anda bisa mengatakan OK, jika hal ini benar, melakukan hal pertama ini. Kalau tidak, aku ingin kau default dan melakukan sesuatu yang lain. Seperti dalam kasus ini, Anda juga memilih angka positif atau angka negatif. Anda hanya memiliki dua pilihan. Anda perlu untuk mengeksekusi tanpa apa input pengguna Anda. Jadi Anda bisa mengatakan dengan baik, itu lebih besar dari 0? Keren. Mencetak angka positif. Jika tidak, cetak negatif. Semua orang baik? Dan kemudian satu hal untuk mengenali adalah bahwa jika jika kondisi terpenuhi, lain tidak akan pernah juga mengeksekusi. Hanya salah satu dari ini akan mengeksekusi pada suatu waktu. Jadi itu adalah trade off. Anda tidak bisa memiliki keduanya. Anda juga memiliki kondisi pertama. Anda juga memiliki jika atau yang lain, tidak keduanya. Yang kemudian dapat membuat hal-hal bahkan lebih rumit, karena dapat Anda lakukan jika, lain itu, dan kemudian yang lain. Jadi dalam hal ini, kita memiliki tiga kondisi. Dan lagi, hanya satu di antaranya adalah akan berakhir dieksekusi. Jadi Anda mungkin bertanya-tanya baik, bagaimana jika Anda memiliki sesuatu yang dapat memenuhi dua ini. Mungkin apa pun yang Anda memasukkan memenuhi kedua kondisi karena jika dan lain jika. Hanya hal yang akan menjalankan ALLISON: Segera setelah ia menemukan sesuatu bahwa memenuhi syarat untuk itu bernilai true, itulah yang itu akan menjalankan dan tidak ada yang lain. Jadi, jika Anda memiliki nomor ini antara 0 dan 5 untuk satu pertama Anda, atau nomor ini antara 3 dan 5 untuk yang lain jika bagian, dan Anda masukan number-- yang Kataku 0 dan 5 dan- 4. Ini akan memukul pertama. Ini akan mengatakan OK, ini jumlah adalah antara 0 dan 5. Jalankan dan meninggalkan. Tidak pernah akan memukul bahwa opsi kedua. Keren? Mengagumkan. OK kami juga memiliki laporan beralih jika Anda ingin mendapatkan bahkan more-- atau maaf, switch berikutnya. Aku terlalu terburu-buru di sini. Sekali lagi, beberapa jika blok dimana aku hanya berkata adalah segera setelah Anda menemukan kondisi yang bertemu dan jika lain jika yang lain, daun. Jika Anda perlu memeriksa beberapa hal, Anda akan ingin menggunakan karena ini itu akan memeriksa setiap waktu di sini. Jadi ini akan berjalan melalui dan jika itu lebih besar dari atau sama dengan 90, itu akan mencetak itu. Dan itu akan berjalan melalui dan memeriksa setiap satu dari ini. AUDIENCE: Jadi ini akan menjadi lebih dari kereta [tak terdengar]. Apakah ini menjadi seperti [tak terdengar]? ALLISON: Pertanyaannya adalah akan ini kereta atau apakah ini melakukan apa yang Anda inginkan. Itu benar-benar tergantung pada apa Anda inginkan dari program Anda. AUDIENCE: Maksud saya seperti jika Anda menempatkan 90 di. ALLISON: Jika Anda menempatkan 90-- AUDIENCE: [tak terdengar]. GABRIEL: Anda akan mendapatkan dua hal. ALLISON: Anda akan mendapatkan dua hal. Ya, dua. ROB Bowden: Dua? ALLISON: No. ROB Bowden: Empat. Jika Anda meletakkan 90, itu akan mengatakan Anda mendapat nilai A, Anda punya B, Anda punya C, Anda punya D. AUDIENCE: [tak terdengar]. ALLISON: Benar. Jadi saya tergantung pada apa yang Anda inginkan dari program yang anda. Kadang-kadang Anda perlu memeriksa beberapa hal. Anda akan mendapatkan banyak lebih dalam apa desain yang baik adalah seperti yang Anda maju. Hal yang penting untuk menyadari adalah bahwa ini akan memeriksa keempat kondisi di sini. Sedangkan jika ini adalah sebuah jika lain jika lain jika yang lain, itu akan memukul bahwa kasus pertama, itu akan mencetak Anda mendapat nilai A dan dilakukan. ROB Bowden: Bahkan jika kita memutuskan untuk mengubah ini ke jika dan lebih besar dari atau sama dengan 90, jika dan lebih besar dari atau sama dengan 80, dan kurang dari atau sama dengan 89, jika n lebih besar dari atau sama dengan 70, dan n kurang dari atau sama dengan 79, sehingga akan benar. Yang akan melakukan apa yang kita inginkan, tetapi masih memeriksa setiap satu itu. Jadi sedangkan di skenario pertama, jika kita masukkan 90 dengan hanya jika lain jika lain jika, dan kami masukkan 90, maka itu akan memperbaiki. Ini akan memeriksa pertama satu, cetak Anda mendapat nilai A, melewatkan semuanya, karena sudah menemukan satu yang bekerja. Semua kasus yang saling eksklusif berdasarkan jika lain jika lain jika. Sehingga akan mengeksekusi pertama jika, maka hal itu dilakukan. Ini akan pergi sampai akhir. Sedangkan jika kita mengubah ini menjadi apa yang saya mengatakan dengan kurang dari atau sama dengan 89. Ini akan memeriksa yang pertama. Ini akan mencetak. Ini akan memeriksa kedua. Ini tidak akan dicetak. Periksa ketiga. Tidak akan dicetak. Periksa yang keempat. Sekarang akan dicetak. Jadi dalam hal itu, lain jika versi, karena kasus ini saling eksklusif, itu lebih baik digunakan jika lain jika lain jika, karena itu akan memiliki cek lebih sedikit dari kondisi dari versi ini. ALLISON: Awesome. Jadi hal lain kita bisa lakukan adalah laporan beralih. Pada dasarnya pernyataan switch mengambil di beberapa variabel, dalam kasus ini itu n, dan menentukan hal untuk mengeksekusi. Jadi ini juga merupakan salah satu di mana kasus Anda harus agak eksklusif. Jadi dalam hal ini, jika kita kita mendapatkan satu, itu akan mencocokkan apa pun yang variable-- nilai apapun dari n adalah salah satu dari kasus-kasus ini, sehingga 1, 2, atau 3, dan mencetak garis yang sesuai. Dan kemudian jika Anda perhatikan di sini, kami juga memiliki default, yang Anda dapat dari anggap sebagai sesuatu yang lain Anda. Jadi jika Anda memilih nomor lain selain 1, 2, dan 3 dalam hal ini itu hanya akan mencetak valid. Memutuskan kapan harus menggunakan seandainya dibandingkan jika elses dibandingkan switch akan menjadi sesuatu yang kalian akan lihat desain bijaksana setelah Anda mulai menulis program yang lebih rumit, dan tidak ada aturan yang keras dan cepat kapan harus menggunakannya. Itu benar-benar tergantung pada konteks Anda. ROB Bowden: Dan untuk membuangnya di luar sana karena bagian lebih nyaman. Switch, mereka cenderung be-- sehingga Anda terbatas dalam beberapa cara Anda dapat menggunakannya, karena jika, kondisi bisa sangat banyak apa pun yang Anda inginkan. Dengan switch kasus harus angka, atau teknis mereka dapat karakter, tapi chars, seperti yang akan kita lihat, hanya angka. Jadi mereka harus angka, tetapi switch benar-benar lebih efisien daripada jika lain jika lain jika, karena bahkan mengambil contoh before-- baik, contoh kelas tampaknya baik. Nah mari kita katakan di sini, kita bukan melakukan ini sebagai jika lain jika lain jika skenario. Jadi jika n sama sama dengan 1, mencetak Anda memilih jumlah yang rendah. Jika lain jika n sama sama 2, Anda memilih nomor menengah. Lain jika equals sama dengan 3, tinggi. Lain tidak valid. Jadi mari kita mengatakan bahwa itu skenario kami. Jadi katakanlah kita masukkan 4, jadi kami berharap tidak valid. Cara bahwa jika lain jika yang lain jika pendekatan yang akan bekerja adalah memeriksa kondisi pertama. Ini tidak puas. Jadi kami memeriksa kondisi kedua. Ini tidak puas. Periksa kondisi ketiga. Tidak puas. Jadi kami pergi ke yang lain dan mencetak valid. Cara saklar karya adalah mengkompilasi turun menjadi apa yang kita akan untuk memanggil meja melompat. Utama Gagasan ini bahwa ketika Anda memasukkan 4, dapat segera pergi ke default. Tidak perlu memeriksa am I kasus 1? Nggak bukan itu. Kasus 2? Tidak. Kasus 3? Tidak. Default. OK, ini harus di mana saya inginkan, dan kemudian jalankan itu. Tidak, segera melompat ke default. Atau saya masukkan 2, itu segera akan pergi ke 2 tanpa perlu pergi melalui kasus 1. Jadi dengan cara itu, realistis saat itu tidak banyak gain efisiensi. Biasanya komputer cukup cepat, dan itu tidak terlalu bagus. Tapi itu adalah kasus yang switch lebih cepat. Jika Anda benar-benar mencoba untuk mengoptimalkan, menggunakan switch. ALLISON: Cool. Dan kemudian kita memiliki operator ternary. Jadi saya tahu saya sebutkan sebelumnya kata sintaksis gula. Jadi itu hanya hal-hal yang membuat kode Anda jauh lebih ringkas. Jadi ini adalah salah satu kasus. Jadi operator ternary adalah tanda tanya usus seperti yang kita lihat dalam string baris s sama n lebih besar dari 100 tanda tanya usus tinggi rendah. Jadi pada dasarnya cara kerjanya itu n lebih besar dari 100 adalah suatu kondisi. Jadi saya pikir itu bisa masuk akal. Ini seperti mengajukan pertanyaan. Itu mengatakan oh, adalah n lebih besar dari 100. Siapa yang tahu? Dan jika mengevaluasi ke benar, itu akan memberi Anda hal pertama yang terdaftar di sana, yang tinggi. Jika tidak itu akan memberi Anda rendah. Jadi ini hanya benar-benar sederhana dan cara yang efisien untuk melakukan seperti jika lain. Itu semua ini. Dan jika kita menulis ini sebagai jika lain bersyarat, itu akan jika n lebih besar dari 100, kembali tinggi. Lain, kembali rendah. Ini hanya jauh lebih cara ringkas menulis itu. ROB Bowden: Jadi contoh khusus ini adalah setiap kali Anda melakukan sesuatu seperti ini, ini adalah pola di mana saya menggunakan terner sangat sering. Jadi kami belum berbicara tentang lingkup belum, tapi aku benci melihat string s titik koma. Jika n lebih besar dari 100, s sama tinggi. Lain, s sama rendah. Jadi pola itu, lima baris kode harfiah 100% dari waktu dapat ditransfer ke dalam apa adalah atas sana dengan terner a. Jadi terner, satu baris kode. Jika yang lain, lima. Itu contoh saya menunjuk setiap saat. Ini akan tempat yang bagus untuk operator ternary. Ini sangat bersih. Tetapi orang-orang cenderung tidak pernah menggunakannya. ALLISON: Bawa pergi Gabe. GABRIEL: Jadi sekarang kalian semua pelajari dalam kuliah minggu ini bahwa segala sesuatu dalam komputer biner, kan? Sama seperti lampu di sini. Anda dapat berupa diaktifkan dan dinonaktifkan. Dan dengan segala sesuatu, maksudku harfiah semuanya. Beberapa nomor, dan karakter, dan string, dan bahkan kode yang Anda tulis ketika itu akan dikompilasi ke mesin kode dan hal-hal seperti itu, jadi itu semua bermuara pada 0 dan 1 '. Dan jadi ketika kita sedang berhadapan dengan bilangan bulat, yang adalah sesuatu yang secara teknis sangat sederhana, kita harus bisa melakukan hal-hal seperti menambahkan mereka, yang mungkin salah satu hal yang paling sederhana dapat Anda lakukan untuk dua bilangan bulat, kan? Jadi penambahan dan pengurangan bekerja sama seperti bekerja dalam notasi desimal, kecuali di sini itu biner, kan? Jadi itu adalah di dasar dua. Jadi tambahkan 1 ditambah 1. Yang memberikan 0, dan 1 membawa lebih. Dan hanya terus melakukan itu, Jadi sekarang muncul pertanyaan yang lebih menarik. Kita tahu bagaimana untuk mewakili semua bilangan bulat positif dalam komputer, tapi mari kita membuat ini latihan. Berpura-pura kalian semua pada tahun 1960 atau sesuatu yang mencoba untuk membuat komputer, dan Anda harus datang dari cara menyimpan minus 1, misalnya, atau dikurangi bilangan bulat dalam hal ini. Bagaimana Anda akan melakukannya? Ada gagasan? Hanya membuang apa padaku. Ya? AUDIENCE: [tak terdengar] menunjuk khusus jika Anda [tak terdengar]. GABRIEL: Anda dapat menunjuk bit khusus, yang akan 0 atau 1. Katakanlah satu jika itu positif dan 0 jika itu negatif. Dan kemudian sisa bit hanya untuk menyimpan nomor. Keren. Jadi itu ide yang sangat bagus. Kami memiliki, saya tidak tahu, 200. Dan jika bit pertama adalah diaktifkan, maka itu ditambah 200. Jika itu dimatikan, itu adalah minus 200. Keren. Hanya ada satu kecil masalah dengan hal ini, yang jika kita mencoba untuk jumlah segalanya. Jadi bayangkan kita memiliki 11111 sini, dan kita menjumlahkan ini dengan 00100 apa pun. Jika kedua positif, itu baik-baik saja. Tapi kemudian jika salah satu dari mereka adalah negatif, seperti mari kita mengatakan bahwa ini sedikit di sini adalah salah satu yang bertanggung jawab for-- Aku akan membuat separate-- sebuah jadi yang satu ini berarti bahwa jumlah ini di sini positif. Yang satu ini berarti bahwa ini nomor di sini adalah negatif, kan? Tapi kemudian ketika Anda akan jumlah mereka, Anda perlu jika pernyataan mengatakan oh jika ini adalah 0, maka jumlah saya akan sesuatu yang berbeda, kan? Jadi ada sedikit lebih pintar cara untuk melakukan bahwa, yang disebut melengkapi dua itu. Jadi pada dasarnya apa yang kita lakukan adalah kita mendefinisikan minus 1 menjadi hal yang jika kami menambahkan hingga 1 memberi kita 0. Saya ulangi bahwa. Jadi, mari kita mengatakan bahwa ini di sini adalah 1. Apa hal yang secara alami dalam bilangan bulat positif ditambahkan ke yang memberi kita 0? Bagaimana jika kita mencoba untuk menambahkannya ke nomor ini? Kita akan have-- OK, jadi mari kita tambahkan. Kita akan memiliki 1 ditambah 1 adalah 0, dan kemudian membawa lebih. Dan kemudian kita akan mendapatkan 0 lagi. Aku mulai bingung. Dan Anda akan mendapatkan 0 dan 0 dan 0 dan 0 dan 0 dan 0. Banyak 0 ini. Pada satu yang terakhir, kita tidak akan dapat membawa hal itu, karena katakanlah kita hanya berurusan dengan satu byte, jadi hanya 8 bit. Jadi apa komputer tidak secara default hanya lupa tentang itu [tidak terdengar], OK? Jadi ini adalah apa yang disebut dua komplemen. Kami hanya mendefinisikan minus 1 menjadi hal di sini bahwa jika Anda menambahkan bahwa untuk 1 akan memberikan 0. Dan itu cukup keren karena kita tidak benar-benar perlu terlambat untuk mengimplementasikan berbagai jenis sum tergantung pada apakah itu adalah negatif atau angka positif. Apakah itu masuk akal? Jadi satu hal yang kita lakukan di sini dalam rangka untuk mengubah antara positif dan negatif integer maka kita membalik segalanya, dan kemudian kita tambahkan 1 ke nomor tersebut. Jika Anda mencoba untuk melakukannya sendiri pada selembar kertas, Anda akan melihat bahwa masuk akal. Tapi kalau aku mengambil nomor ini di sini, ini adalah lima. Jadi jika saya membalik segalanya di sini, jadi 1, 1, 1, 1, 1. Flip, flip, sandal. Dan kemudian saya tambahkan 1 untuk itu. Aku akan memiliki tepat minus 5. OK? Ini semacam masuk akal karena jika Anda mencoba untuk meringkas ini dengan nomor yang kita miliki sebelumnya, yang was-- mari kita membalik ini lagi. Itu 101 dan banyak 0 itu. Jika Anda mencoba untuk menambahkan dua angka bersama-sama, Anda akan memiliki tepat 0. OK. Ada pertanyaan? AUDIENCE: [tidak terdengar] GABRIEL: Apa maksudmu? AUDIENCE: Negatif untuk positif [tak terdengar]. Gabriel: Tidak, Anda flip dan Anda menambahkan 1 selalu. Ya. OK, jadi karakter juga dikodekan binari. Kami memiliki tabel ASCII, seperti yang Anda juga lihat di kuliah, kan? Jadi pada dasarnya pemetaan hal. Dan di sini saya tidak bisa menekankan cukup bahwa untuk komputer, dan 65 secara harfiah hal yang sama. Jadi jika saya menulis sesuatu seperti char c sama, saya bisa pada saat yang sama hanya menulis 65 di sini, dan itu akan persis sama, OK? Tidak ada perbedaan apapun. Kami biasanya cenderung menempatkan karakter dalam variabel jenis. Char, bukan karena mereka pada dasarnya dibuat untuk itu, tetapi karena konvensi manusia. Tapi Anda hanya dapat menangani bilangan bulat bukannya variabel tipe char, dan Anda akan baik-baik saja. Satu-satunya perbedaan yang sebenarnya antara c char dan i int adalah bahwa int memiliki empat byte di sebagian besar sistem, sedangkan char memiliki satu byte. Mereka pada dasarnya tidak hal yang sama dalam hal data. Jadi apa yang akan mencetak di sini? Di sini kita sedang mencetak digit menggunakan printf dengan ditambah 1, dan hanya seperti bilangan bulat, karakter dapat disimpulkan, jadi karakter juga dapat disimpulkan. Jadi ini adalah persis 65. Jadi ada akan menjadi 66, dan di sini kita memiliki 65 ditambah sedikit minus besar A, yang akan, aku tidak benar-benar tahu. Tapi itu akan persis kesenjangan antara huruf kapital dan dan huruf kecil, jadi kita akan mendapatkan yang kecil, kan? Ya. Jadi ini akan mencetak karakter yang tepat satu ini. Baik? Ada pertanyaan? Di sini kita memiliki banyak berbeda jenis untuk variabel numerik. Kami sudah berbicara tentang int. Mengambang hanya cara to-- ini benar-benar lucu, karena ketika saya pertama kali belajar program kembali hari dengan Python, program pertama yang saya pernah mencoba untuk menulis, saya melihat bahwa ada Jenis dipanggil dan jenis yang disebut float. Dan mengambang itu untuk semua bilangan real. Jadi saya bertanya mengapa harus Saya pernah menggunakan int kemudian? Karena jika saya bisa menggunakan semua bilangan real dengan pelampung, Aku hanya akan berhenti menggunakan int, kan? Karena bilangan real adalah seperti yang lebih umum. Ternyata bahwa ini adalah tidak terjadi di komputer karena mereka pada dasarnya hal yang berbeda. Jadi bilangan bulat dan mengapung, yang operasi yang Anda lakukan untuk mereka pada dasarnya berbeda karena dari cara mereka disimpan, OK? Kita akan berbicara sedikit sedikit lebih lanjut tentang bahwa dalam satu detik. Jadi ganda hanya mengambang lebih besar. Biasanya dalam kebanyakan sistem, pelampung adalah empat byte, seperti int. Dan ganda adalah delapan byte. Sebuah lama sebenarnya hanya simbol Anda menambahkan ke tipe seperti int. Anda berkata lama int seperti ini. Lama int x untuk membuatnya lagi. Jadi dalam kebanyakan sistem, yang akan memberikan delapan byte bukannya biasa empat. Dan Anda benar-benar dapat menjatuhkan in, sehingga hanya bisa mengatakan lama, dan yang bekerja juga, OK? Anda juga dapat melakukan hal-hal lain seperti unsigned int, atau lagi hanya unsigned juga akan bekerja. Dan itu akan membuat x menjadi variabel seperti semuanya positif, sehingga Anda tidak bisa benar-benar memiliki negatif angka dalam cara yang kami lihat di sini. Jadi berikut indah titik dan presisi floating. Itulah salah satu alasan mengapa Anda ingin menggunakan int bukan mengapung, karena int adalah 100% tepat, kan? Ini persis jumlah tersebut. Untuk poin mengambang, jika Anda mengatakan bahwa jawabannya sama dengan 1 lebih 10-- Saya kebetulan punya ini tepat Program sini, float.c. Yang mencetak 20 tempat desimal. 1 dibagi dengan 10, dan bahwa biasanya adalah 0,1, bukan? Tapi di sini jika kita membuat mengapung dan kemudian kita jalankan, kita melihat bahwa itu tidak benar-benar 0,1. Ini 0,149 sesuatu. Dan kenapa begitu? Karena Anda tidak bisa benar-benar mewakili setiap bilangan real mungkin tunggal dalam memori karena ada uncountably banyak dari mereka. Jadi kita secara teknis hanya mampu mewakili jumlah terbatas mereka dengan jumlah terbatas data. Tapi itu benar-benar menarik. Sekarang ini mengundang pertanyaan tentang bagaimana Anda akan pergi tentang mewakili ini dengan bit, kan? Jadi bagaimana mengapung disimpan? Dengan bilangan bulat itu mudah. Tetapi dengan mengapung yang Anda inginkan untuk memaksimalkan jangkauan, dan Anda ingin dapat mewakili jumlah besar dan jumlah yang sangat kecil seperti 0.000001 pada saat yang sama. Jadi sekali lagi, game yang sama. Apakah ada yang punya ide bagaimana kita bisa pergi tentang mewakili mengapung dalam memori? Hanya membuang apa. Ya, silakan. AUDIENCE: [tak terdengar] sebagai apakah itu dua int dan satu menjadi [tak terdengar] dan satu makhluk semuanya setelah titik desimal. Gabriel: OK, keren. Jadi dua bilangan bulat yang berbeda. Anda dapat memiliki 12.45, jadi itu 12 dan 45. Nice. Apa ere Anda akan mengatakan? Hal yang sama? Ya? AUDIENCE: [tak terdengar] notasi di mana Anda memisahkan dasar. GABRIEL: notasi Ilmiah, ya itu biasanya apa yang terjadi. Jadi ini adalah apa yang disebut mantissa. Itulah yang sebenarnya nomor, dan kemudian eksponen hanya di mana koma adalah, benar? Jadi ini akan menjadi sesuatu dari bentuk 1, 2, 3, 4, 5 kali 10 dengan minus 4. Aku baru sadar itu-- ya, tepatnya. Dan kemudian ini 10 sampai minus 4 adalah akan menentukan di mana koma adalah, OK? Di Brazil kita menggunakan koma. Di sini kalian menggunakan dot. Jadi titik. Dan ini keren, karena Anda dapat fokus banyak potongan-potongan Anda pada orang ini di sini, di mantissa, dan kemudian itu akan menjadi presisi Anda yang sebenarnya. Dan Anda dapat melakukan hal ini baik dalam desimal atau dalam sistem berbasis biner. Ada yang berbeda cara untuk melaksanakan hal ini. Pertanyaan? Ya? AUDIENCE: Berapa banyak tempat setelah desimal [tak terdengar]? GABRIEL: Itu pertanyaan yang rumit, karena itu tidak pernah benar-benar 100% tepat, karena seperti yang Anda lihat di sini, untuk beberapa nomor itu adalah 100% tepat. Saya percaya jika kita menempatkan 0,5 di sini, itu akan menjadi 100% tepat. Ini akan menjadi 0,500000. Jadi dalam hal ini, itu sempurna. Namun dalam kasus lain, itu jauh lebih sedikit sempurna. Dalam pengalaman saya, seperti hingga empat, lima tempat desimal cukup tepat. Jika Anda menggunakan ganda, itu akan menjadi cara yang lebih tepat dari itu, OK? ROB Bowden: Jadi hanya untuk membuang beberapa konteks lainnya di mengapung, Aku tidak pernah ingat 100% bagaimana spec mengapung benar-benar bekerja, tapi aku selalu ingat Anda yang mengapung mulai mendapatkan berantakan. Jadi idenya adalah bahwa ketika Anda benar-benar, benar-benar jumlah besar atau benar-benar, benar-benar jumlah kecil, kita mulai semakin buruk dan buruk di membedakan antara dua mengapung dekat. Jadi bagaimana saya ingin untuk berpikir tentang adalah dengan floating point ketidaktepatan, ada dua mengapung yang jika saya mencoba untuk menentukan mereka di C, meskipun fakta bahwa mereka nomor yang berbeda, mereka akan menjadi diartikan sebagai jumlah yang sama, karena kita tidak bisa menyimpan mereka berbeda. Kita perlu menggunakan bit yang sama. Dan ketika kita bisa benar-benar, benar-benar angka yang besar, berbicara seperti 10 ke 300 atau sesuatu, itu pada saat itu bahwa 10 sampai 300 atau 5 kali 10 sampai 300 tidak dapat dibedakan dari 7 kali 10 sampai 300. Jadi itulah perbedaan yang cukup besar antara dua nomor. Tapi kemudian ketika Anda turun ke kisaran hal-hal normal, Anda cenderung cukup baik membedakan. Dan kemudian ketika Anda turun benar-benar kecil, Anda juga mendapatkan cukup buruk lagi. Jadi seperti sejumlah besar 0.0000, itu akan sangat buruk. Gabriel: Ya, jadi catatan singkat. Tidak pernah melakukan hal ini. Jangan pernah mencoba untuk membandingkan mengapung menggunakan equals sederajat, karena meskipun mereka hampir sama, hampir sama tidak sama. Jadi apa yang biasanya Anda lakukan adalah kurangi mereka, mengambil nilai absolut dari itu, dan melihat apakah yang lebih kecil dari 0.0001 atau sesuatu seperti itu, OK? Dan keren. Saya tahu banyak orang memiliki beberapa latar belakang di Jawa, terutama orang-orang yang melakukan Ilmu komputer AP, kan? Dan Jawa adalah bahasa yang sebagian besar didasarkan pada C, memiliki beberapa perbedaan yang sangat besar. Tapi untuk loop, dan jika, dan hal-hal seperti itu, mereka semua sintaks yang sama. Aku punya beberapa program di sini untuk menunjukkan hal ini. Jadi misalnya, hello world sederhana. Ini adalah hello world di C, yang Anda Orang-orang pasti kenal, dan ini dan ini satu di Jawa. Jadi di Jawa kita memiliki ini public class, hello world, dan public void static utama, dan tali args. Args String akan muncul di C sangat lama. Tapi mari kita tidak pergi ke sana belum. Saat ini kami memiliki kekosongan di sini, yang berarti utama yang tidak mengambil argumen. Dan kemudian kita harus System.out.println, dan itulah jenis setara untuk printf. Di sini kita tidak benar-benar membutuhkan backslash n karena print ln melakukan itu untuk Anda. Itu menambahkan backslash n pada akhir baris. Tetapi jika Anda pergi ke sesuatu seperti untuk, Anda dapat melihat bahwa mereka cukup banyak hal yang sama. Jadi inisialisasi, dan Kondisi, dan update is-- Aku rindu ruang di sini-mereka cukup banyak hal yang sama, kecuali Jawa memiliki sebagai lebih banyak barang beberapa tingkat tinggi. Di sini kita bisa melakukan ditambah saya dan Java secara otomatis akan membuat ini saya di sini, yang integer, ke dalam string, dan kemudian tambahkan dua string bersama-sama. Di sini, di C kita perlu melakukan &% d. Garis di sini, untuk tampak persis sama. Dan jika kita melihat jika, para ifs juga terlihat persis sama, kan? Jadi perbedaan yang sangat besar yang dalam hal-hal yang Anda lihat di sini. Public static, batal, dan maka public class jika. Jadi Jawa memiliki apa yang disebut mesin virtual. Dan itu sangat berat berdasarkan apa disebut pemrograman berorientasi objek, yang sangat, sangat umum paradigma untuk pemrograman saat ini. Dan hal kelas ini adalah apa yang Anda lihat, sesuatu dari orientasi objek, adalah Anda membuat kelas dan kemudian Anda dapat memperoleh objek dari kelas itu. Kami tidak akan berbicara terlalu banyak tentang itu dalam CS50, tapi itu pasti sesuatu yang benar-benar keren, terutama jika Anda ingin pergi ke pengembangan web yang lebih canggih pada akhir kursus, seperti menyerahkan proyek akhir Anda dan beberapa kerangka kerja yang bagus dan hal-hal. Jadi pada dasarnya idenya adalah bahwa Anda tidak ingin menerapkan kembali sesuatu, sehingga Anda membuat sesuatu yang sangat generik, seperti bentuk, dan kemudian Anda buat bentuk yang berbeda dari itu, dan kemudian dari masing-masing bentuk-bentuk ini, Anda membuat beberapa bentuk yang lebih spesifik dalam tiga dimensi atau sesuatu seperti itu. Dan mereka memiliki hirarki ini mereka mewarisi dari yang lain, sehingga semua fungsi dan semua variabel yang bentuk besar di sini memiliki, semua ini akan memiliki, dan semua ini akan memiliki, dan seterusnya dan sebagainya. Jadi itulah ide dasar. C tidak memiliki itu, tapi C ++ memang memiliki semacam fitur. Dan Jawa yang banyak dipengaruhi oleh orientasi objek, jadi itu sebabnya Anda melihat kelas di sini sepanjang waktu. Dan hal lainnya adalah ini mesin virtual Java. Jadi ini, saya pikir, adalah ide yang sangat cerdas. Jadi apa yang orang-orang yang diciptakan java lakukan adalah mereka tidak ingin mengkompilasi kode mereka dua kali jika mereka harus menjalankannya di Windows, atau Mac, atau Linux, jadi apa yang mereka lakukan adalah mereka benar-benar dijalankan sesuatu seperti alat, tetapi Anda tidak benar-benar melihat hal itu terjadi. Jadi mereka menjalankan mesin virtual dalam komputer Anda, yang pada dasarnya adalah seperti sistem operasi mini. Dan operasi yang Tujuan sistem dalam kehidupan hanya untuk menjalankan apa yang disebut kode byte. Jadi, bukannya di C, cara kita akan mengkompilasi ini membuat jika, dan kemudian jalankan ./if. Saya lupa backslash di. Di Jawa, Anda akan melakukannya pertama Java C melakukan kompilasi, if.c. Ini bukan C. Itu yang dot java. Dan kemudian Anda harus menjalankan tidak ./. Anda mendapatkan file baru ini if.class, tetapi Anda tidak bisa benar-benar menjalankan if.class sekarang hanya seperti yang kita lakukan sebelumnya. Ini bukan eksekusi. Anda harus menjalankan. Anda harus memberi makan ke sebuah program yang disebut Java, dan program yang merupakan mesin virtual, dan kemudian Anda melakukan if.class, atau jika. Ya. Dan kemudian ia bekerja. OK jadi ini adalah jenis yang mesin virtual terjadi. C tidak memiliki itu, jadi jika saya menempatkan program ini di mesin Windows, itu tidak akan bekerja di C. Di Jawa itu tidak. Pertanyaan? Keren. Itu jika untuk bagian super untuk hari ini.