>> ROB: Baiklah.
Selamat datang di bagian pertama.
Aku Rob.
>> JOSEPH: Aku Yusuf.
>> ROB: Jadi kita akan menyelam langsung masuk
Hal pertama untuk berbicara tentang adalah Appliance tersebut.
Jadi mudah-mudahan sebagian besar dari Anda memiliki download sudah.
Tapi Anda bisa lihat petunjuk di cs50.net/appliance.
Ya Tuhan, sekarang aku sadar diri.
Aku masih mendengarnya.
>> JOSEPH: Wow, kedengarannya seperti itu bingung.
>> ROB: Jadi beberapa orang telah memiliki masalah dengan itu, jadi jangan menunggu sampai
menit terakhir dari masalah diatur ke mencoba dan memecahkan Appliance dan
mengetahui bahwa itu tidak bekerja.
>> JOSEPH: Dan jika ada sesuatu yang tidak bekerja dan Anda membutuhkan bantuan, Anda dapat pergi ke
cs50.net/discussion mana kita memiliki sebuah forum di mana Anda
dapat memposting pertanyaan Anda.
Dan kami akan sampai ke mereka akhirnya.
>> ROB: Baiklah.
Jadi ini adalah apa yang Appliance terlihat seperti.
Sekali lagi, itu hanya benar-benar terpisah sistem operasi berjalan dalam
sistem operasi apa pun yang Anda berjalan pada laptop Anda.
Dan hal utama Anda akan menggunakan adalah gedit.
Jadi mudah-mudahan ini memiliki sudah menjadi situs akrab.
Terminal.
>> Dan Anda juga dapat menjalankan Chrome dalam Appliance tersebut.
Ada beberapa orang yang telah melaporkan internet
tidak bekerja di Appliance tersebut.
Dan beberapa dari mereka baru saja diasumsikan bahwa tidak seharusnya
internet di Appliance tersebut.
Tapi ya, ada seharusnya menjadi internet.
>> Aku akan mengatakannya sekarang, tapi tidak benar-benar berarti apa-apa.
Jika internet tidak bekerja, ini adalah apa yang Anda cenderung membutuhkan
untuk menjalankan untuk memperbaikinya.
Jika Anda mengalami masalah internet, tidak ingat, hanya posting di
Diskusikan, dan kita akan mengatakan, jalankan itu.
Tapi internet harus bekerja.
>> Jadi satu-satunya hal yang lain - ya, ada lagi yang benar-benar relevan.
Tapi aku hanya ingin menunjukkan bahwa -
lihat di kanan bawah sudut ini.
Jadi masing-masing Peralatan Anda harus memiliki alamat IP.
Dan kemudian di semester, IP ini alamat akan menjadi lebih relevan bila
Anda bekerja di web p-set, karena Anda akan dapat mengakses
situs web yang sedang Anda kerjakan dari Anda Chrome lokal dengan menggunakan alamat IP ini.
>> Tapi apa yang saya ingin menggunakan alamat IP - dan Anda tidak perlu melakukan ini, saya
hanya ingin menunjukkan itu -
di sini.
Jadi ini adalah jendela terminal pada Mac saya, hal ini tidak di
Appliance sama sekali.
Dan Anda dapat melihat apa yang perintah ini tidak.
Tapi aku akan SSH langsung ke Appliance saya.
Aku tidak tahu apa IP tersebut.
>> JOSEPH: 168 -
>> 168.224.1.0.
>> ROB: Jadi sekali aku sudah selesai dengan ini, log in
Sekarang, pada dasarnya, ini adalah identik dengan jendela terminal dalam Appliance saya.
Jadi saya cukup banyak tidak pernah benar-benar bekerja dari dalam Appliance itu sendiri.
Aku hanya harus selalu berjalan di latar belakang diminimalkan
dan sshed ke dalamnya.
>> Masalah dengan hal ini adalah Anda tidak akan untuk dapat menggunakan gedit dengan mudah
langsung dari ini.
Tetapi jika Anda ingin menjadi nyata keren hacker, maka Anda harus mendapatkan digunakan untuk
baris perintah editor teks pula.
Jadi Vim dan Emacs dan Nano, semua ini alternatif yang berbeda.
Nano cenderung menjadi yang paling mudah.
Dan saya pikir ia tidak memiliki penyorotan sintaks.
Oh, tidak, itu benar-benar tidak.
Sehingga Anda dapat menggunakan Nano, karena bahwa salah satu cukup mudah.
>> Anda melihat semua perintah-perintah ini di bagian bawah.
Simbol wortel kecil ini.
Jika Anda belum melihat itu sebelumnya, Anda akan mungkin melihatnya banyak sekarang.
Hal ini biasanya berarti wortel kontrol, seperti kiri bawah keyboard Anda
karakter kontrol.
Jadi di sini itu memberitahu saya di sini -
oh, itu tidak terpotong jika saya zoom in
Jadi Control, X adalah bagaimana Aku akan keluar.
Dan ia mengatakan saya bisa memukul Y untuk Ya, untuk tabungan, N untuk No
Jadi itulah Nano.
>> Vim dan Emacs cenderung sedikit lebih rumit dan luar biasa.
Tapi Anda bisa mendapatkan digunakan untuk itu, dan kemudian Anda akan menyukainya.
Jadi itulah itu.
>> JOSEPH: Tidak perlu melakukan itu.
>> ROB: Ya.
Anda bebas untuk menggunakan gedit untuk sisa semester.
Jadi pertanyaan-alat yang berhubungan?
Atau apakah Anda memiliki pemikiran tentang apa lagi perlu dibicarakan tentang
alat?
Ya.
>> SPEAKER 1: Ketika Anda sshed ke dalam hal, adalah Crimson sandi?
>> ROB: Ya.
Password untuk hampir semua di Appliance yang terjadi
menjadi Crimson.
>> SPEAKER 2: Instal seperti IDE nyata pada alat, akan bekerja?
>> ROB: Aku membayangkan Eclipse memang memiliki Versi Fedora, dalam hal ini, ya,
Anda bisa melakukan itu.
Ini mungkin tidak benar-benar layak.
>> SPEAKER 2: OK.
Jadi mungkin lebih mudah jika saya ingin menggunakan Eclipse, cukup gunakan asli dan
kemudian upload ke -
>> ROB: Oh, yang juga mungkin lebih mudah.
Tapi Anda bisa mendapatkannya bekerja dalam Appliance tersebut.
>> JOSEPH: Dan untuk kamera, pertanyaan itu, Anda dapat menginstal lain
IDE dalam Appliance itu?
>> ROB: Eclipse menjadi contoh IDE.
Ada pertanyaan Appliance lain?
Baik.
>> Jadi sekarang kita akan beralih ke baris perintah -interface terkait hal, jadi CLI.
Dan lagi, aku hanya akan bekerja di di sini, karena ini adalah identik dengan
bekerja dalam jendela terminal dalam Appliance tersebut.
Bagaimana font yang mencari?
Apakah itu cukup besar?
Baik.
>> Jadi ada banyak perintah yang Anda harus mendapatkan cukup digunakan untuk
sepanjang semester.
Dua besar untuk navigasi adalah ls, daftar file dalam direktori ini, dan
cd, sehingga mengubah direktori.
Jadi saya dapat mengubah desktop dan kemudian pola yang sangat umum adalah cd ke
direktori dan segera ls apa di direktori.
>> Orang juga kadang-kadang tidak menyadari bahwa Tab penyelesaian adalah hal.
Jadi seperti cd, vh, dan kemudian saya tekan Tab.
Aku hampir tidak pernah mengetikkan seluruh hal.
Dan kemudian jika saya terus memukul Tab lagi, itu akan secara otomatis
mulai daftar bagi saya.
Jadi saya bisa cd vhosts, host lokal.
Dan itu hanya akan -
dalam kasus Anda belum pernah mendengar istilah sebelumnya, direktori hanya kata lain
untuk folder.
Jadi sekarang jika Anda melihat -
mari kita membawa itu ke atas.
>> Jadi sekarang jika Anda lihat dalam kurung, Anda melihat tilde kecil, slash, vhost,
slash, host lokal.
Jadi tilde, yang mengacu ke direktori rumah saya.
Ini adalah direktori Anda ketika Anda masuk SSH
Ini direktori Anda berada di saat Anda membuka terminal.
Ini di mana Anda mulai.
Dan jadi aku dalam direktori rumah saya, dan aku dalam vhost
direktori dalam direktori rumah saya.
Dan kemudian aku dalam lokal tuan direktori dalam itu.
>> Jadi beberapa hal berguna lainnya dengan cd -
atau baik, secara umum, sehingga dot selalu mengacu pada direktori saat ini.
Cd, dot adalah perintah cukup berharga.
Tapi itu berubah ke direktori saat ini.
Yang lebih berguna dalam hal cd adalah titik, titik, yang
hanya naik satu direktori.
>> Dan perhatikan bahwa -
Saya ingin mengatakan alias, tetapi ini simbol, dot, dan dot, dot, mereka yang bekerja
untuk hampir semua perintah Anda akan berpikir untuk berjalan.
Jadi seperti cd mungkin di mana Anda akan menggunakan sebagian besar, tapi ini tidak
hal-hal yang hanya cd mengerti.
Hal ini cukup banyak sesuatu yang seluruh Anda baris perintah mengerti.
Banyak program memahami dot dan dot, dot.
>> Jadi yang lain yang berguna - cd, dash.
Sehingga akan membawa saya ke direktori terakhir bahwa saya masuk
Jadi kadang-kadang aku akan melakukan sesuatu seperti, oh, saya bekerja di sini.
Dan saya melihat beberapa kesalahan dengan sesuatu, dan Aku akan menyelidiki dengan pergi ke
beberapa direktori acak di suatu tempat.
Dan saya tidak tahu apakah itu akan biarkan aku di sana.
Ini akan.
Jadi saya melakukan apa yang saya inginkan dalam direktori ini.
Bla, bla, bla, bla, bla.
Dan aku seperti, baiklah, aku ingin untuk kembali ke tempat saya.
cd, dasbor, dan itu membawa saya kembali.
>> Jadi aku akan membuang banyak ini pada Anda hari ini.
Saya tidak berharap Anda untuk menghafal semua dari mereka.
Ini semacam hanya tahu bahwa mereka ada.
Dan kemudian nanti pada saat Anda seperti, hmm, aku ingin kembali ke
direktori bahwa saya hanya di, oh, tunggu, sesuatu seperti itu ada.
Anda tidak perlu ketik saja seluruh direktori lagi.
>> JOSEPH: Dan akhirnya Anda hanya akan menggunakannya berulang-ulang, dan
itu akan menjadi memori otot.
>> ROB: Ya.
Jadi bagaimana saya katakan sebelumnya, bahwa tilde adalah direktori home Anda.
Jadi saya bisa cd, tilde.
Tapi aku bahkan tidak perlu melakukan itu jika saya hanya -
Aku akan kembali ke direktori sehingga itu bukan contoh yang sia-sia.
Tapi jika saya hanya melakukan cd, itu juga sama seperti, pergi ke direktori rumah saya.
Saya lakukan Command, K.
>> JOSEPH: Anda juga bisa mengetik jelas, kata, dan harus jelas itu.
>> ROB: Dan saya pikir juga Control, L juga melakukannya.
Jadi banyak cara yang berbeda.
Saya pikir ada beberapa perbedaan di mana jelas dan Pengendalian, L hanya akan
benar-benar mendorong ke atas dan Aku masih bisa gulir kembali.
Command, K harfiah menghancurkan segala sesuatu, dan Anda
tidak bisa geser kembali.
Setidaknya, itulah cara kerjanya di iTerm2.
Aku tidak tahu bagaimana hal-hal lain -
oh.
>> Dengan sshing, jadi jika Anda berada di Windows, Anda akan harus men-download Putty
untuk SSH sejak Windows tidak memiliki seperti alat built-in SSH.
Dari Mac, Anda hanya dapat SSH langsung dari jendela terminal.
OK.
Pertanyaan?
>> Dengan ls, jadi sesuatu untuk membiasakan diri dengan sebagian besar dari perintah ini adalah -
baik, saya hanya akan melakukan satu.
Ls, dasbor, l.
Jadi dasbor, l adalah apa yang kita akan untuk memanggil bendera untuk ls.
Dan banyak dari perintah ini memiliki bendera bahwa Anda dapat melewati mereka.
Jadi dalam hal ini, dasbor, l adalah bendera yang mengatakan itu untuk memberi saya penuh
daftar semua informasi file-file ini.
>> Jadi kita lihat di sini bahwa desktop adalah diubah pada tanggal 30 Juli jam 12:54.
Downloads dimodifikasi pada 6 September.
Ini adalah ukuran saat ini dan byte direktori ini.
Anda tidak harus mengerti semua ini.
>> Hal ini di sebelah kiri, drwx ini itu, yang akan menjadi jauh lebih relevan
kemudian, ketika Anda harus berurusan dengan -
yang ada hubungannya dengan yang memiliki izin untuk melihat file-file ini.
Dan jadi jika Anda bukan satu-satunya pengguna pada komputer ini, Anda akan dapat
mengatakan, OK, saya harus menjadi satu-satunya diizinkan untuk melihat file ini atau aku
akan memungkinkan semua orang untuk melihat file ini.
Jadi orang lain di komputer saya dapat melihat file ini.
Aku bahkan tidak tahu apa ini - apa ini lakukan?
>> JOSEPH: Aku tidak yakin, sebenarnya.
>> ROB: Tidak tahu.
>> JOSEPH: Tapi jika Anda tidak tahu, ada perintah membantu yang dapat Anda gunakan
untuk memberi tahu Anda apa artinya output.
Dan jika Anda mengetik man sebelum perintah -
jadi M-A-N. ROB: Man.
Jadi manusia adalah satu lagi yang sangat berguna.
Dan manusia, ls.
Jadi halaman manual, mereka memiliki keduanya perintah bahwa Anda akan menggunakan
pada baris perintah, dan mereka juga memiliki fungsi yang akan relevan
dengan C. Jadi Anda bisa manusia -
dan saya diabaikan 3.
Tapi man 3 printf akan membawa up versi C dari printf.
Tapi jika saya hanya melakukan man printf, ini adalah akan memunculkan perintah printf
yang terjadi pada baris perintah.
>> Jadi pria, ls.
Halaman manual bisa sangat luar biasa.
Di sini, meskipun, Anda akan melihat daftar ini semua bendera ini yang ls
mengerti.
Jadi jika kita pergi untuk lari, l, dan -
Aku hanya akan melemparkan ini pada Anda.
Tetapi dalam rangka untuk mencari, Anda ingin untuk pertama memukul pertanyaan
tanda atau tombol slash.
Jadi slash.
>> Dan kemudian saya dapat mencari untuk apa pun yang saya inginkan.
Jadi aku akan memangkas untuk dasbor, l.
Dan ada itu.
Jadi gunakan format listing yang panjang.
Itu tidak membantu saya mencari tahu apa bahwa kolom tertentu berarti, tapi saya
mengasumsikan suatu tempat di sini itu akan menjelaskan bahwa.
Jadi gunakan halaman manual untuk perintah apapun bahwa Anda tidak segera memahami.
>> Aku cukup yakin Anda bahkan dapat man, man.
Sebuah antarmuka untuk online manual referensi.
Oh, satu yang terakhir yang mungkin sedikit yaitu ls relevan, dash, a.
Jadi perhatikan jika saya hanya melakukan ls, Saya mendapatkan lima file.
Jika saya melakukan ls, lari,, saya mendapatkan lebih banyak file.
Jadi kesamaan antara semua ini file baru adalah titik sebelumnya.
>> Jadi konvensi adalah bahwa file yang dimulai dengan sebuah titik tersembunyi.
Jadi Anda tidak ingin melihat file tersebut, Anda tidak ingin memilikinya berantakan dengan
daftar direktori Anda.
Hanya ketika Anda secara eksplisit meminta, baik-baik saja, ls, dash,, tampilkan.
A berdiri untuk semua file, termasuk yang tersembunyi.
Jadi beberapa perintah lain.
Oh, pertanyaan pada saat itu?
Ya.
>> SPEAKER 3: Ketika Anda melakukan ls, a, apa dot, dot?
>> ROB: Oh.
Jadi ini adalah apa yang saya bicarakan.
Ini hal yang sama di mana Saya bisa seperti cd, titik, titik.
Jadi secara teknis, dot dan dot, dot file yang ada pada setiap satu
direktori dimana file mengacu dot ke direktori saat ini.
Jadi jika saya cd, dot, aku hanya akan untuk tinggal di direktori.
Dan dot, dot selalu mengacu pada sebelumnya direktori satu tingkat atas.
Jadi jika saya pergi ke log dan ls, dash, al, Aku akan melihat titik, titik. cd dot, dot
membawa saya ke direktori sebelumnya.
Ya.
OK.
>> Jadi lain cukup penting perintah rm.
Jadi itulah yang akan kita digunakan untuk menghapus.
Dan biarkan aku benar-benar melakukan yang lain perintah pertama.
Jadi mkdir.
Mkdir adalah bagaimana Anda bisa membuat direktori.
Dan aku akan membuat direktori sementara dan masuk ke direktori sementara.
Dan seperti yang diharapkan, itu kosong.
Tapi kalau aku ls, dash,, aku masih memiliki dot dan dot, dot, karena dot mengacu pada
direktori saat ini.
Dan dot, dot mengacu pada direktori sebelumnya.
Dan orang-orang akan selalu ada tidak peduli direktori Anda masuk
>> Dan ini adalah benar-benar tidak perlu perintah, tetapi sentuhan.
Aku hanya menggunakannya, karena itu cara mudah untuk membuat file.
Jadi menyentuh, sentuh b, c sentuh hanya akan membuat tiga file disebut,
b, dan c yang benar-benar kosong.
Jadi titik saya menciptakan orang-orang di tempat pertama hanya begitu rm yang
bagaimana kita bisa menghapusnya.
Jadi rm, a.
Itu akan bertanya kepada saya, hapus reguler kosong file?
Dan kemudian aku akan mengatakan ya.
>> Jadi jika saya tahu pasti bahwa saya ingin menghapus file yang tanpa harus
diminta, menghapus file kosong biasa?, kemudian rm, dasbor, f akan menjadi
flag yang mengatakan, memaksa menghapus tanpa bahkan mendorong saya, oh, kau
Yakin ingin menghapus file?
Ya, saya yakin.
Jadi rm, dash, fb hanya akan melakukannya tanpa bertanya.
>> Jadi mari kita membuat beberapa direktori lagi.
mkdir, tmp2, cd, tmp2, menyentuh sentuhan, b.
OK.
Jadi sekarang saya ingin menghapus tmp2 sebagai sebuah direktori.
Tmp2 Jadi rm.
Anda tidak dapat menghapus tmp2, itu adalah sebuah direktori.
Jadi masalah di sini adalah bahwa rm tidak segera bekerja pada direktori.
Ini hanya dimaksudkan untuk file seperti file non-direktori.
>> Jadi apa yang bisa kita lakukan di sini adalah rm, dash, r.
Itu singkatan rekursif, yang mungkin tidak berarti apa-apa bagi Anda belum.
Tetapi ketika Anda mendapatkan ke rekursi, itu akan berarti lebih banyak.
Jadi rm, dash, r, tmp2 akan rekursif masuk ke direktori tersebut.
Jadi turun ke direktori tmp2?
Ya, mari kita pergi ke dalam.
Apakah kita ingin menghapus tmp2 / a?
Ya.
Apakah kita ingin menghapus tmp2 / b?
Ya.
Sekarang kita ingin menghapus yang tmp2 direktori?
Ya.
Dan sekarang direktori dan segala sesuatu di dalam
itu telah dihapus.
>> Ada teknis rmdir perintah yang dapat Anda gunakan untuk menghapus
direktori, tetapi hanya bekerja pada direktori kosong pula.
Dan untuk melihat bahwa, mari kita melakukan mkdir, tmp2 lagi.
Tmp2, sentuh.
OK.
Jadi jika saya mencoba untuk menghapus dirtmp2, itu akan mengatakan, direktori tidak kosong.
Jadi saya cukup banyak tidak pernah menggunakan remove perintah dir pula, karena rm, dash,
r akan bekerja pada direktori kosong dan direktori yang tidak kosong.
>> Dan juga, jika saya tidak mau harus pergi melalui seluruh proses
turun ke dalam direktori dan menghapus setiap file individu, rm,
dash, rf, tmp2.
Dan sekarang hilang.
>> Sesuatu untuk berhati-hati tentang adalah rm, dash, rf.
Dan aku takut bahkan mengetiknya, karena jika saya tidak sengaja
tekan Enter atau sesuatu.
Jadi rm, dash, rf, tilde akan, tanpa mendorong saya, f tidak meminta
saya, maka secara otomatis akan menghapus seluruh direktori rumah saya dan
segala sesuatu di dalamnya.
Jadi, Anda mungkin berpikir itu hal yang bodoh untuk dilakukan.
Dan juga, itu.
>> Tapi itu bisa terjadi dengan sangat mudah oleh kecelakaan jika, katakanlah, aku ingin menghapus
slash saya, direktori vhost.
Dan hanya dalam mengetik cepat, Saya sengaja melakukan hal ini.
Yang akan menghapus secara rekursif kedua saya direktori home dan direktori vhost
dalam direktori tertentu yang hanya kebetulan tidak ada sekarang.
Tapi ini masih akan menghapus seluruh direktori rumah saya.
Setidaknya dengan tidak memiliki f, itu akan mendorong saya dulu.
Dan aku akan seperti, oh, tidak, aku tidak ingin melakukan itu.
Tetapi orang-orang, slash, termasuk saya cenderung untuk masuk ke
kebiasaan selalu rf-ing.
Bahkan file biasa bahwa saya hanya bisa rm, c, saya cenderung hanya rm, dash, rf, c.
Hanya berhati-hatilah ketika Anda rf-ing.
>> SPEAKER 4: Apa C lakukan?
>> ROB: C Aku sedang berbicara tentang file C dalam direktori ini, rm itu, c.
>> JOSEPH: Dan yang lebih berbahaya, jika Anda menggunakan bintang, mengacu pada segala sesuatu di
direktori.
Jadi apa yang saya biasanya cenderung lakukan adalah saya akan masuk ke direktori dan saya ingin
menghapus semua file di sana.
Jadi rm, dash, rf, bintang.
>> ROB: Ya.
Rm, dash, rf, bintang.
>> JOSEPH: Dan jika Anda tidak hati-hati direktori apa Anda berada di -
Aku tidak di temp, tapi aku sengaja dalam direktori rumah saya,
maka saya akan menghapus segala sesuatu dalam direktori rumah saya.
Dan aku benar-benar melakukan itu sebelumnya, dan Saya pikir Anda telah melakukan ini sebelumnya atau
Jay telah melakukan itu sebelumnya.
>> ROB: Aku sengaja dihapus -
sehingga mengabaikan perintah itu untuk sedikit.
>> JOSEPH: Tidak menyenangkan.
>> ROB: Jadi di direktori bin slash adalah sekelompok file biner mana ada akan
menjadi yang familiar seperti dentang.
Nah, dentang dan pada dasarnya semua ini hal-hal yang aku berjalan pada perintah
line dalam direktori bin slash.
>> JOSEPH: Seperti ls adalah di sini.
>> ROB: Jadi dot, garis miring, ls akan daftar direktori ini.
>> JOSEPH: Rm juga dalam direktori ini.
>> ROB: Saya tidak sengaja rm, rf-ed bin, yang dihapus perintah apapun yang saya bisa
mungkin pernah mau.
Yang kemudian saya hanya instal ulang Peralatan baru pada saat itu.
>> JOSEPH: Jadi berhati-hati ketika Anda menggunakan perintah ini.
>> AUDIENCE: [Tak terdengar]?
>> ROB: Ya.
Itu juga merupakan kebiasaan buruk untuk masuk ke dalam.
Jika Anda perhatikan, aku sekarang -
baik, Anda tidak bisa melihat, tapi saya zoom-in mungkin bisa.
Jadi aku sekarang root @ alat.
Jadi jharvard adalah pengguna yang kita inginkan Anda untuk selalu menggunakan.
Root adalah pengguna yang memiliki izin untuk melakukan apa-apa.
>> Jadi melihat ketika aku jharvard, jika saya mencoba untuk cd -
apa sebuah direktori yang?
Oh, akar adalah contoh yang baik.
Jadi cd, root.
Izin ditolak.
Karena jika kita melihat daftar ini -
dan sekali lagi, Anda tidak perlu sepenuhnya memahami hal ini.
Tapi tiga strip yang dikatakan yang tidak membiarkan yang lain
pengguna ke direktori ini.
Dan direktori terjadi pada dimiliki oleh user root.
>> Jadi fakta bahwa saya jharvard dan tidak ada orang yang tidak diizinkan masuk ke root
direktori ini, itu berarti bahwa aku akan mendapatkan izin ditolak ketika saya
mencoba untuk cd ke dalamnya.
Jadi ketika saya root, saya memiliki izin untuk melakukan apa-apa, termasuk
menghapus file penting ke Appliance dan
menghancurkan seluruh hal.
>> Jadi itu adalah kebiasaan buruk untuk masuk ke hanya berkeliaran Anda
sistem operasi sebagai root.
Saya tetap melakukannya.
Pertanyaan?
Dan aku akan keluar akar, tetap sebagai jharvard.
OK.
>> Perintah lebih relevan.
Jadi kembali ke suhu kami, mv perintah singkatan bergerak.
Anda dapat memindahkan.
Sekarang kita ingin menyebutnya b, jadi sekarang itu disebut b.
Atau mungkin kita ingin memindahkan b satu direktori.
Jadi sekarang ini direktori kosong.
Aku akan kembali ke direktori rumah saya, dan kita melihat bahwa b adalah di sini, karena
direktori home adalah salah satu direktori naik dari direktori yang b telah masuk
>> Ada juga cp.
Jadi cp adalah menyalin Super section, dot, teks.
Saya bisa menyebutnya s, dot, teks.
Sekarang kita memiliki keduanya yang super seksi, dot, teks, dan s, dot, teks.
Hal ini juga bekerja pada direktori.
Aku rf-ed satu file.
Jadi cp -
baik, pertama mari kita coba cp, tmp, tmp2.
Jadi menghilangkan direktori tmp.
Jadi mirip dengan rm, perilaku default adalah untuk tidak bekerja pada direktori.
>> Dan lagi, mirip dengan rm, default perilaku - baik, mendapatkan itu untuk bekerja
dengan direktori adalah, dash-r pergi.
Jadi menyalin rekursif temp direktori ke tmp2.
Dan sekarang kita memiliki keduanya tmp dan tmp2, dan itu tidak membantu karena tmp
kosong di tempat pertama.
Tmp2.
>> Sekarang mari kita salin tmp ke tmp2.
Dan kita melihat bahwa tmp2 juga memiliki file , karena direktori dan
segala sesuatu di dalam itu direktori disalin.
Dan itu bisa agak membantu jika, katakanlah Anda bekerja
pada masalah menetapkan satu -
atau sebenarnya, set masalah kemudian adalah bahkan lebih penting, karena ada
akan menjadi seluruh bunch file dan hal-hal.
>> Tapi Anda hanya ingin, untuk sepersekian kedua, Anda seperti, baiklah, aku
akan mencoba sesuatu yang berbeda.
Mari saya hanya menyalin seluruh pset1 saya direktori ke pset1 cadangan sehingga jika
Saya akhirnya mengacaukan segalanya, saya bisa kembali ke direktori backup saya.
Ada cara yang lebih tepat versioning back up kode Anda, tetapi
ini selalu cara cepat untuk hanya membuat Pastikan Anda memiliki salinan dari sesuatu
bahwa Anda akan memodifikasi.
>> Begitu gema juga merupakan perintah satu-off yang jenis sillily hanya akan mencetak ke
baris perintah apa Anda ingin echo.
Jadi gema hi.
Kami hanya akan mencetak hi.
Echo hello world.
Kami akan mencetak hello world.
Yang datang ke dalam digunakan ketika Anda mulai menggabungkan perintah.
>> Dan lagi, jangan berharap Anda untuk sepenuhnya memahami hal ini, tapi itu
sesuatu untuk melihat.
Dan kemudian jika Anda Googling untuk contoh atau Anda sadar bahwa Anda ingin melakukan
sesuatu, itu dapat membantu.
Jadi mari kita, sebagai contoh, sehingga ls, dasbor, l.
Jadi di sini saya melihat output dari ls, dasbor, l.
Dan saya katakan, OK, saya ingin menyimpan bahwa ke dalam sebuah file.
Semua output ini di sini, saya ingin untuk dimasukkan ke dalam file terpisah.
>> Jadi ini sedikit lebih besar dari simbol adalah apa yang kita akan menelepon.
Kami mengarahkan output ke sebuah file.
Mari kita sebut file bla, karena itulah apa yang saya cenderung untuk selalu menyebutnya.
Jadi sekarang kita melihat kita memiliki mengajukan bla di sini.
Dan jika saya membukanya, saya akan melihat itu persis output dari perintah
bahwa saya hanya berlari.
Dan juga, Anda bisa -
jika ini adalah output ke file, ini adalah mendapatkan input dari sebuah file.
Apa perintah yang saya -
>> JOSEPH: Saya pikir Anda dapat menggunakan kurang atau lebih, mungkin.
>> ROB: Tapi bagaimana hanya kurang bla?
Saya tidak tahu.
Jika Anda datang ke dalam skenario ini, seperti ada psets bahwa itu berguna untuk.
>> JOSEPH: Anda dapat pipa ke echo.
Pipa file ke dalam gema untuk melihatnya.
>> ROB: Ini pipa.
>> JOSEPH: Maaf.
>> ROB: Baiklah.
Jadi ini adalah output ke file.
Ini adalah mendapatkan teks dari file dan menyerahkannya ke program.
Dan Anda juga akan melihat orang ini.
Jadi ini semacam melakukan keduanya sekaligus.
Dan sebenarnya, saya akan memperkenalkan dua baru perintah hanya untuk memanfaatkannya.
>> Sejarah adalah perintah berguna yang hanya akan mencetak daftar
apapun yang saya pernah menjalankan baris perintah.
Jadi kita lihat di sini segala sesuatu yang saya miliki sudah berjalan sepanjang waktu ini.
Banyak ls itu.
>> Dan perintah lain yang berguna adalah bahwa grep tujuannya adalah untuk mencari lebih
teks mencari pola, baik, mencari apa pun yang Anda
ingin mencari.
Dan penggunaan praktis di sini adalah, katakanlah kami ingin mengambil sejarah.
Dan aku ingin mencari perintah di mana saya - apa yang
berguna satu yang harus dicari?
>> JOSEPH: [Tak terdengar]?
>> ROB: Atau mari kita mencari semua menyentuh, untuk alasan apa pun.
Jadi ini adalah apa yang akan terlihat seperti.
Dan Anda tidak harus benar-benar memahami bahwa.
Tapi gagasan itu ada di sini, sejarah adalah memberikan output yang sama itu di sini
mana itu mencetak seluruh yang sejarah dari segala sesuatu yang pernah saya jalankan.
Kami kemudian melewati itu -
Jadi alih-alih mencetak ke layar, kami ingin mengirimkannya ke
perintah grep yang mencari semua contoh sentuhan kata.
>> Dan menggunakan kombinasi dari alat sejarah dan grep, aku bisa melihat, OK,
inilah semua perintah yang pernah saya berjalan, dan inilah yang agak umum.
Kami berada di bagian bawah.
Dan itu juga memberi saya perintah Aku hanya berlari yang memiliki
sentuh kata di dalamnya.
Tapi pipa adalah hal yang cukup berguna untuk menggabungkan beberapa program.
Dan sebenarnya, itu adalah jalan pintas untuk membiarkan saya sejarah output ke file bla, dan
biarkan aku grep menggunakan file bla seperti apa yang saya ingin melihat lebih.
Jadi pipa hanya jalan pintas bagi mereka dua perintah.
Ya.
>> SPEAKER 4: [Tak terdengar]?
>> ROB: Ya.
Apa -
Oh.
Mari kita coba.
Jadi kucing, anjing, ikan.
Jadi saya ingin grep.
Dash, r, sekali lagi, akan menjadi rekursif, jadi saya ingin turun ke bawah
semua direktori.
Saya ingin secara rekursif grep untuk semua - dan biarkan aku sementara mendapatkan
keluar dari jalan ini.
Mengabaikan saya.
OK.
>> Jadi saya ingin untuk sementara grep untuk semua contoh ikan kata.
Dan jadi di sini apa yang saya lakukan adalah grepping rekursif untuk ikan kata.
Dan bintang berarti atas semua ini file dalam direktori ini.
Dan itu memberi saya Izin Ditolak, karena tidak diperbolehkan untuk membaca bahwa
file tertentu.
Tapi menemukan ikan dalam file, tes.
>> Saya juga bisa mengatakan, secara khusus, saya hanya ingin melihat di file bla, di
hal itu tidak akan menemukan apa-apa.
Saya hanya ingin melihat dalam file, tes.
Ini akan mencari ikan.
Itu adalah perintah yang cukup berguna untuk mengetahui secara umum.
Ada beberapa alternatif untuk grep yang seharusnya lebih
programmer ramah, tapi saya cenderung masih jatuh kembali grep.
Pertanyaan?
OK.
>> Apakah ada perintah lain?
Oh.
Hanya satu-off salah satu yang saya selalu menemukan akan menyenangkan adalah cal.
Jadi perhatikan ketika saya di ini indah modus layar penuh, saya tidak seperti gasing
toolbar atau apa pun.
Jadi cal hanya memberi saya sedikit bagus kalender yang benar
sekarang dipotong, saya asumsikan.
Tapi perintah kecil yang bagus.
>> JOSEPH: Ini adalah [Tak terdengar].
Perintah lain yang mungkin Anda miliki dilihat termasuk dentang dan membuat.
Kita akan pergi atas mereka di lebih rinci nanti.
Tetapi jika Anda telah bekerja pada PSET, Anda harus
akrab dengan mereka.
>> ROB: Baiklah.
Pertanyaan pada perintah baris hal-hal?
Baik.
Jadi mari kita beralih ke beberapa Barang C-terkait.
Variabel matematika.
OK.
Jadi sama seperti kita memiliki matematika di Scratch, Anda juga dapat menggunakan matematika dalam C.
>> Sebelum kita sampai itu sepenuhnya, jadi variabel.
Ingat bahwa setiap kali Anda mendeklarasikan variabel seperti int x atau y mengapung, Anda
harus memberikan mengetik sebelum nama variabel.
Jadi jenis yang telah kita lihat sejauh ini int, float, double, lama, yang saya
tidak benar-benar tahu apakah kita sudah terlihat bahwa sejauh ini.
>> Ada beberapa yang lain.
Kami telah melihat arang.
Ada pendek, yang seperti itu adalah kebalikan dari lama di mana itu
lebih kecil dari integer.
Kami juga telah melihat tali.
Jadi apa yang khusus tentang tali?
Mengapa saya akan mengatakan itu tidak cukup seperti int?
>> SPEAKER 4: Itu tidak benar-benar ada.
>> ROB: Ya.
Jadi satu-satunya alasan kita punya string karena ketika Anda melakukan
hash, termasuk cs50.h.
Dan kita akan melihat contoh ini nanti - oh, itu tidak menangani dengan baik -
mana cs50.h melakukan sesuatu sepanjang garis jenis
def, star char, tali.
>> Dan sehingga mengatakan bahwa kita bahkan tidak tahu apa bintang char adalah belum.
Tapi ini mengatakan kami ingin tali.
Setiap tempat Anda telah menggunakan tali, Anda bisa saja menggunakan star char,
yang sebenarnya adalah tipe yang ada dalam bahasa C.
Tapi kita akan mendapatkan bahwa.
Oh, dan ia pergi segera kembali.
Rapi.
>> Jadi hal yang sama dengan bool mana benar dan salah.
Itu tidak benar-benar tipe built-in di C. Sebaliknya, itu hanya, hal ini memiliki
nol nilai?
Maka kita hanya akan mempertimbangkan untuk menjadi palsu.
Apakah ini ada nilai -
baik, hal ini memiliki nilai yang tidak nol?
Kemudian kita akan mempertimbangkan untuk menjadi benar.
Jadi salah satu yang benar, keduanya adalah benar, sesuatu nol benar.
Jadi mereka adalah orang-orang.
Pertanyaan pada variabel menyatakan dan jenis variabel dan semua itu?
Ya.
>> SPEAKER 4: Untuk lama, dalam buku, katanya itu harus int lama.
Tapi lama lama akan bekerja?
>> ROB: Jadi jenis pengubah ini.
Jadi int x.
Jadi kita juga bisa mengatakan int x unsigned.
Kita dapat mengatakan pendek int x.
Kita dapat mengatakan lama int x.
Tapi hampir semua hal-hal yang saya hanya berkata, unsigned int, short int,
lama int, Anda dapat menyingkirkan int dan hanya akan menganggap
bahwa Anda berarti int.
Jadi x unsigned, yang hanya berarti -
Anda tahu bagaimana biasanya dengan int, Anda dapat mengatakan x sama dengan negatif 3?
Dengan int unsigned, Anda tidak bisa.
>> JOSEPH: Dan sekali lagi, untuk kamera, Pertanyaannya adalah, apa bedanya
antara int lama dan hanya lama?
>> ROB: Ya.
Jadi saya akan hampir tidak pernah menulis lama int.
Aku akan menulis lama.
>> JOSEPH: Ada pertanyaan?
>> ROB: OK.
Pengingat kecil sehingga konyol itu bagaimana kita mendeklarasikan variabel dan inisialisasi
variabel dan menyatakan lain variabel dan menginisialisasi
itu semua dalam satu langkah.
Jadi deklarasi variabel dan variabel inisialisasi tidak memiliki
untuk tetapi bisa pada baris yang sama.
>> Jadi kita memiliki operator matematika standar bahwa Anda digunakan untuk -
ditambah, dikurangi, membagi, kali.
Ada juga Modulo, yang akan kita lihat.
Tidak ada, setidaknya dalam C, kekuatan built-in
Operator sisipan eksponensial.
Nah, ada operator tanda sisipan, tapi itu bukan kekuasaan.
>> JOSEPH: Tapi itu tidak eksponensial, ya.
>> ROB: Jangan gunakan tanda sisipan untuk menganggap bahwa itu berarti
seperti kuadrat atau apa pun.
Jadi beberapa hal yang perlu pikiran tentang pembagian.
Aku akan berdiri.
Jadi menyatakan initialize jawaban.
Jadi kita katakan mengapung jawaban sama dengan 1 dibagi dengan 10.
Cetak jawaban untuk dua tempat desimal.
>> Dan ini adalah semacam hal yang saya akan manusia printf untuk mengetahui bahwa
apa tidak sih%, dot, berarti 2f?
Dan itu hanya berarti, baik, mengabaikan 0.2.
Dan%, f adalah apa yang kita gunakan untuk mencetak mengapung.
The 0,2 mengatakan, cetak yang mengapung ke dua tempat desimal.
Jadi program ini memiliki bug, dan Anda mungkin telah melihat hal ini sebelumnya di beberapa
Tentu CS sebelumnya.
Tapi apa bug itu?
>> SPEAKER 5: Zero.
>> ROB: Ya.
Jadi ketika kita mengatakan, jawabannya sama 1 dibagi dengan 10, kita ingin
menjawab menjadi 0,1.
Tapi 1 dibagi dengan 10, 1 adalah integer, 10 adalah bilangan bulat.
Dan ketika kita melakukan integer dibagi dengan integer, kita akan kembali
integer.
Jadi 1 dibagi dengan 10 adalah 0,1.
>> Karena perlu memberi kita integer, itu hanya akan membuang bahwa
desimal dan mengatakan bahwa jawabannya adalah 0.
Dan ketika kita mencetak menjawab di sini, itu akan mencetak 0.00.
>> JOSEPH: Dan sebagai catatan, itu benar-benar membuang apa setelah
titik desimal.
Jadi, jika Anda malah memiliki 6 dibagi dengan 10, Anda mungkin berpikir bahwa itu akan memberi Anda
0,6 dan kemudian Anda akan mengumpulkan 1.
Tapi sebenarnya, apa yang terjadi ketika mengetik tugas itu adalah bahwa tetes apa yang
setelah titik desimal.
Jadi 0,6 tidak menjadi 0.
>> ROB: Ya.
Dan kita akan mengatakan truncate untuk itu.
Jadi, setiap kali Anda melemparkan ke int, desimal yang dipotong.
Jadi untuk memperbaiki itu - ada sebenarnya dua.
Dan aku akan melakukan itu kedua, karena yang satu ini adalah memperbaiki jauh lebih mudah.
>> Jadi salah satu fix adalah menggunakan pelampung di divisi.
Dan benar-benar, Anda hanya perlu membuat salah satu dari mereka pelampung.
Tapi itu agak jelas hanya untuk membuat keduanya mengapung.
Jadi 1,0 dibagi dengan 10,0 membagi dua mengapung.
Jadi jawabannya akan berakhir menjadi pelampung, dan sehingga Anda akan
mencetak dengan benar 0.10 di sini.
>> Sesuatu yang tidak bekerja dengan baik tentang yaitu, baik, tentu, itu mudah
cukup untuk mengkonversi 1 ke mengapung dengan membuatnya 1.0.
Tapi bagaimana kalau sebaliknya kita punya dua bilangan bulat seperti int x sama dengan 1 dan int y
sama dengan 10, dan kemudian kami ingin untuk melakukan x dibagi dengan y?
Jadi tidak mudah untuk hanya melakukan x.0 atau sesuatu.
>> Jadi fix untuk yang casting.
Jadi pengecoran adalah cara C untuk mengkonversi dari satu jenis variabel yang lain.
Jadi di sini, 1 adalah bilangan bulat.
Dan dengan menempatkan pelampung ini di depan itu, kita casting 1 ke float.
Dan jadi ini akan mengkonversi 1 sampai 1,0.
Dan ini akan mengkonversi 10 ke 10,0.
>> Dan kemudian hal berperilaku mirip dengan versi sebelumnya kita hanya menunjukkan
di mana, seperti yang diharapkan, kita mendapatkan 0,10 dan ia akan mencetak bahwa.
Dan kita bisa melakukan hal ini dengan variabel juga.
Jadi kita dapat mengatakan, float x dibagi dengan mengapung y.
>> JOSEPH: Ada pertanyaan?
>> ROB: Jadi sama seperti dalam matematika biasa, kita memiliki operator didahulukan.
Jadi di kelas matematika, Anda lebih mungkin menyebutnya urutan operasi.
Di sini, istilah resmi didahulukan operator.
Tapi didahulukan operator, atau paling operator, adalah seperti yang Anda harapkan.
>> Jadi seperti di matematika, 2 kali 10 adalah akan dikelompokkan lebih erat dari
10 ini dibagi dengan 2 dan kemudian 2.
Urutan operasi, ia akan melakukan 2 kali 10, 10 dibagi 2, dan kemudian
akan melakukan 20 ditambah 5 ditambah 2.
Jadi seperti yang diharapkan, dan Anda dapat menggunakan kurung untuk ekspresi kelompok.
Anda tidak dapat menggunakan tanda kurung siku untuk ekspresi kelompok.
Ya?
>> SPEAKER 5: Bisakah Anda benar-benar hanya kembali satu detik?
Dapatkah Anda melemparkan int ke string?
>> ROB: Jadi di C, Anda dapat melemparkan sesuatu Anda ingin apa pun yang Anda inginkan.
Itu tidak berarti itu hal yang baik untuk dilakukan.
Jadi, ketika Anda melemparkan int untuk string, yang berarti -
dan kita akan masuk ke ini jauh lebih teliti -
>> JOSEPH: Banyak kemudian.
>> ROB: Aku tidak ingin banyak bicara nanti, jadi saya mencoba untuk mengubah kalimat saya.
Kita akan ke dalamnya jauh lebih teliti kemudian di mana benar-benar ketika Anda memiliki
variabel string -
sehingga string dapat sewenang-wenang panjang, kan?
Dan kami telah mengatakan bahwa int adalah empat byte dan lama adalah delapan
byte dan pelampung adalah empat byte.
Jadi string, seperti int, hanya memiliki sejumlah byte untuk itu.
Dan itu akan menjadi empat byte.
>> Tapi string bisa sangat sewenang-wenang panjang, kan?
Jadi hello world sudah, kalau itu 10 karakter atau apa pun, yang sudah
akan menjadi lebih dari 4 byte Saya bisa masuk ke dalam string.
Dan jadi bagaimana string benar-benar bekerja adalah bahwa mereka di mana dalam memori string yang
sedang disimpan.
>> Dan di sini, ketika saya mengatakan String x sama dengan hello world, dalam x adalah
hanya mengatakan, oh, hello world disimpan di tempat ini khususnya dalam memori.
Jadi jika kita mencoba untuk melemparkan sebuah integer ke String, maka kita mencoba untuk menafsirkan
beberapa bagian acak dari memori sebagai string.
Dan itu hampir selalu istirahat hal.
>> JOSEPH: Tapi kalau itu Bingung Anda, kami akan menutupinya
lebih mendalam nanti.
>> ROB: Ya.
Ini adalah di mana Anda akan untuk masuk ke pointer.
Dan itu adalah sepotong signifikan dari dua minggu dari kursus ini.
>> SPEAKER 6: Apakah itu bekerja seperti benda dalam bahasa lain atau tidak benar-benar?
>> ROB: Jadi dalam bahasa lain, benda akan diwakili menggunakan pointer.
Ini bukan hal yang sama, meskipun.
Setiap pikiran?
>> JOSEPH: No
Tidak ada pikiran.
>> ROB: OK.
>> JOSEPH: Next.
>> ROB: Hanya pergi dengan itu.
Baik.
Jadi modulo.
Sama seperti kita memiliki ditambah, dikurangi, membagi, dan mengalikan.
Jadi modulo adalah salah satu Anda mungkin tidak pernah melihat sebelumnya.
Dan itu hanya mengatakan, memberikan saya sisa.
Jadi 55% 10.
Sisa melakukan 55 dibagi dengan 10 akan menjadi 5.
Jadi 55% 10 adalah 5.
Dan 3% 5 akan menjadi 3.
8% 8 akan 0.
16% 15 akan 1.
>> JOSEPH: Satu hal yang perlu diperhatikan dengan hal ini, juga, mungkin tidak bekerja seperti yang diharapkan
jika Anda menggunakan angka negatif.
Jadi negatif 5% 4, beberapa orang mungkin berpikir bahwa ini -
apa yang akan Anda pikirkan negatif 5% 4 akan?
>> SPEAKER 5: One.
>> JOSEPH: Jadi beberapa orang mengatakan satu, beberapa orang mengatakan satu negatif.
Tapi apa -
>> ROB: Aku bahkan tidak akan kata salah satu dari mereka.
>> JOSEPH: Dua, maaf.
Beberapa orang mengatakan -
>> ROB: Tiga.
>> JOSEPH: Tiga?
>> ROB: Negatif -
apa adalah - negatif lima -
>> JOSEPH: Tiga, tiga, tiga.
Maaf.
Karena modulus, umumnya, ketika Anda sudah melihatnya di tempat lain, biasanya berarti
kembali angka positif, kan?
>> ROB: Jadi ketika kita mengatakan dalam matematika, 10% itu, mereka cenderung ingin memberikan -
jika kita mod oleh 10, maka kita berharap untuk mendapatkan nomor antara 0 dan 9.
Di sini, itu tidak terjadi bahwa Anda akan mendapatkan angka negatif kembali.
>> JOSEPH: Jadi negatif 5% 4 akan menjadi negatif 1.
>> ROB: Tapi itu jarang terjadi bahwa Anda mod-ing angka negatif untuk memulai.
Melewatkan ini.
>> JOSEPH: Ya.
>> ROB: Meh.
OK.
Jadi satu hal untuk menunjukkan tentang mengapung itu adalah perilaku yang berbahaya,
tetapi mengapung bukan merupakan tepat representasi.
Jadi kembali ke byte lagi, ingat bahwa int selalu empat byte dan
mengapung selalu empat byte.
Jadi contoh Lucas cukup bagus.
>> Jadi pikirkan 1 dibagi dengan 3.
Jadi 0,3333333.
Jika saya hanya memiliki 32 bit, bagaimana bisa Saya menyimpan 0,33333 tepatnya?
Dan mungkin, karena alasan apapun, Anda katakan, baik-baik saja, baik, katakan saja
yang khusus ini 1011001, mari kita hanya mengatakan bahwa harus 0,333333.
Nah, Anda hanya memiliki jumlah terbatas mereka bit, sehingga tidak mungkin untuk
mewakili setiap floating point tunggal nilai yang diberikan hanya 32 bit.
>> Yah, tidak mungkin untuk mewakili nilai floating point yang diberikan tak terbatas -
baik, diberi jumlah terbatas bit.
Jadi masalah di sini adalah, baik, ketika kita menggunakan mencetak ke dua tempat desimal,
kami benar mendapatkan jawaban 0,10.
Tapi di bawah tenda, itu benar-benar disimpan sedekat mungkin dengan
0.10 seperti yang bit dapat mewakili.
Apakah ini pada slide berikutnya?
Atau tidak?
>> JOSEPH: Ya, itu yang.
>> ROB: Blegh, blegh.
>> JOSEPH: Ya, Anda hanya dapat tarik catatan sedikit.
>> ROB: Aku hanya akan untuk memperbesar dalam pada yang terakhir itu.
Oh my gosh, itu [Tak terdengar].
Jadi nomor itu.
Itulah yang akan dicetak jika kita menjalankan program itu.
Dan perhatikan bahwa tidak benar-benar masalah besar jika kita hanya peduli tentang seperti
2-3 desimal.
Seperti kita hanya awalnya dicetak 0,10, dan itulah sebabnya kita melihat ada yang salah.
Tapi begitu kita mulai masuk ke tepat, jumlah pasti bahwa itu
mewakili, kita melihat bahwa itu tidak bisa persis mewakili 0,1.
>> Dan bagian dari masalah di sini adalah seperti, semua benar, itu bagus, tapi, well,
pertama, bagaimana kalau kita coba lakukan, Jawabannya sama sama 0.1?
Apakah itu akan kembali benar atau salah?
Dan jadi sulit untuk mengatakan.
Saya pikir itu benar-benar bisa kembali benar.
Akankah pertama -
Saya tidak tahu.
Jawabannya adalah setelah Anda mulai berurusan dengan nilai-nilai floating point, Anda cukup
banyak tidak harus menggunakan persamaan karena ketidaktepatan ini.
>> Dan untuk semua yang Anda tahu, itu keseratus tempat desimal bahwa
floating point tidak bisa dengan benar menangani.
Dan kesetaraan hanya akan gagal bahkan meskipun angka - jika Anda telah
menggunakan angka pastinya, angka harus telah persis sama.
Ini selama seperti 50 perhitungan menggunakan ini mengambang
point nilai, kesalahan dapat membangun up dan naik dan naik, dan
hal-hal hanya mendapatkan salah.
>> JOSEPH: Dan ada telah benar-benar contoh terkenal terjadi ini.
Seperti insinyur NASA mendapatkan ini salah, menyebabkan roket meledak di
udara setelah mereka telah diluncurkan.
Dan banyak masalah seperti itu.
Jadi ya.
>> SPEAKER 6: Ketika Anda mengatakan 0,3 f, apakah itu memotong sisanya?
Atau apakah itu mengumpulkan atau bawah?
>> ROB: Akan printf bulat itu?
>> JOSEPH: saya pikir memotong printf.
>> ROB: OK.
Jadi kita sama bisa masuk sebaliknya arah mana ini, dalam hal ini,
yang paling dekat bisa mewakili 0.1 adalah dengan nomor ini.
Yang paling dekat itu mungkin bisa mewakili 0,2 adalah di seberang
arah, ,199999996356 atau sesuatu.
Jadi jika kami pergi dalam arah hal, maka printf 0.3 f akan kembali
1,99 bukannya 2,00.
>> JOSEPH: Dan aku tidak sepenuhnya yakin itu.
Anda mungkin ingin menulis kecil, sedikit program untuk hanya memeriksa itu.
>> ROB: Padahal, apa yang kami yakin adalah bahwa jika Anda mencoba untuk melemparkan itu ke
int, dan casting ke int akan menyebabkan memotong desimal, jika
Anda mencoba untuk melemparkan 1.9999999 ke int, Anda akan mendapatkan 1.
Dan sehingga Anda harus umumnya menggunakan Fungsi putaran di perpustakaan matematika.
Pertanyaan?
OK.
>> JOSEPH: Jadi pindah ke kondisi dan ekspresi Boolean.
Jadi, Anda telah melihat ini sebelumnya.
Dan sebenarnya, saya pastikan saya komputer ada di format yang tepat di sini.
Space.
Maaf, kita akan harus berurusan dengan sedikit dengan cutoff di pinggiran.
>> Tapi ya, kalian telah melihat ini sebelumnya di Scratch.
Jadi hak ini di sini adalah ekspresi yang digunakan dalam
pernyataan kondisional.
Jadi menjawab lebih besar dari nol akan memberitahu Anda benar atau salah.
Dan ini benar-benar penting, karena mereka memungkinkan kami untuk memperkenalkan
logika ke dalam kode kita.
>> Jadi misalnya, ini adalah program ditulis dalam Scratch yang meminta pengguna
untuk integer dan mengatakan kepada mereka apakah integer yang mereka memberi Anda adalah
positif atau negatif nomor.
Dan konversi di sini untuk melihat adalah Anda pertama kali mencetak pernyataan,
memberikan saya sebuah integer.
Dan kemudian Anda meminta mereka untuk integer.
>> Dan kemudian Anda menggunakan logika bersyarat atas di sini untuk memeriksa apakah nomor yang
sebenarnya lebih besar dari nol atau tidak.
Jadi di sini kita memiliki ekspresi Boolean dalam bersyarat Jika pernyataan.
Apakah ada pertanyaan?
Apakah ada pertanyaan tentang hal itu?
OK.
>> Jadi ada lebih dari sekedar lebih besar dari, tentu saja.
Anda dapat membangun ekspresi Boolean menggunakan sebagian besar jenis hal yang Anda
akan berpikir dalam matematika.
Jadi lebih besar dari.
Itu seharusnya menjadi kurang dari.
Maaf.
Dan jarak.
>> ROB: Allah melarang Anda meninggalkannya.
>> JOSEPH: Baiklah.
Jadi lebih besar dari, kurang dari, lebih besar dari, atau sama dengan, kurang
dari, atau sama dengan.
Kami menggunakan equals ganda untuk memeriksa kesetaraan, karena satu sama berarti
tugas, kan?
Ya.
Dan kemudian kita bisa juga tidak sama dengan menggunakan tanda seru, sama.
>> Dan ini simbol tanda seru dapat juga diperpanjang sehingga jika Anda ingin
untuk membalikkan apapun Boolean ekspresi, Anda bisa melakukan itu.
Jadi ini akan mengevaluasi dengan benar hanya jika jawabannya kurang
dari atau sama dengan nol.
Setiap pertanyaan itu?
OK.
>> Jadi, Anda juga dapat menggabungkan ini ekspresi menggunakan logika Dan dan
Atau logis.
Jadi ini hanya simbol dan, yang harus Shift, 7.
Dan ini adalah simbol pipa, yang bukan kasus yang lebih rendah L. Itu salah satu yang
itu tepat di atas tombol Enter Anda.
Jadi, Anda menggunakan dua ini untuk melambangkan logis dan logis Or.
>> Jadi ini hanya akan mengembalikan true jika jawaban adalah salah satu, dua, tiga, atau empat.
Dan ini hanya akan mengembalikan true jika jawaban adalah di luar itu di kedua sisi.
Jadi bukan satu, dua, tiga, atau empat.
Dan cara Anda akan menggunakan bahwa dalam sebuah ekspresi -
>> ROB: Atau nol atau lima.
>> JOSEPH: Nol atau lima.
Maaf.
Ya, ya, ya.
OK.
Dan di sini sekarang, dengan cara yang sama Anda akan menggunakan ungkapan itu, lebih kecil
sisi ekspresi dari Jika bersyarat pernyataan, Anda juga akan menggunakannya dalam
cara yang sama dengan hanya menempatkan itu dalam kurung dari pernyataan Jika.
Jadi printf ini hanya akan api jika jawaban adalah salah satu, dua, tiga, atau empat.
Setiap pertanyaan pada penggabungan ekspresi?
>> Jadi ada kondisional lain membangun kita sebut Jika / Lain.
Jadi pada dasarnya, ini sekarang berarti, OK, Jika sesuatu yang saya ingin memeriksa tidak
benar, kemudian pergi ke Lain dan melakukan tindakan lain.
Jadi dalam kasus ini, saya bertanya pengguna untuk integer.
Apakah integer lebih besar dari nol?
Ya?
Nah, kemudian mereka mengambil angka positif.
Jika tidak, maka harus memiliki sudah negatif atau nol.
Jadi Anda memilih angka negatif atau nol dalam kasus ini.
Ya.
Atau nol.
>> Dan kemudian kami juga memiliki Jika / Lain, Jika dan Lain.
Jadi ini memungkinkan kita mengeksekusi urutan hal hanya jika yang pertama gagal.
Jadi dalam hal ini, sekarang kita membuat yang terakhir Anda memilih nol.
Jadi, jika mereka tidak memilih positif atau angka negatif, maka mereka harus
memilih nol.
Jadi itu hanya berjalan menuruni rantai seperti ini.
>> Jadi contoh bagaimana sebuah Jika berbeda -
Jika sebuah / Lain berbeda dari hanya urutan Ifs.
Dan ini adalah pertanyaan umum yang orang tanyakan adalah, baik, jika Anda mendapatkan seperti
95 di CS50, apa yang akan ini Program memberitahu Anda?
>> SPEAKER 5: Anda mendapat A.
>> JOSEPH: Ya.
Anda punya setiap satu salah satu dari mereka benar.
Anda mendapat nilai A, Anda punya B, Anda mendapat C dan D, kan?
Jadi semua ini bisa dievaluasi dalam rangka.
Jadi sementara 95 lebih besar dari 90, itu juga lebih besar dari 80, itu juga
lebih besar dari 70, dan itu juga lebih besar dari 60.
Jadi, Anda punya semua orang nilai.
Dan saya menganggap Anda akan hanya ingin A.
>> Cara untuk memperbaikinya adalah dengan mengganti mereka yang Lain / Jika 's.
Jadi dalam skenario ini, ia melihat bahwa 95 adalah lebih besar dari 90, dan kemudian melakukan
tidak mengevaluasi sisanya laporan.
Ada pertanyaan tentang hal itu?
>> Jadi ada semacam bersyarat lain struktur yang kita miliki di sini yang kita
sebut pernyataan switch.
Jadi ini memungkinkan Anda untuk memeriksa dasarnya apa nilai dari sejumlah anda menaruh
ke dalam pernyataan switch.
Jadi dalam skenario ini, kita beralih pada n, dan kami katakan, oh, jika n adalah
satu, kemudian mencetak pernyataan itu.
Dan kemudian istirahat, yang berarti exit keluar dari pernyataan switch.
>> Kalau tidak salah, maka, baik, hanya akhirnya memeriksa semua kasus.
Dan sehingga memeriksa apakah itu satu atau dua atau tiga, dan mencetak sesuai.
Dan apa kata kunci default di sini berarti jika mereka tidak memasukkan
dari mereka, kemudian mengatakan tidak valid.
Jadi katakanlah saya minta n dan pengguna memberi saya empat.
Nah, cocok tidak ada kasus-kasus, sehingga akan mencetak apa yang ada di
bagian default.
Ya, pertanyaan?
>> SPEAKER 5: Dapatkah Anda menggunakan Boolean ekspresi bukannya
satu, dua, atau tiga?
>> JOSEPH: Jadi pertanyaannya adalah dapat Anda gunakan Ekspresi Boolean, bukan satu,
dua, dan tiga?
Dan di C, saya percaya Anda tidak bisa melakukan itu.
Namun dalam bahasa lain, yang mungkin Anda temui di akhir
semester seperti JavaScript, Anda bisa.
Nah, Anda harus menghitung terlebih dahulu bahwa nilai dan kemudian menggunakannya dalam
beralih pernyataan.
Ya?
>> ROB: Jadi bagian dari manfaat dari saklar pernyataan yang memikirkan jika Anda melakukan ini
sebagai Jika / Lain, jadi seperti jika n sama dengan sama dengan satu atau apa pun.
Lain / Jika n sama sama dengan dua, apa pun.
Lain / Jika n sama sama dengan tiga.
Jadi cara program akan dijalankan itu akan berurutan turun daftar itu
dan periksa, adalah n satu?
Tidak.
Apakah n dua?
Tidak.
Apakah n tiga?
Ya.
Lakukan ini.
>> Sedangkan dengan switch pernyataan, itu benar-benar mampu melakukan kompilasi menjadi
sangat cepat.
Dan secepat itu mengatakan switch, itu mengatakan, semua yang benar, n adalah dua, saya
segera akan melompat ke tempat Saya harus mulai menjalankan.
Aku tidak akan periksa dulu, adalah n satu, adalah n dua?
Hal ini dapat segera mulai melakukan apa yang seharusnya dilakukan.
>> Dan karena itu, tidak bisa mengambil kondisi Boolean.
Atau yang lain itu akan harus melakukan berurutan, seperti, oke, adalah n
lebih besar dari nol?
Yang lain n lebih besar dari 10 atau apa pun.
>> JOSEPH: Dalam hal ini, jika Anda menggunakan Jika / Lain, Jika, maka saklar akan
berjalan sekitar tiga kali lebih cepat daripada Jika / Lain, Jika.
Kita dapat mengatur saklar sedemikian dengan cara yang kita tidak pecah
setelah masing-masing kasus.
Jadi dalam hal ini, saya partisi nomor yang kita pilih menjadi satu dan
dua yang bukan angka yang tinggi dan tiga menjadi nomor tinggi.
>> Jadi dalam hal ini, jika n adalah satu atau dua, itu akan memukul kasus ini dan kemudian akan
jatuh melalui, karena tidak ada istirahat.
Dan itu akan berakhir di sini.
Jadi jika kita memilih salah satu, ia akan melakukan printf dan kemudian istirahat sehingga tidak ada
ini dijalankan.
Dan tentu saja, jika mereka masuk dalam tiga atau sesuatu yang lain, maka akan melewatkan
mereka dan tidak pergi ke sana, dan itu akan mengeksekusi sebaliknya
sesuai line.
Apakah ada pertanyaan tentang hal itu?
Ya?
>> SPEAKER 4: Apakah Anda mendapatkan pesan kesalahan jika Anda memiliki istirahat setelah satu kasus tapi
tidak memiliki sesuatu untuk itu lakukan?
>> JOSEPH: Jadi pertanyaannya adalah akan Anda dapatkan kesalahan jika Anda memiliki istirahat setelah
huruf satu tapi tidak ada yang harus dilakukan?
Dan jawabannya tidak.
Anda tidak akan benar-benar mendapatkan error.
Ya, hmm mm.
>> Jadi semacam sedikit perubahan di sini, Aku akan menempatkan printf di sini.
Whoops.
Jadi apa yang akan ini mencetak jika Aku menempatkan satu di sebagai masukan?
Ya.
Ini akan memberitahu Anda itu tidak mengambil sejumlah besar dua kali, kan?
Karena akan memukul bahwa kasus pertama, itu tidak akan pecah, dan itu akan jatuh
melalui kasus kedua.
Ada pertanyaan tentang hal itu?
>> ROB: Apakah Anda punya pertanyaan lain?
>> JOSEPH: OK, dingin.
Baik.
Jadi ada sesuatu yang lain yang kita sebut operator ternary yang pada dasarnya adalah
sintaks alternatif untuk melakukan Jika kemudian Lain.
Dan itu memungkinkan Anda melakukan semuanya dalam satu baris.
Jadi dalam program khusus ini, Saya meminta pengguna untuk n.
Dan jika n lebih besar dari 100, saya memberitahu mereka mereka mengambil jumlah tinggi.
Lain Saya memberitahu mereka bahwa mereka mengambil angka yang rendah.
>> Jadi kita dapat menggunakan sintaks sangat panjang ini, String, S, dan kemudian memeriksa apakah n adalah
lebih besar dari 100 dan menetapkan sesuai.
Tapi kita bisa membuat ini jauh lebih ringkas dengan menggunakan sintaks operator ternary ini
yang melibatkan sebuah pertanyaan mark dan titik dua.
Jadi tanda tanya pada dasarnya mengajukan pertanyaan, kan?
>> ROB: Mungkin memperbesar itu.
>> JOSEPH: Ya.
Good point.
Jadi ini adalah operator ternary.
Saya pertama kali mengajukan pertanyaan itu, n lebih besar dari 100?
Jika ya, maka saya jalankan pertama bagian sebelum usus besar.
Jika tidak, maka saya jalankan Bagian kedua setelah titik dua.
Jadi jika n lebih besar dari 100, maka mengambil tinggi dan menempatkan
yang menjadi string s.
Jika n adalah kurang dari 100, itu mengambil rendah dan kemudian menempatkan bahwa ke dalam string s.
Sehingga akan mengembun bongkahan besar ini ke dalam hanya satu baris.
>> SPEAKER 5: Apakah itu populer?
>> JOSEPH: Ya, itu cukup populer untuk hal mana pada dasarnya Anda ingin
melakukan tugas berdasarkan semacam kondisi.
Dan dalam hal ini, kami mencoba untuk memberikan nilai pada string s.
Ini tidak begitu -
Saya kira saya tidak benar-benar lebih dalam kasus lain.
Tapi itu sangat berguna untuk tugas ini.
>> ROB: Itulah pola yang cukup umum di mana Anda memiliki beberapa variabel yang
Anda akan mengatakan, jika sesuatu, mengatur variabel ini untuk satu nilai; lain, mengatur
variabel ini ke nilai lain.
Dan itu adalah skenario di mana menggunakan ternary a.
>> JOSEPH: Dan Anda menyimpan banyak garis, kan?
Dan itu hanya membuat kode Anda bisa dibilang sedikit lebih mudah dibaca.
Ya, pertanyaan?
>> SPEAKER 6: Untuk terner, bisa Anda pergi, String s equals s, tanda tanya?
Dan kemudian Anda bisa memiliki, katakanlah, lima pilihan yang berbeda.
Dan tergantung pada apa jumlah n itu, akan Anda memilih salah satu dari mereka?
>> JOSEPH: Jadi pertanyaannya adalah, apakah ada semacam sintaks di mana Anda dapat melakukan serangkaian
s sama dengan n, dan kemudian memiliki lebih dari dua Pilihan setelah itu tanda tanya?
Dan jawaban sederhana adalah tidak, tidak ada benar-benar cara yang baik untuk melakukan itu kecuali
Anda ingin sarang beberapa terner operator dalam satu sama lain.
>> Anda bisa melakukan seperti n lebih besar dari 100, tanda tanya, dan kemudian lain
operator ternary, n lebih besar dari 50, tanda tanya, dan sarang seperti itu.
Tapi dalam skenario itu, kode Anda yang mendapatkan jenis terbaca dan berantakan,
dan mungkin lebih baik untuk hanya pergi ke Jika pernyataan / Lain pada saat itu.
>> ROB: Dan juga, sebagai samping catatan, PHP salah menerapkan terner tersebut
Operator sehingga ternaries bersarang bahkan tidak bekerja sebagaimana mestinya.
>> JOSEPH: Ya.
Sehingga mendapat sedikit membingungkan, terutama ketika Anda pergi
untuk bahasa yang berbeda.
>> ROB: Ini membingungkan cukup bahwa bahasa yang salah tentang hal itu.
>> JOSEPH: Jadi sebenarnya, hanya untuk memperjelas, tidak semua orang tahu apa yang
% S tidak di sini?
Ada pertanyaan tentang hal itu?
Saya kira hanya untuk kamera,% s pada dasarnya memungkinkan kita menaruh placeholder
untuk string.
Dan kemudian pada akhirnya, kita menetapkan bahwa variabel kita ingin dimasukkan ke dalam ini
tempat dudukan adalah s.
Sehingga pada dasarnya mengambil s dan menempatkan di sini.
Dan kemudian akan mencetak, Anda memilih tinggi atau Anda memilih angka yang rendah.
OK.
>> Jadi loop memungkinkan Anda untuk melakukan hal-hal dalam gerakan melingkar, kan?
Anda mungkin telah mengalami ini di Gores dalam bentuk Selamanya loop
atau Ulangi Sampai atau Ulangi tertentu beberapa kali.
Lalu mengapa ini baik untuk kita?
Nah, di C, katakanlah kita punya ini lagu diimplementasikan dalam Scratch bahwa
bernyanyi, ini lagu yang tidak pernah berakhir.
Itu hanya berjalan dan terus dan selamanya dan selamanya.
Nah, Anda tidak bisa benar-benar membuat sebuah program yang memiliki jumlah tak terbatas printf
pernyataan di dalamnya, kan?
>> Jadi dalam skenario khusus ini, salah satu cara Anda bisa membuat pekerjaan ini dan
untuk membuatnya mencetak selamanya adalah untuk bukannya menggunakan loop Sementara.
Jadi loop Sementara akan mengeksekusi apa dalam tubuh dari dua kawat gigi yang
milik itu berdasarkan apa kondisi ini.
Jadi, dalam contoh khusus ini sebelumnya, jika kita ingin mencetak ini selamanya, apa
mungkin kita lakukan?
Nah, tentu, kan?
>> Jadi ini semacam menggabungkan ide beberapa ekspresi Boolean
bersama dengan loop.
Dan kita belajar tentang Boolean ekspresi sebelumnya.
Jadi, setiap kali kondisi dalam Sementara yang tetap benar, lingkaran ini
akan mengeksekusi pada dan seterusnya.
Dan dalam hal ini, jika kita hanya memasok dengan benar, ini menyebabkan tak terbatas
lingkaran yang mencetak lagu dan terus dan seperti yang kita inginkan sebelum tanpa
memiliki program yang memiliki terbatas sejumlah pernyataan printf, yang
tidak mungkin.
>> Jadi lebih compellingly, meskipun, Anda dapat menggunakan ini dengan
variabel dan kondisi.
Jadi katakanlah kita ingin mengulang frase, benar-benar gila, 10 kali.
Jadi apa yang dapat Anda lakukan dengan loop Sementara adalah Anda pertama dapat menginisialisasi counter
luar variabel Sementara lingkaran sampai 10.
Dan kemudian pada dasarnya, setiap kali Anda pergi melalui loop Sementara, Anda mencetak
pernyataan dan kemudian Anda mengurangi variabel counter sampai akhir,
di beberapa titik, setelah kami kurangi Saya cukup kali, 1 dari saya cukup kali -
dan hanya untuk memperjelas, saya dikurangi dikurangi berarti saya sama aku dikurangi 1.
>> Itu pada dasarnya akan membawa saya sampai ke titik di mana setelah saya memukul nol, ini
Kondisi tidak lagi benar dan sehingga keluar dari loop.
Jadi benar-benar gila hanya mencetak 10 kali.
Setiap pertanyaan tentang loop Sementara?
OK.
>> Jadi ada cara yang bisa kita lakukan apa yang kita lakukan dengan cara yang lebih ringkas dengan
apa yang kita sebut Untuk lingkaran.
Jadi loop Untuk terdiri dari inisialisasi, kondisi, dan
Update, seperti yang kita miliki sebelumnya Sementara dalam lingkaran ini.
Jadi mari kita lihat.
Dalam Sementara loop ini, kami memiliki inisialisasi, maka kita memiliki
kondisi yang kami diperiksa.
Dan kemudian kami memiliki update langkah di atas.
>> Dengan loop Sebab, ini pada dasarnya mengambil tiga hal dan mengembun
ke dalam satu baris.
Jadi hal pertama yang dilakukannya dalam Untuk loop inisialisasi.
Dan kemudian Anda lakukan titik koma, dan kemudian Anda melakukan kondisi, yaitu I
lebih besar dari nol berjalan di atas sana, dan kemudian langkah pembaruan.
Jadi ini akan dilakukan pada sangat akhir tubuh loop.
Jadi dua program ini dasarnya sama.
>> Ada pertanyaan?
Jadi apa satu perbedaan antara kedua?
Can anyone titik itu?
Mungkin agak halus.
Ini hanya perbedaan yang sangat kecil.
Ya?
>> SPEAKER 5: Anda tidak akan dapat menggunakan I variabel di luar lingkaran Untuk
[Tak terdengar]?
>> JOSEPH: Tepat.
Jadi ini adalah sesuatu yang kita akan sampai ke kemudian disebut lingkup variabel.
Tapi pada dasarnya, ini int saya hidup Sementara di luar lingkaran ini.
Jadi sekali Sementara loop ini dilakukan mengeksekusi, aku akan bisa menggunakan saya kemudian
di dalam program ini.
>> Sedangkan dengan ini Untuk lingkaran, int ini saya scoped dalam lingkaran ini Untuk.
Dan karena di dalam bagian ini loop Sebab, yang dimulai
di kurung dan berakhir dengan penjepit keriting di sana.
Apa pun yang dinyatakan dalam di sini tidak dapat digunakan di luar.
Jadi jika saya mencoba untuk menggunakan saya di luar, itu akan katakan padaku, simbol dideklarasikan.
Dan pada dasarnya, saya tidak akan dapat menggunakannya.
>> ROB: Dan juga, 10 tahun yang lalu, di harfiah semua kasus, kurung kurawal adalah
apa yang digunakan untuk menentukan ruang lingkup variabel.
Jadi di sana, int I sama dengan 10 dinyatakan dalam ini
set kurung kurawal.
Dan demikian maka selama Anda mencoba menggunakan I sebelum kurung kurawal ini, tidak apa-apa.
Anda mungkin melihat ketika Anda mengetikkan make, Anda lihat dash, dash, std, sama, c99.
>> Jadi itu adalah versi yang lebih baru dari C yang GCC telah menerapkan yang juga memberikan
shortcut ini.
Jadi ini digunakan tidak diperbolehkan dalam C. Dan Anda dapat melihat mengapa, karena int ini
Saya berada di luar kurung kurawal ini tetapi itu masih dianggap dalam
lingkup ini kurung kurawal.
Tapi ini adalah hal yang sangat nyaman, dan sehingga merupakan ekstensi yang baik.
>> JOSEPH: Ada pertanyaan?
OK.
Jadi apa yang lebih bermanfaat adalah bahwa kadang-kadang Anda ingin semacam dinamika di
loop Anda, kan?
Anda tidak ingin hanya selalu mencetak benar-benar gila sepanjang waktu, Anda
ingin menghitung mundur dari 10 atau sesuatu.
Dan sehingga Anda dapat menggunakan variabel counter dalam lingkaran itu juga.
Dan dalam hal ini, program ini hanya menghitung mundur dari 10 ke bawah.
Dan apa yang tidak mencetak?
Ia tidak mencetak nol, benar, karena ketika -
Ya, itu juga tidak mencetak 11.
>> Jadi tidak mencetak nol, karena ketika Saya adalah nol, ingat, itu mengevaluasi
kondisi sebelum melanjutkan untuk menjalankan tubuh loop.
Dan ketika saya adalah nol, ini adalah palsu, sehingga tidak mencetak menghitung mundur
nol, itu hanya mencetak menghitung turun 10 semua jalan ke 1.
Jika kita benar-benar ingin untuk mencetak nol, maka kita akan menempatkan tanda sama
setelah ini lebih besar dari tanda.
OK.
>> Jadi salah satu cara untuk melakukan validasi input, yang adalah ketika Anda meminta pengguna untuk melakukan
sesuatu, Anda ingin memastikan bahwa mereka mengikuti instruksi Anda, adalah dengan menggunakan
loop Sementara, kan?
Jadi dalam kasus ini, aku bertanya untuk angka positif dan kemudian aku
menunggu input.
>> Dan kemudian aku memeriksa Sementara input kurang dari nol, tetap meminta mereka.
Jadi selama mereka memberi saya nomor yang tidak positif, terus bertanya,
terus bertanya, terus bertanya.
Tapi apa adalah semacam aneh tentang ini?
Atau apa yang tampaknya tidak optimal tentang Struktur ini di sini?
Siapa saja?
Ya?
>> SPEAKER 6: Anda mengulangi instruksi dua kali.
>> JOSEPH: Benar.
Jadi kita memiliki dua pernyataan printf di sini, kan?
Jadi ada cara kita bisa mendapatkan ini hanya ke salah satu yang akan membuat kita
kode lebih mudah dibaca dan sedikit lebih bersih.
Dan kemudian kita tidak perlu Dapatkan telah dua kali juga.
Dan salah satu cara yang dapat Anda lakukan ini dengan menggunakan loop Do-While.
>> Dan loop Do-While pada dasarnya adalah bentuk yang berbeda dari loop Sementara di mana
apa pun yang dalam kurung kurawal dijalankan setidaknya sekali.
Jadi di sini, saya menyatakan, int input, luar pertama.
Dan kemudian aku hanya mengatakan, melakukan hal ini instruksi sementara input
kurang dari nol.
Jadi hits Do pertama.
Ini akan selalu mengeksekusi ini setidaknya sekali, sehingga akan selalu meminta pengguna
untuk input setidaknya sekali.
Dan kemudian mengevaluasi masukan itu, dan itu terjadi di lingkaran.
Ya, pertanyaan?
>> SPEAKER 6: Apakah ada cara untuk melakukannya [Tak terdengar] jenis, seperti jika Anda mengatakan,
GetString, dan seseorang [Tak terdengar]
apakah ada cara untuk [Tak terdengar]
>> JOSEPH: Jadi pertanyaannya adalah, apakah ada cara untuk melakukan validasi input jika pengguna
tidak dimasukkan ke dalam hak jenis variabel?
Jadi jika kita meminta int dan mereka memberi kita string sebagai gantinya.
Dan dalam fungsi-fungsi yang kita menerapkan untuk Anda, getInt, GetString di seluruh
fungsi-fungsi, mereka benar-benar sudah melakukan hal seperti jenis input dasar
validasi di bawah tenda.
Jadi jika Anda menggunakan fungsi yang kita memberi Anda, Anda tidak benar-benar harus.
>> Tetapi jika Anda ingin melihat lebih ke bagaimana Anda benar-benar dapat melakukan itu, Anda dapat melihat
di bawah tenda di file I/O--
tidak mengajukan, standar fungsi I / O seperti membaca dari input standar dan
output standar.
Dan Anda bisa mendapatkan rasa yang lebih baik bagaimana Anda bisa melakukan itu.
>> ROB: Salah satu isu, meskipun, secara khusus dengan contoh Anda
kata, Anda mengharapkan sebuah string dan saya memasukkan int.
Bagaimana Anda tahu bedanya antara sengaja menginginkan
String 123 dibandingkan menginginkan int 123?
Jadi tali, itu cukup banyak tidak ada validasi, itu hanya apa pun yang mereka
masuk Anda akan menafsirkan sebagai string.
>> Int lebih mudah, karena tidak peduli masukan Anda ambil dari pengguna, Anda
selalu mengambil string.
Dan sehingga string yang Anda kemudian dapat cek, apakah semua ini
sebenarnya angka digit?
>> JOSEPH: OK.
Setiap pertanyaan tentang loop Do-While?
>> ROB: Oh, dan ini juga -
akan kembali ke ruang lingkup, agak umum kesalahan sedang mencoba untuk menggunakan beberapa lokal
variabel dari dalam ini Do-Sementara lingkaran dalam kondisi ini.
Dan sebenarnya, jika kita hanya menyingkirkan ini dan mengatakan, int masukan sama
GetInt, maka compiler akan berteriak kami, karena masukan tidak ada
di luar lingkup ini kurung kurawal.
>> JOSEPH: Dan itulah mengapa kita perlu lineup ini di sini.
OK.
Jadi, Anda juga dapat keluar dari lingkaran awal jika Anda ingin.
Jadi ini adalah cara yang berbeda menerapkan apa yang baru saja kita dilaksanakan.
Dan alih-alih menggunakan kondisi dalam kurung, kita menggunakan
Jika pernyataan dalam tubuh loop Do-While.
>> Dan pada dasarnya, ketika input akhirnya lebih besar dari nol, kita akan
keluar dari loop.
Dan jadi kita akan pergi semua jalan ke sini.
Dan Anda dapat melihat bahwa ini akan mungkin lebih disukai dalam hal ini
skenario, karena itu sedikit sedikit lebih bersih dan sedikit
sedikit lebih mudah dibaca.
Sedangkan ini, Anda semacam memiliki garis tambahan di dalamnya.
Ini hanya sedikit lebih jelek, Saya kira, dalam arti.
Ya, pertanyaan?
>> SPEAKER 4: Akan istirahat hanya mendapatkan Anda keluar dari satu set kawat gigi?
>> JOSEPH: Benar.
Jadi pertanyaannya adalah akan pecah hanya membuat Anda keluar dari satu lingkaran?
Dan jawabannya adalah ya.
Jadi jika Anda telah bersarang Untuk loop, untuk Sebagai contoh, jika saya memiliki Untuk int I sama dengan 0
sampai 10 dan kemudian Untuk int J sama dengan 0 sampai 10, jika saya keluar dari batin
lingkaran, saya masih akan pergi ke loop luar.
Jadi itu akan terus melakukan operasi di luar.
Ada pertanyaan tentang hal itu?
Ya?
>> SPEAKER 5: Tapi istirahat hanya berfungsi untuk kurung keriting, tidak untuk lainnya
pernyataan?
[Tak terdengar]
>> JOSEPH: Jadi pertanyaannya adalah akan mematahkan hanya berfungsi untuk loop sebagai lawan
Laporan lain seperti Jika?
Dan ya, itu terjadi, karena Anda melanggar keluar dari lingkaran, kanan,
dalam arti.
>> ROB: Pada sebagian besar kasus, itu ini adalah semacam Jika sesuatu,
kemudian istirahat.
Jadi Anda tidak perlu istirahat berlaku untuk Jika yang membungkus di sekitar itu.
Dan juga, hal ini tidak banyak loop, tapi ingat bahwa switch juga
rusak dari oleh istirahat.
Kami melihat istirahat yang digunakan dengan switch sebelumnya.
>> JOSEPH: Dan Anda juga dapat menggunakannya Sementara di loop dan loop Untuk.
Ada pertanyaan?
OK.
Jadi up berikutnya adalah fungsi.
Jadi Anda mungkin telah menggunakan salah satu BYOB ini blok dalam proyek Scratch Anda.
Dan ini pada dasarnya memungkinkan Anda untuk menentukan satu set
instruksi yang harus diikuti.
>> Dan apa yang saya maksud dengan itu adalah mari kita berpikir kembali ke matematika, kanan, aljabar.
Anda memiliki apa yang kita sebut fungsi dari x, beberapa variabel, dan katakanlah ini
fungsi f dari x sama dengan x ditambah 5.
Jadi Anda bisa memikirkan f dari x karena hal ini hitam kotak yang mengambil 15 dan kemudian
menghasilkan 20.
>> Jadi lebih umum, fungsi adalah sesuatu yang membutuhkan beberapa masukan dan
kemudian menghasilkan beberapa output.
Dan mengapa fungsi yang baik?
Mereka baik untuk sejumlah alasan.
Jadi apakah seseorang ingin mengambil bacokan apa organisasi artinya?
Dalam hal mengapa fungsi yang bermanfaat?
Ya?
>> SPEAKER 4: Itu membuat Anda kode lebih mudah dibaca.
>> JOSEPH: Benar.
Jadi salah satu hal itu membuat kode Anda lebih mudah dibaca, kan?
Alih-alih memiliki seperti int x sama dengan x kali x kali x, saya dapat memiliki kubus x,
yang lebih mudah dibaca dan lebih dimengerti oleh pembaca.
>> Organisasi juga dalam hal berpisah kode Anda ke dikelola
bagian, sehingga alih-alih mencoba untuk melaksanakan ini semua dalam satu bagian panjang
di utama, Anda dapat semacam membaginya menjadi seperti, OK, mari kita menulis fungsi
untuk kubus sesuatu, mari kita menulis berfungsi untuk persegi sesuatu.
Dengan cara itu Anda dapat membaginya menjadi kecil, bagian kecil yang dapat Anda menangani
sebagai lawan untuk mencoba untuk mengatasi masalah besar sekaligus.
>> ROB: Atau bahkan kecil, bagian-bagian kecil yang Anda dan pasangan bisa mengatasi.
>> JOSEPH: Ya.
>> ROB: Jadi, bukannya kedua Anda mencoba untuk menanamkan satu
berfungsi pada saat yang sama.
>> JOSEPH: Penyederhanaan.
Siapapun ingin mengambil menebak?
Ya?
>> SPEAKER 5: Lebih pengulangan.
>> JOSEPH: Benar.
Jadi satu hal yang dapat Anda lakukan dengan penyederhanaan adalah bahwa itu semacam di
baris yang sama seperti re-kegunaan adalah bahwa setelah saya menulis fungsi kubus, saya bisa
hanya menggunakan yang berulang-ulang lagi dalam program saya bukan mengetik
x kali x kali x berulang berulang-ulang.
Dan penyederhanaan di sini juga hanya berarti itu membuat semacam kode Anda
lebih mudah untuk debug setelah Anda membagi up ini ke dalam fungsi.
Karena dengan begitu Anda dapat melokalisasi mana masalah Anda semacam ini.
Ada pertanyaan?
>> Jadi ide lain adalah abstraksi, kan?
Kotak hitam ini.
Seperti yang Anda tahu apa getInt tidak untuk menerima input dari user?
Kami belum benar-benar mengatakan kepada Anda, bukan?
Semua kita sudah bilang adalah getInt tidak persis apa yang dikatakannya itu tidak.
Jadi, bahkan jika kita tidak memberitahu Anda bagaimana bekerja, Anda akan tahu.
>> Jadi dalam kasus ini, ini adalah fungsi quadruple yang tidak
hal yang berbeda untuk input untuk menghasilkan output.
Dan Anda bisa empat kali lipat angka dengan mengalikannya dengan empat.
Atau Anda dapat apa yang kita sebut bit bergeser dengan dua.
Dan kita akan membahas ini sedikit kemudian.
Dan tidak perlu tahu bagaimana ini fungsi benar-benar bekerja asalkan
bekerja seperti yang dinyatakan.
>> Jadi di bawah tenda, aku bisa seperti, kembali masukan kali
delapan dibagi dua.
Dan Anda tidak akan tahu, kan?
Semua yang perlu Anda ketahui adalah itu melakukan apa yang dikatakannya.
Jadi itulah hal yang berguna tentang abstraksi.
>> Dan hal lain adalah semacam ide ini lokalisasi kode Anda ke salah satu
bagian tertentu.
Jadi jika Anda memiliki masalah, Anda tidak harus pergi ke seluruh kode Anda mencoba
untuk memperbaiki di mana masalahnya.
Jadi dalam hal ini, saya menerapkan kubus salah.
Saya pikir kubus itu mengalikan oleh tiga.
>> Jadi dalam hal ini, ini adalah salah satu program yang baru saja telah mengalikan oleh tiga
di mana-mana.
Dan ada program lain yang memiliki kubus terfaktor keluar ke fungsi.
Dan jika saya ingin memperbaiki kesalahan saya di sini, saya harus memperbaiki setiap baris
kode dalam program ini.
Sedangkan di sisi lain, jika saya menggunakan fungsi, saya hanya perlu mengubah
apa yang salah di satu tempat.
>> Jadi dalam ilmu komputer, kita memanggil input dan output.
Input disebut parameter atau argumen, dan output disebut
kembali nilai-nilai.
Dan kita akan melihat bagaimana hal ini membantu kita memilah dari mendefinisikan fungsi dalam satu detik.
Jadi ini adalah definisi fungsi untuk cubing.
Jadi dibutuhkan masukan, dan kemudian itu kembali nomor kali
sendiri tiga kali.
Jadi mari kita memecah ini.
>> Jadi kita memiliki header fungsi, yang pada dasarnya terdiri dari tiga hal.
Jadi kita memiliki parameter, yang adalah, seperti yang saya katakan sebelumnya,
input ke dalam fungsi ini.
Dan kemudian kita beri nama fungsi.
Dalam hal ini, itu disebut kubus.
Dan kemudian kita menentukan apa jenis dari nilai kembalian adalah.
>> Jadi dalam hal ini, fungsi kubus mengambil dalam integer dan juga
mengembalikan sebuah integer.
Jadi jika saya lulus dalam dua, keduanya adalah integer, ia mengembalikan delapan padaku, yang
adalah bilangan bulat.
Jadi kembali jenis parameter nama.
Pertanyaan tentang hal itu?
>> Dan kemudian nilai kembali sebenarnya ditentukan di akhir dengan mengatakan kembali
dan kemudian kembali apa berisi nilai kembali.
Jadi dalam hal ini, jika kita menempatkan semuanya bersama-sama, fungsi mengambil dalam
parameter, itu disebut sesuatu, dan ia mengembalikan sesuatu yang jenis
bahwa kita mengatakan itu akan menjadi.
Ada pertanyaan?
>> Jadi bagaimana kita menggunakan fungsi?
Nah, kita menulis fungsi dan kemudian kita menggunakannya dalam program kita, kan?
Jadi saya menyebutnya kubus, dan maka saya dapat menggunakan kubus.
>> Tapi apa yang penting untuk dicatat adalah bahwa agar masalah.
Jika saya memiliki kubus bawah utama, itu akan mengalami kubus.
Dan pada titik ini, tidak ada disebut kubus dalam program ini, dan itu
hanya akan menjadi seperti, aku punya tidak tahu apa kubus.
>> Sehingga akan memberitahu Anda, implisit deklarasi fungsi.
Itulah kesalahan yang muncul.
Dan dalam hal ini, kubus di bawah utama, jadi itu tidak akan
tahu tentang hal itu.
>> SPEAKER 5: So utama biasanya fungsi terakhir didefinisikan?
>> JOSEPH: Jadi pertanyaannya adalah, adalah utama biasanya yang terakhir
hal yang Anda akan menentukan?
Dan tidak.
Itu karena kita biasanya suka main berada di atas, kan?
Karena itulah hal pertama yang Anda ingin membuka programmer yang
program untuk melihat.
Dan jadi bagaimana kita memecahkan masalah ini kita ingin utama berada di atas, tetapi
fungsi yang kita inginkan, kita ingin mereka berada di bawah utama namun dapat menggunakan
mereka dalam utama?
>> Nah, kita menggunakan apa yang kita sebut prototipe fungsi.
Jadi apa prototipe fungsi dasarnya adalah yang pertama kali mengambil apa
tanda tangan atau header fungsi dari apa yang kita ingin menerapkan ke bawah
di sini, dan kami letakkan di bagian atas dari sebuah program.
>> Jadi dalam hal ini, kita katakan bahwa, baik, kemudian dalam program kami, kita akan
untuk membuat janji untuk menerapkan ini fungsi yang disebut int kubus, yang mengambil
input integer.
Jadi sekarang, karena itu adalah di atas utama, utama, itu akan mengatakan, oh, baik,
kemudian dalam program ini, yang akan menjadi ada sehingga saya bisa merujuk ke sana, jadi saya akan
hanya membiarkannya pergi melalui untuk saat ini.
>> Dan kemudian di bagian bawah, kami menerapkan kubus.
Dan kemudian utama hanya akan mengatakan, dengan baik, akan memilah link
dua simbol ini bersama-sama.
Dan kita akan membahas apa yang berarti di kemudian hari.
Dan sehingga akan tahu bahwa ini adalah fungsi kubus yang seharusnya digunakan.
>> ROB: The [Tak terdengar] tentang keinginan utama di bagian bawah atau
atas, saya telah melihat keduanya.
Ada hal-hal yang sama seperti untuk menempatkan utama di bagian bawah.
Tapi begitu proyek akan sangat besar, biasanya utama adalah dalam
mengajukan semua sendiri.
Dan pada saat itu, seperti int baris kubus akan -
dalam stdio.h adalah a bunch baris seperti yang int
baris masukan kubus int.
>> Dan begitu mereka prototipe adalah hal yang cenderung dimasukkan ke dalam file header, di
saat itu, tidak masalah.
Yah, itu tidak masalah.
Mereka selalu pergi di atas.
Dan jika utama bukan file tersendiri, Anda tidak perlu khawatir tentang menempatkan
prototipe fungsi individual dalam file.
>> JOSEPH: Dan kita akan mendapatkan itu sedikit bit kemudian ketika Rob mulai berbicara
tentang kompilasi.
Dan ada juga perbedaan antara parameter dan argumen.
Dan parameter hanya apa kita sebut masukan ini ketika
kita mendefinisikan fungsi.
Dan kami menyebutnya argumen ketika kita benar-benar menyebarkannya ke fungsi.
>> Jadi dalam hal ini, ini adalah parameter, seperti yang kita katakan sebelumnya.
Dan ketika kita benar-benar menggunakannya di sana, kubus x, maka x itu sendiri
apa yang kita sebut argumen ke fungsi kubus.
>> ROB: Jadi argumen parameter adalah -
ada perbedaan ini, sangat bingung bergantian.
Pada titik ini, bagi saya, itu seperti salah satu kata-kata yang ketika saya melihatnya di
liar, saya tidak bisa membantu tetapi segera pertanyaan apakah mereka menggunakannya dalam
konteks yang benar, karena Perbedaan cukup halus sehingga hanya
semua orang cenderung -
Aku hampir selalu mengatakan argumen terlepas dari apa yang saya maksud.
>> JOSEPH: Dan fungsi juga berguna untuk apa yang kita sebut efek samping.
Jadi fungsi bisa tidak mengambil input, dan itu juga dapat menghasilkan output tidak ada.
Jadi dalam kasus ini, saya mendefinisikan subrutin yang tidak memiliki
nilai kembali.
Dan dalam rangka untuk menentukan bahwa, kita gunakan apa yang kita sebut kekosongan di sini.
Dan efek samping dari fungsi ini adalah bahwa hal itu hanya mencetak hal-hal
keluar ke halaman.
Ini tidak benar-benar mengambil input, dan itu tidak
benar-benar menghasilkan output.
>> Tapi ini bisa berguna dalam arti jika Anda ingin, misalnya, debug
sesuatu dalam program Anda, jika Anda ingin untuk menulis subrutin kecil yang
mencetak, katakanlah, isi memori atau sesuatu.
Dan efek samping ini kadang-kadang berguna di luar konteks
hanya seperti input dan output.
Ada pertanyaan?
>> Dan untuk mengakhiri segmen tertentu, apa program ini lakukan?
Aku akan memberikan kalian beberapa detik untuk membacanya.
Pada tingkat yang sangat dasar, apa yang ingin kita katakan adalah bahwa itu swap x dan y, kan?
>> Jadi berapa banyak dari Anda benar-benar berpikir ini akan menukar x dan y?
Angkat tangan Anda.
Tidak ada satu.
OK.
Siapa yang berpikir bahwa hal itu akan tidak swap x dan y?
Dan jumlah itu tidak seluruh ruangan.
Jadi beberapa orang tidak yakin.
OK.
Itu wajar.
>> Jadi, mari kita pergi melalui apa yang terjadi ketika Anda benar-benar memanggil fungsi-fungsi pertama di
Untuk menjawab pertanyaan ini.
Jadi ini adalah apa memori semacam terlihat seperti.
Ini adalah semacam seperti model yang disederhanakan apa memori tampak seperti ketika
Anda menjalankan sebuah program.
Jadi ada sesuatu yang disebut stack di sini dan
sesuatu yang disebut heap.
Dan ini tumbuh ke arah tengah memori.
>> Jadi dalam kasus ini, ketika Anda memanggil fungsi, itu
akan dimasukkan pada stack.
Lalu apa saja yang terkandung dalam fungsi tetap dalam apa yang kita sebut itu
Fungsi ini stack frame.
Dan untuk mendapatkan visualisasi bagus ini, ayo - misalnya, kami memiliki
program utama sebelumnya.
Dan dalam utama, kita disebut kubus.
Jadi utama pertama akan pergi pada stack bingkai, karena itu fungsi pertama
yang disebut.
>> Dan kemudian ketika kubus disebut dalam utama, hal itu akan diletakkan di atas main
dalam memori.
Jadi apa yang Anda akan melihat di sini adalah kubus yang memiliki parameter dan yang sendiri
penduduk setempat sendiri.
Jadi, ketika Anda benar-benar melewati sesuatu untuk fungsi, parameter yang
mendapat salinan dari apa yang berlalu dalam dari utama.
>> Dan untuk semacam menjelaskan hal ini, mari kita berjalan melalui sebuah program.
Jadi kita memiliki stack, ini adalah hanya bagian tumpukan.
Dan apa yang kita lakukan adalah pertama-tama kita menginisialisasi x dan y untuk satu dan dua.
Jadi kita memiliki kotak-kotak kecil.
Mereka duduk di tumpukan utama yang bingkai di stack.
Mereka berisi satu dan dua.
>> Sekarang kita sebut swap.
Apa yang terjadi adalah kami melewati x dan y ke swap, dan swap yang membuat salinan sendiri
variabel tersebut untuk digunakan dalam frame stack.
Jadi sekarang di sana, kami memiliki, yang berisi nilai yang x punya, dan b,
yang berisi nilai yang y punya.
Jadi satu, dua.
>> Dan Anda akan melihat bahwa ini adalah terpisah dari x dan y dalam main.
Jadi sekarang kita buat sementara variabel mengandung.
Kami menetapkan sama dengan b, sehingga perubahan dari satu sampai dua.
Dan kemudian kita tentukan b sama untuk temp, yang merupakan salah satu.
>> Dan kemudian sekarang kita keluar keluar fungsi ini.
Ketika Anda keluar dari fungsi, stack frame akan muncul dari tumpukan.
Kami menyebutnya mendorong.
Anda mendorong stack frame ke stack dan Anda pop jika dari tumpukan.
Jadi apa yang terjadi adalah segala sesuatu yang adalah dalam kerangka semacam tumpukan hanya
naik terbakar.
Dan sehingga tidak ada lagi.
>> Tapi apa yang kita perhatikan?
Kami tidak pernah benar-benar mengubah nilai x dan y, kan?
Jadi mereka tinggal lokal untuk utama.
Dan dengan melewatkan hal-hal ke dalam swap, kita sebenarnya tidak pernah berubah nilai-nilai.
Dan apa yang kita sebut ini?
Kami menyebutnya passing ini dengan nilai.
>> Jadi dalam C, ketika Anda melewati hal-hal ke fungsi, melewati mereka dengan nilai dan
membuat salinan dari mereka untuk fungsi untuk digunakan.
Dan kita akan belajar tentang sesuatu yang disebut lewat referensi di kemudian hari, tapi itu
cara Anda dapat memecahkan masalah ini.
Tapi kita tidak akan khawatir tentang yang sampai nanti.
>> ROB: Dan sebenarnya, istilah itu, lewat dengan referensi, sehingga C bahkan tidak memiliki
lewat referensi.
C secara eksklusif telah lewat nilai.
Tidak peduli apa yang Anda lakukan, Anda selalu melewati salinan sesuatu.
Hanya saja, seperti saya semacam disebutkan yang sebelumnya dengan pointer
dan bahwa string benar-benar hanya empat byte menunjuk ke suatu tempat dalam memori.
>> Nah, jika saya memiliki string ini dan itu mengatakan bahwa adalah di mana string -
baik, jika saya memiliki pointer ini untuk ini tempat di memori, maka saya bisa lulus
salinan itu pointer ke fungsi, dan fungsi yang masih tahu di mana di
memori itu.
Jadi kedua pointer ini menunjuk ke tempat yang sama dalam memori, dan
itulah bagaimana kita akan bisa untuk mengubah hal-hal di luar
saat stack frame.
>> JOSEPH: Apakah Anda ingin melakukan kompilasi?
>> ROB: Tidak, itu 05:30.
>> JOSEPH: OK.
Ini adalah 05:30.
OK.
Jadi kita akan membahas kompilasi saya kira dalam bagian berikutnya, atau bagian Anda
Pemimpin akan pada saat itu.
Dan -
>> ROB: Ada pertanyaan?
>> JOSEPH: Ada pertanyaan?
Ya?
>> SPEAKER 5: Menggunakan string dari CS50, setiap fungsi yang ingin kita gunakan untuk
mereka, yang akan menjadi seperti fungsi C.
CS50 belum hilang dan membuat setiap tambahan.
>> ROB: Benar.
Setiap dari C seperti [Tak terdengar], Anda akan menggunakan mereka pada string kami.
>> JOSEPH: Dan satu hal terakhir yang ingin saya disebutkan adalah bahwa kita memiliki panduan gaya
untuk kelas ini.
>> ROB: Oh, yeah.
>> JOSEPH: Jadi, jika Anda telah datang dari pemrograman latar belakang sebelumnya, Anda
mungkin memiliki konvensi tertentu ketika Anda sedang menulis kode seperti menempatkan
kawat gigi pada baris yang sama atau tertentu cara indentasi
atau penamaan variabel Anda.
Di kelas ini, kami ingin mengikuti panduan gaya tertentu hanya karena,
baik, jika Anda pergi keluar dan bekerja di industri, Anda akan diharapkan
untuk mengikuti panduan gaya perusahaan di mana Anda pergi ke.
>> Seperti misalnya, Facebook saya pikir memiliki jenis tertentu dari penamaan
konvensi.
Dan ada perbedaan antara unta variabel casing dan seperti
memisahkan mereka dengan garis bawah.
Dan juga, saya pikir yang paling penting, seperti misalnya, lekukan, kan?
>> Kami kurung kurawal mulai dari mana kondisi ini, dan mereka
berada di baris berikutnya.
Dan kami juga menempatkan kurung kurawal di bahkan jika itu hanya satu baris.
Dan banyak kali, ada cara untuk melakukan di mana Anda dapat meninggalkan kawat gigi ini
off jika hanya satu baris di bawah pernyataan Jika.
Tapi di kelas ini, kami ingin mengikuti panduan gaya tertentu saja sehingga Anda mendapatkan
digunakan untuk hal semacam itu.
>> ROB: Ya, dan Gaya 50 akan menegakkan panduan gaya ini, dan kami
akan menggunakan Style 50 untuk kelas kode Anda.
Jadi itu membuat segalanya lebih mudah bagi kita dan mudah-mudahan tidak harus membuat hal-hal yang
jauh lebih buruk bagi Anda diberi gaya standar seharusnya tidak
realistis.
>> JOSEPH: Dan akhirnya, untuk menemukan gaya panduan, pergi ke manual.cs50.net/style.
Dan yeah.
>> SPEAKER 4: Apakah Anda akan menegakkan setiap karakter per baris?
>> ROB: Ya.
>> JOSEPH: Maaf, guys.
>> ROB: Itu seperti salah satu dari satu-satunya.
Pada titik ini, saya OK dengan 120.
Aku baik-baik dengan mengatakan 120 karakter per baris.
Saya mengerti ada menjadi beberapa batas.
Saya pikir 80 adalah sangat kecil, tapi kita menegakkan itu.
>> JOSEPH: Secara pribadi, saya pikir dengan C, 80 karakter lebih OK.
Setelah Anda mulai mendapatkan ke yang lain bahasa seperti JavaScript dan PHP, tidak
sangat masuk akal untuk hanya membatasi ke 80 karakter.
OK.
Yah, itu bagian yang super.
Apakah ada yang ingin permen?
>> SPEAKER 4: Ya.