ROB BOWDEN:這是 更舒適的節, 但是,這並不意味著,如果你 覺得你是不是更舒服 你不會學到的東西在這裡。 因此,讓我們開始吧。 你有滑梯 直入事情。 難道我只是把它的權利嗎? 開關筆記本電腦。 

艾里遜:你不想要 自我介紹一下,羅布? 

羅布·鮑登:哦,我搶。 這是我的第五個年頭TF-ING CS50。 

GABRIEL:我是加布里埃爾。 我是CS50的頭TF。 我是TF在去年和今年。 艾里遜:我是艾莉森,這 是我的第二個年頭TF-ING CS50。 

羅布·鮑登:好吧,那麼 這個東西在左邊, 希望你以前見過它。 如果不是因為你 下載為自己, 你應該已經看到了在課堂上。 所以這是CS50家電,和他 做了一定程度的相關描述 在演講。 但基本上它只是你 正在運行的操作 您的操作系統中的系統 系統,使我們可以給你 無需計劃 不用擔心哦是這樣的 上班在Windows上 和Mac,或者如果你們中的一些 已經使用Linux,Linux操作系統。 這只是應該 是一種常見的演奏 字段,以便每個人都有 完全相同的環境。 

所以,如果你還沒有 下載了這個已經, 你應該下載它,因為你 會需要它的習題集。 並且它是一個2千兆字節 下載,所以它可能需要一段時間。 在哈佛,它會走的快。 所以CS50設備。 

現在,在開始的時候,我們要 說說只是一堆命令行 的東西,所以通過這一點,我的意思是工作 在這邊這個小環境。 並注意所有的東西 我說就在這裡,現在 會,如果你的內部工作 組件內的端子, 或者,如果你是內 在gedit中終端窗口 內的器具的。 所以這些環境是相同的。 

但我會去三分之一的路線。 並注意倒在這裡 這裡有點IP地址。 所以,你不必 做到這一點,但這個IP address--現在如果我 - 除非 它阻止這件事情。 OK,這樣IP地址 過在終端 這裡 - 所以這個終端上 這裡是我的Mac終端。 因此,這是目前沒有辦法 與設備在所有相關聯。 如果你使用的是Windows,那麼你 將需要下載的東西 專門為此,特別 人們往往用膩子,P-U-T-T-Y。 

所以,我什麼都做的是類型 SSH和然後該IP地址。 好吧,jharvard在該IP地址。 所以192.168.24.220。 這個可怕的消息,忽略它。 只需輸入yes。 這是CS50在一個盒子裡。 它會詢問你的密碼。 

所以在很多這些上下文中的 它要求輸入密碼,[聽不清]。 我們已經得到了很多的問題在哪裡 它說,它實際上不是打字。 它不會告訴你的人物 密碼在您鍵入,如果有的話, 對於一個安全功能,因為如果 有人找你的肩膀上 他們看到明星明星 明星星,那麼他們 知道你的密碼 是四個大字。 這樣的想法是它會詢問 您的密碼,請鍵入。 它不會顯示 你的字符, 但它實際上是接受他們。 在這種情況下,任何時候你 曾經看到一個密碼提示 處理設備,所述 密碼將是深紅色的。 所以緋紅。 

現在這裡的這裡面 窗口是在我的Mac上, 我基本上有 完全相同的看法 作為終端的內部 在產品中。 所以,你不必這樣做。 你可以做一切你 希望該設備的內部。 我幾乎從來沒有真正做 任何在產品中。 我幾乎總是最小化,現在 我正在通過SSH進入組件。 

如果有什麼事情,如果你 具有較慢的計算機, 你可能會注意到一個區別。 我這樣做是因為我喜歡 這個終端窗口。 它有像某些功能 我可以分割窗口, 現在我可以SSH方式 通過設備。 我有兩個SSH的一次事情。 如果你的電腦是特別慢 和你的工作在家電, 你知道這是 真的laggy,等等。 往往要快很多 如果你是SSH-ED英寸 但除此之外,你可以工作兩種方式。 

聽眾:什麼是SSH是什麼意思? 

羅布·鮑登:安全殼, 類似的東西? 什麼是SSH是什麼意思? GABRIEL:安全殼。 艾里遜:這只是安全殼。 羅布·鮑登:安全殼。 這是一個協議,你 - 這是 安全協議,從而進行加密。 讓人無法窺探的網絡 看到你說要什麼有什麼 你是SSH-ED來。 而事實上,在古代 CS50的日子,因此在2009年 當我還是個大一的方式, 你曾CS50習題集, 是你的SSH-ED一些服務器 我們給您訪問, 而你的工作在那裡。 所以,你沒有這個 圖形設備。 你沒有gedit中。 你沒有這些東西, 你可以視覺化的指向和點擊。 你有這個接口才能正常工作。 我更喜歡在此界面中工作。 那麼,我們要的一部分 將要在現在 一堆的 命令,你應該 開始熟悉的 你在使用過程中走。 而且說實話,當你 習慣了,它 這麼多快 在這種環境中工作 比它與取景工作, 拖動和點擊的東西。 

所以,我們在這裡。 現在我只是SSH-ED在等 默認location--你 看到了一些在課堂上這些命令, 但我們去了所有的人了。 默認位置我們 在是主目錄。 和目錄,只是 另一個字的文件夾。 所以我們在主目錄中。 輸入ls,列出文件 在這個目錄中。 顯然,我創建了一個blah.c更早。 因此,我們有一個桌面目錄。 你注意到了語法高亮? 淡藍色的高亮顯示 目錄和直白 表示只是一個純文本文件。 所以有將要 你看到一些其他顏色。 一個可執行文件,很可能會 是綠色的或類似的東西。 好了,我們是在主目錄中。 

現在,如果我想進入一個不同的 目錄中,CD是我想要的命令。 所以,改變目錄,然後你 通過該目錄的名稱 你想進入。 所以在這裡我們有四個選項。 我可以進入下載了,現在我們看到的 這裡已經更新了這個括號 說我在〜/下載。 

那麼,什麼是波浪? 這是一個簡寫 你的home目錄。 所以,你做的幾乎一切都會好起來 是相對於你的home目錄, 和PWD只是一個命令 我在一年使用一次即 只是打印當前目錄。 所以你看這裡 〜/下載真正解決 到/ home / jharvard /下載。 因此,/家用/ jharvard是我的主目錄。 

因此,我們可以CD點點。 現在,點點是一個特殊的目錄 總是指一個目錄了。 所以,如果我在〜/下載,那麼CD點 點是要帶我去波浪線。 什麼是我們認為CD點點 是要帶我去嗎? 它會帶我到/ home。 因此,通過打印工作目錄波浪線, 我在現在的/ home / jharvard。 從一個目錄時, 現在,這裡說的/ home。 

現在CD點點。 現在我在根目錄下, 你不能再這樣做。 你會僅僅停留在 根目錄下去。 根目錄下有一大堆 ,如果你想看看的東西, 您可以。 例如,如果我去 成箱,包含 所有這些二進制文件,如ls, 和CD,以及所有這些事情。 因此,這些命令需要 存在於系統中的某個地方, 它是在/ bin目錄下。 但是你做的幾乎一切 將是從你的主目錄。 和CD對此不承擔任何參數, 你可以說CD〜,不需要。 CD將會給你帶來 回到你的home目錄。 

其中最後一個。 CD  - 將會給你帶來回 你是在最後一個目錄。 所以,我只是cd'd連續兩次,所以我 最後的目錄是主目錄。 如果我去削減斌,現在 讓我們上去,進入用戶。 用戶份額。 讓我們去的用戶份額。 現在,我現在在用戶份額。 CD  - 早在箱中。 所以這變得特別有用 當你have--,它會切換。 所以用戶份額,回倉,倉份額。 

所以這變得非常有用。 你會發現自己有很多, 很多很多嵌套的目錄。 而你想要做的事 真正的快速的上一級目錄。 你去到該目錄,使 變化之類的東西, 現在你想要去 回到你在哪裡。 CD  - 。 我總是很沮喪 當我正好去 該目錄我 想幹的工作英寸 我總是感到沮喪時,我做了 這兩個步驟,而不是一個步驟, 因為這意味著CD  - 是怎麼回事 帶入的中間位置 而不是在這裡我想去的地方。 

所以我們看到所有的列表文件。 我們知道如何解決為止。 所以,現在讓我們來談談編輯文件。 所以在這個過程中,你幾乎 總是希望用gedit。 如果你願意,你可以採取的下一個步驟 並開始學習命令行的文本 編輯器。 因此,不同的選項存在。 

和那些可能 將與您, 我們有納米時,Vim,和Emacs。 因此,Nano是初學者 命令行的文本編輯器。 因此,納米,讓我們去 blah.c我剛才創建的。 這只是這個標準的C文件。 你看到一大堆的東西 在屏幕底部的繼續, 顯然blah.c 這包含C代碼。 

所以在這個特定的編輯器, 它是說在bottom-- 現在這個插入符號的象徵, 我們看到的這款^ G,^ X,^ o。 因此,在幾乎所有 的背景下,你看, 你可能會看到插入符號符號 其他地方上網,對堆棧溢出, 類似的東西。 它幾乎總是指控制。 因此,要退出我想做的事情 十,控制控制X,退出。 我可以用我的箭 鍵移動。 請注意,我不能指向和點擊爽快。 你需要用你的箭頭 鍵移動。 有可能是一個設置 指向和點擊。 

但是讓我們做出一些改變。 現在控制X去退出。 它會說保存修改過的緩衝區。 現在的提示,Y(是),N(否)。 控制下取消。 我只想說是的。 文件名來寫。 默認的是文件 它已經是了。 按Enter鍵。 行。 現在,我剛剛編輯的文件, 保存它,並且它被改變。 

所以納米是最簡單的 文本編輯器就習慣了。 在替代品的Vim和​​Emacs。 這些都是更高層次的文本編輯器 有一個非常陡峭的學習曲線。 所以我個人的偏好是Vim的。 並且它有各種各樣的選擇。 一旦你習慣 它,你將永遠不會 想要去的任何其他 文本編輯器,因為你只是 有這麼多的事情 在這些提供給你, 但它需要一個真正的 很長一段時間來學習。 因此,也許你只是想逼 自己現在要習慣它, 但我要說這是值得的。 但做起來很難。 

然後Emacs的。 我一直在Emacs中掙扎,因為 我知道該怎麼做絕對沒有。 顯然Emacs是默認情況下不 安裝在設備上。 我們可能會補充說, 作為默認安裝的。 一旦你學會了一 VIM或Emacs,有 沒有令人信服的理由 不斷學習,另外, 但它是一個完全不同的風格。 OK,這樣的編輯文本文件。 

聽眾:如果你被卡 在Vim的現在,怎麼辦we-- 

羅布·鮑登:有 多種模式的Vim中, 並且有全 教程學習Vim的。 如果你恰巧是這樣 在以插入模式 輸入文本,你可以 輸入以各種方式 但我是你如何進入插入模式。 或擺脫任何特殊的 模式你在,只是逃命。 而你只是來砸逃生得到 出任何嵌套模式的研究。 剛剛好,現在我又回到正常模式。 

因此在正常模式中,一個冒號。 你看它出現在底部。 然後Q。 所以Q將退出,如果你已經進行了更改, 而我 - 因為我已改變? 我顯然所做的更改。 所以,如果你已經進行了更改,它會 說你可以把一個感嘆號。 我要叫它一聲。 所以,你可以把一個班只 退出而不做任何事情, 或結腸WQ將保存並退出。 因此,瓦特一般是寫。 所以寫的文件。 我可以寫,然後退出。 或者你可能只是 QX滿貫,Q爆炸剛 要離開那裡,無論 那你所做的任何更改。 

好吧,那麼現在讓我們來 go--我們可以創建文件。 讓我們開始刪除文件。 我就隨便扔在一個 很快新的命令,觸摸。 因此,觸摸FOO。 觸摸吧。 觸摸巴茲。 如果我LS,現在我們看到的 這些文件的存在。 他們完全是空的。 因此,觸摸僅僅是一個簡單的 1的方​​法,[聽不清]。 二,技術上只是狀態 它,它更新的時間戳。 所以,你所創建的任何文件都有 與之相關聯的時間戳。 所以巴茲上創建 9月14日,在16時21分。 它現在是16點22分,所以,如果 我再碰巴茲我們 看到巴茲最 最近修改的16點22分。 但除此之外,我幾乎從來沒有 看著文件上的時間戳。 所以觸摸,在這裡我只是用 它創建一些快速的文件。 

好了,所以現在RM是 命令,我們關心這裡。 我們可以RM噓聲。 說定期刪除空文件噓。 我們可以鍵入y,而現在它的排除。 RM巴茲。 定期刪除空文件 巴茲和類型N(否)。 現在它不會被刪除。 所以,酒吧和巴茲依然存在。 富走了。 GABRIEL繼續說。 羅布·鮑登:太好了。 因此,惱人的消息 在這裡,除去常規empty-- 你在做什麼在哪兒? 定期刪除空文件。 因此,如果我們不想成為 受該消息困擾, 我們可以在這個-f扔 標誌,並所以這是力。 而現在,如果我RM -f,它不會 說你想刪除此文件。 它會就去做。 和LS,我看不到了吧那裡。 

現在這是一個潛在的 危險的命令。 它往往不會太糟糕。 我們會回來的第二個怎麼樣 它可以變得非常危險。 讓我們創建一些臨時目錄。 MKDIR,其它命令。 所以MKDIR是一個命令 這使得一個目錄。 而現在通過LS,我們看到這個漂亮的光 藍色突出顯示臨時目錄。 我可以用cd命令進入溫度。 我可以命令mkdir foo中。 cd到foo中。 MKDIR吧。 cd進入酒吧。 

所以我們看到,我們可以很容易地得到 進了一些漂亮的深層嵌套。 現在我怎麼刪除一個目錄? 命令rmdir。 所以,如果我只是直接嘗試RM, 像我們做一個常規文件, RM桿將要 說不能刪除吧。 它是一個目錄。 有一個特殊的命令 除去種目錄。 於是命令rmdir吧。 現在酒吧已經一去不復返了。 

好了,命令rmdir我幾乎從來不使用。 究其原因,現在being--我們 做一個常規文件的酒吧在這裡了。 於是命令rmdir噓。 命令rmdir。 無法刪除foo中。 目錄不是空的。 所以,你不能使用在目錄中刪除 目錄下有東西在裡面。 

所以,你有一些選擇。 你可以進入該目錄,刪除 一切手動,然後走出來 和rmdir目錄。 這顯然聽起來很煩人。 如果有成千上萬 在裡面的文件? 嗯,你可以RM *。 我們將在第二講*。 這基本上意味著所有的事情。 但更重要的是,這樣RM -r。 所以,RM -r--了很多 背景,-r表示遞歸, 我們將談論什麼 遞歸裝置在幾個星期。 但它基本上意味著導線 這個目錄的全部 並取出了一切。 

所以,RM -r富會說 陷入目錄富? 是。 定期刪除空文件foo /酒吧? 是。 刪除目錄FOO? 是。 所以,現在foo和一切 在它已被刪除。 

現在,可以得到特別煩 when--讓我們碰1,2摸,摸3。 可能有一大堆的文件。 如果我想,我可以創建 成千上萬的文件在這裡了。 和RM -r FOO是怎麼回事 是相當惱人的。 是的,是的,是的,是的,是的,是的。 有很多文件,你 趕緊看看有多少次 我會是類型。 好了,我們只是看到了之前我們怎樣才能 擺脫無需輸入yes,-f的。 所以MKDIR富CD富觸摸1 2 3。 好了,命令rm -rf foo的是要 盲目地完全刪除foo中。 沒有任何提示。 什麼都沒有。 富走了。 

所以我傾向於使用這種 命令所有的時間。 這就是說,它是一個 很危險的命令, 因為如果我做這樣的事 這一點,就不會提示你。 它將會消失。 和它發生相當頻繁, 甚至在更高級別的CS課程。 有時我們會看到 一些地方的人 說我不小心我們的RM RF-ED我的家 目錄和我所有的P組已經一去不復返了。 而且它是毀滅性的, 但沒有垃圾桶。 有沒有有什麼 供您檢索。 這只是走了。 更糟糕的是 像RM -rf /。 所以我們剛才討論 該根目錄中。 它擁有所有的 您的系統上的文件。 事情往往會變得相當凌亂 當您刪除之類的東西LS, 和CD,以及所有那些。 

聽眾:有什麼區別 RM,RF和rm *之間 羅布·鮑登:所以RM *  -  

艾里遜:問題是有什麼 RM,RF和rm *之間的差異。 

羅布·鮑登:所以RM *。 明星一般是所有的 此目錄的內容。 冥思苦想其他的 方式呈現明星。 好吧,其實明星一般 指符合任何圖案。 所以,如果我有一個名為DOG1的文件, 觸摸DOG2,觸摸CAT1,CAT2觸摸。 所以LS * 1將打印和CAT1 DOG1,因為明星可以填充 在with--一個需要存在, 但明星可以是貓或狗。 這是一個外卡。 這就是我正在尋找的話。 外卡。 或者我可以ls的狗*和 我還見到DOG1,DOG2。 所以,那些上市文件 匹配特定的模式。 您可以以這種方式使用ls命令。 

LS * STAR匹配任何內容。 因此,它會打印所有的 此目錄的內容 因為所有的人都一致。 它不會打印出任何東西 在上一級目錄。 如果我有一個子目錄,foo和 摸1 2 3--所以現在如果RM *星, 刪除CAT1,CAT2,DOG1,DOG2。 無法刪除foo中。 它是一個目錄。 

所以明星擴展到所有的 目錄中的文件。 所以在技術上RM *好像是說 RM CAT1,CAT2,DOG1,DOG2,FOO。 而RM -rf,技術上明星會 實現我們想要的東西,但RM -rf-- 如果我走出這個 目錄,RM -rf溫度, 那將進入溫度和 遞歸刪除一切。 

所以,明星是分開在那 了解by--所以這件事 我正在運行,這個東西 這是促使我要命令 然後執行和操作的 他們,我稱之為我的殼。 所以這個shell本身就是一個程序。 如果我想,我 可以運行位於/ bin / bash的。 殼被稱為慶典。 現在我們看到的東西 已經略有改變, 那是因為我的設置 外殼有所不同。 

但現在我在技術上運行 在我原來的殼殼, 我可以退出該shell,現在 我回到我的頂級殼。 說法的目的 這is--的明星。 所以,明星是什麼 理解的是bash。 於是命令rm -rf,-rf標誌 理解只是RM。 它知道,當你 通過一個-rf你 希望它遞歸刪除 所有的文件而不提示。 明星被理解的東西 通過bash中,當你說RM *, bash中是不會說 哎RM *,取出明星。 擊會說RM * 刪除CAT1,CAT2,DOG1,DOG2。 它會自動將擴大 所有在該目錄中的文件。 

同樣波浪線是另一個 符號bash的理解。 當你說CD〜,bash的擴展 那到你的home目錄。 其他問題這麼遠嗎? OK,所以我們要開始去快。 

選項卡中完成。 只是把它扔到那裡。 很多人不 意識到這一點的存在。 所以,如果我輸入的CD陶氏,我 要進入下載。 我並不需要鍵入nloads。 我可以打標籤。 所以它識別出 陶氏是一家前綴 不符合任何東西 否則在此目錄中, 所以它會完成你們。 現在我可以進入。 

我也做了遞歸。 於是命令mkdir foo中。 讓我們去到foo中。 MKDIR吧。 所以,要回我的家 目錄中,我可以看到下載。 現在再次打標籤, 自動將填foo中。 這是唯一的目錄。 再次擊中標籤,自動 去填寫吧。 所以,現在我在(〜下載/富/條)。 

所以這個選項卡中完成, 每當我到辦公時間, 而我站在 一個人的肩膀, 他們要去RM D-O型W-N-L-O-A-D-S,我要死了。 只是標籤,標籤,標籤,標籤。 所以肯定使用的標籤。 同樣和 下來,很多人 只是碰巧 從來沒有觸及上下。 它會經過以前 命令,所以如果你只是跑的東西, 並且要再次運行它, 牽住了,直到你得到它。 行。 

這麼快,一些其他的事情。 讓我們重新回到溫。 讓我們創建一些文件。 所以在這裡,我只是 要列出一些單詞。 狗,貓,喵喵。 讓我們做狗,魚。 所以,現在代表是一個非常 有用的命令,你 使用全搜索 對於一個特定的文本文件, 而在技術上,你可以做真正的 複雜的表達式為它匹配。 

所以在這裡,如果我用grep,什麼 我要搜索? 比方說,我在尋找貓和 我要搜索所有這些文件。 所以,我該怎麼做所有這些文件? 星。 因此,在文件中的一個,我有一隻貓。 我大概可以有 稱它更好的東西, 因為看起來像 行號什麼的。 但在文件中的一個我與貓的線。 在文件中的兩個我有貓行。 所以,現在我可以看看裡面的文件之一, 看噢,該文件確實有貓。 通知文件中的三個不匹配 因為貓是不是在那裡。 我可以grep的喵。 只有文件中的兩個有喵。 

因此,這可以結合, 再次,與-r,這 正如我以前說過 通常意味著遞歸。 所以,我可以在這裡拿出中,grep -r 任何情況下of--讓我們編輯 這一次只是扔一隻貓在那裡。 所以,用grep -r任何情況下 貓的整個目錄。 它會遞歸 搜索所有子目錄。 因此,在巴茲,還有貓。 在溫度/ 2,還有貓。 而在溫度/ 1有貓。 所以這是文件中進行搜索。 

現在,你也可以使用一個發現。 等發現是專門約 尋找具有給定名稱的文件。 因此,讓我們做更多一些。 讓我們進入下載。 觸摸DOG1。 觸摸CAT2。 觸摸cat_dog。 觸摸catcat。 

所以我想找到的所有 文件與狗的名稱。 因此發現,與最長 一次,我從來不記得 如何找到工作,直到我終於 讀的東西,說得那麼清楚。 所以發現,自動遞歸。 你並不需要通過一個-r。 所以找點。 我們還沒有談到點呢。 而點點總是 是指一個目錄了。 點總是表示當前目錄。 所以我可以RM在-r點 同樣的方式,我可以命令rm -rf *。 最終他們 完成同樣的事情。 RM -rf點是要去除 整個當前目錄。 

好了,我不想在那裡做。 但找到點。 所以遞歸搜索當前 目錄,現在一切 在此之後的一堆標誌,你 使用從返回排除的東西。 所以找點返回的一切,它 可以找到從當前目錄。 這些都是所有文件 遞歸搜索。 我們將看到一些有第二個的。 

但如果你想知道我該怎麼辦 即,這樣的命令K,最起碼 我在Mac終端將其清除。 控制l通常清除 這對於任何類型的終端。 您也可以鍵入清楚。 如果你有機會 成一個奇怪的scenario-- 它發生在我身上了幾個時間 -  在您提示的顏色 都搞砸了,或者你 不能夠看到什麼 當你正在打字輸入,因為 有時像背景顏色設置 相同的前景色 現在你看不到的字體。 重置是什麼,只是重置 你到默認黑色背景, 白前,或任何 你將它們設置為。 

所以,我們說到哪兒了? 找點。 所以,現在一切都過去,這 點限制的結果 東西相匹配 給定的模式。 所以在這裡我要搜索 一切與名貓。 我什麼也沒得到。 為什麼會這樣? 好吧,我只是在尋找 東西正是名貓。 如果我想搜索的東西 有一些圖案,並cat-- 引號技術上是沒有必要的, 但我扔在那裡。 所以,現在它找到catcat因為 這是唯一的事情, 有一些武斷 其次是貓的圖案。 我可以把貓*,現在 找到catcat,cat_dog,CAT2, 因為那些都是事情的貓 在開始之後任何東西。 你可以結合這一點。 如果你想搜索所有的C文件 你有,你可能會做的* .c。 我們在這裡blah.c。 所以這是一個發現的作品。 您可以搜索。 它有一大堆的標誌 為進一步的限制。 和一個對他們來說,假設-d。 所以不推薦使用。 哦,那不是我想要的。 不-d。 D型。 因此,發現點 -  D型。 還等什麼,僅僅是做了我搜索 在當前目錄下的所有文件 與A-- d代表 directory--目錄類型。 這將返回所有目錄 在當前目錄中。 和F型的所有常規 文件,所有的非目錄。 所以,這只是一個 例如其他的方法你 可以限制搜索其它 比文件的只是名稱。 

它已經30分鐘。 仍在繼續。 

艾里遜:我會微風過。 它會沒事的。 

羅布·鮑登:所以一些其他的事情。 現在的一聲,感嘆號。 這樣一般是指: 好了,讓我們看一個例子。 所以!樓什麼的怎麼辦? 那麼它似乎有 反复找點型F。 怎麼樣!克? 這只是用grep -r貓*。 所以,一鼓作氣,您可以使用重複 最近完成的命令。 所以,如果我輸入!GRE,它會重新運行 始於GRE大多數命令 最近。 

你可以看到這一切 歷史命令。 所以歷史。 這些都是 命令我今天跑。 和好了,這是不是真的 限於今天, 但我只用這 家電今天的。 這是你的全部 你的bash shell的歷史, 除了它在某點切斷。 聽眾:如果你這樣做,會發生什麼 歷史[聽不清]命令和錯誤 在結果仍然打印the-- 

羅布·鮑登:是的,如果有 在這些commands--的一個錯誤 所以我們說,這是一個 未找到錯誤的命令。 仍然出現在歷史記錄。 行。 在什麼其他問題? 所以這就是一聲巨響。 

現在,真正有用的命令,伙計。 所以,讓你的 手動對給定命令。 所以我們說男人的ls,所以 這是我展示LS。 它列出目錄內容。 這是我看到有 都存在這些不同的標誌。 所以我們看到ls -l命令的存在 如果我們閱讀。 ls -l命令 給我的這個完整列表 與誰擁有的文件目錄, 該文件的大小,在 的修改的時戳。 所以LS -a是另一個你可能會 實際使用多少有些頻繁。 -al是我最常見的標誌,在過去的LS。 

所以-a,看到有很多 不僅僅是LS多個文件。 LS -a。 什麼是在與所有這些文件? 他們先從一個點。 所以這是一個約定在Linux中的 即以點開始的文件是隱藏的。 所以它只是意味著, 當我們剛剛直LS, 或者,我們正在尋找使用這個目錄 取景器相當,或Windows 資源管理器等同,我們 不希望看到這些點文件。 他們只是污染對事物的看法。 因此,他們被隱藏 除非您特別 要求他們像-a。 這樣我就可以用cd命令進入。本地,我看 這本身就是一個目錄 一個共享目錄, 應用程序,等等等等。 於是點,他們只是隱藏文件。 

好了,其他重要的。 我有一對夫婦,我可以跳過。 讓我們只對真正的快速通話 文件重定向的東西。 所以這是一個複雜的全系列 的東西,你可以用這些做什麼, 只是看到他們,讓我們說,迴聲。 另一個命令。 非常愚蠢的命令。 它所做的就是打印我告訴它。 所以迴聲招呼。 它只是回應打招呼的畫面。 你好世界。 相呼應的hello world。 

因此,一個命令或者一個 符號bash的理解 比符號這更大,並 即,輸出到文件符號。 所以,如果我輸出這 FOO,現在有一個文件 名為foo,裡面 這是世界您好。 所以請注意,當我回音 你好世界管到foo中, 它沒有回音的hello world。 相反,它被放入文件foo。 而另一個命令只是 把它扔在你的貓。 這是一個簡單的方法來一場徹底 列出的文件中的內容 這樣我就不必開 文本編輯器來查看。 的所以內容 foo的文件是的hello world。 我可以貓blah.c, 內容是這樣。 

同樣,這些命令是,不 希望你把它們都記住。 這個想法是,你見過他們。 也許你正在努力 什麼,你 就像我討厭打開此文件。 我希望我能看 在內容真正的快。 你可以這樣做,那麼 回過頭來說,哦,我 記得是這樣 存在,它的貓。 

所以,是要的文件。 現在有沒有什麼好的 例如從一個文件中讀取呢。 是什麼東西把 從標準的東西? 任何簡單的Linux命令? 當我們得到它,在一對夫婦 週所有piece--好, 這週你有一塊,你 開始從用戶接受輸入。 所以通常你鍵入 該輸入的鍵盤。 而不是打字說的 輸入的鍵盤, 您可以改為管道從文件 所以,當你這樣做的馬里奧,./mario, 管中,從任何給定的文件中,並 那將運行馬里奧程序。 在沒有預料的輸入 鍵盤上,而不是它的 只是要閱讀 線路從FOO文件。 

所以,大於富將其放入 foo的文件,且小於富 需要的東西,從foo的文件, 使用該輸入到這個程序。 而剛剛看到它,我們也可以呼應 FOO酒吧巴茲,然後而不是一個 大於,讓我們做兩到foo中。 這是什麼做的? 它只是追加到文件中。 因此,而不是發現,如果我不回應胡說成 富然後貓FOO,它只是胡說。 所以,當你輸出到一個文件,它 完全覆蓋該文件。 如果你只是想追加, 雙[?平地機。 ?] 

而在去年的管道。 管獲取更加複雜,其中 它需要一個命令的輸出 並將其饋送到下一個命令。 因此,一些平常的事情,歷史。 所以,唉,我不想看這個。 告訴我在我的歷史中的所有命令 在這裡我用grep-ED的東西。 不,這是令人困惑的。 告訴我在哪裡,我覺得所有的命令。 所有的查找命令我曾經跑了。 

所以歷史。 現在,歷史輸出到 篩選此命令列表, 但我不希望 將其輸出到屏幕。 相反,我要管成grep的。 因此,讓我們用grep進行查找的所有實例。 所以現在,而不是採取的grep 的輸入,而不是of-- grep的是能夠處理的input--我們 使用grep在這裡稍微不同。 因此,而不是打字名單 事情我們想搜索 和所述的grep正在作為輸入。 所以,如果我只是grep的發現,它 等待我輸入的東西。 所以貓你好找到。 您好。 查找。 請注意,我每次鍵入找 它認識到,我輸入的查找。 因此,而不是此, 搜索文件的查找。 

所以,歷史是現在要 輸出所有的命令的列表。 我們把該輸出, 我們正在餵養它到grep, 所以它吐出 發現的所有實例。 我之所以說這會很混亂 是,如果我 - 它仍然撲朔迷離。 如果我用grep grep的。 請注意,這是幾乎總是 顯示命令我 跑,因為該命令 本身具有的grep它裡面。 

好了,就什麼問題嗎? 我會在這一點上轉移過來。 希望這是一個很好的 所有命令的概觀 你不需要有 記住,但是這些補 堅實的95%是我 這樣做在命令行中。 也請記住,在命令行 本身的bash是一種編程語言, 所以,當你坐下來,你 可能需要做非常複雜的事情。 因此它具有類似的東西 循環,並且如果,並且所有這些 那你要習慣 與你的編程語言。 但是,這是超越 本節的範圍。 好了,沒有什麼問題? 艾里遜:沒有? GABRIEL:你會to-- 艾里遜:我能行 對礦井,如果你想要的。 我們可以看看會發生什麼。 羅布·鮑登:關艾里遜。 艾里遜:嗚。 你是一個望塵莫及,羅布。 難道你要我跟你轉? 或者你有,OK。 我要去嘗試,並沒有 很是冗長那裡。 如果讓這種意志來看看 工作,我想它的方式。 也許? 哈哈! 是。 

所以,我只是要很快去 通過變量,循環,條件, 和編譯器一點點。 如果你有問題 任何時候,請阻止我。 這些傢伙會提醒我重複 你的問題的情況下,我忘了, 但應該不會太差。 

所以變量,是的。 我們有沒有一個你 片劃傷這裡。 我敢肯定,你們中的大多數,如果 你有某種遊戲 那你從頭開始創建,你有 保留的東西軌道一樣得分, 或時間,或類似的東西。 因此,那些明亮的橙色 我們看到有件 都只是暫存形式 變量,你一定會 可以使用變量 整個程序。 如果你不是,我不是真的 知道自己在做什麼。 

但無論如何,大的事情, 定義變量。 用C每一個變量都有 有一個類型中聲明, 所以我給你一個非常 一般一個在頂部。 所以,你有你 類型,然後什麼 你決定打電話給你的變量。 所以在這種情況下,類型 在變量列表。 

我們有三個例子。 夏亞有些檔次的, 一個A,這是什麼 我敢肯定,你都想要 取得這一類。 您可以定義多個 在一行中的變量 只要它們具有相同的類型, 這是我們的第二個例子中有 在這裡你有三個 變量中,x,y和z。 他們都是浮動。 然後你也可以,在這最後 例如與詮釋得分和數量 隊,你可以 初始化它們就在那裡。 

所以在中間例子,其中我們 只是有X,Y和Z的浮動, 那些尚未初始化。 他們沒有任何價值。 或者他們有垃圾值。 如果您嘗試使用它們, 編譯器會罵你。 你有兩種申報和 初始化變量。 因此,在這個最後一個,我們正在做兩個。 我們聲明變量 比分和球隊的數量, 我們正在初始化他們,給 7和4它們的初始值 分別。 涼爽。 大家好? 真棒。 

OK,所以一些約定。 如果你們看過 通過樣式50,這些 只是事情,我們想為 你要實現你的風格。 因此,有意義的名稱。 如果你開始打電話的事 剛的x,y和z,尤其 當你進入更長 程序,你 可能會 迷惑自己,是 喜歡什麼是這個變量指。 我不知道這意味著什麼。 

所以,如果它意味著持有 分的高分,稱其為得分。 如果它的目的是保存一些答案 或導致,給它一個這樣的名字。 for循環,我們將 進入的下一個幻燈片, 單個字母的變量都是精品。 ROB BOWDEN:我,j和k分別 只是約定for循環 每個人都希望他們 被稱為I,j和k。 您可以撥打them--我看行 列或行的電話,有時 對於兩個嵌套循環,並 這也是一種標準。 但是,i和j被完全理解。 

ALLISON:是啊,我和 j您是完全的罰款。 為了清楚起見,像 在你的一些P組, 它可能是有意義有更多的 在那裡只是描述性事 跟踪它。 但我認為,I,J和K,我認為 絕大多數的我們全部使用。 

羅布·鮑登:有了這些 約定,所以風格是很重要的。 這是四個軸中的一個 在這你分級, 它是那麼容易只是去了 你P設定在年底確保 有沒有文體的錯誤。 所以一定要確保你是正確的tab鍵切換。 確保你的變量命名。 留下一些評論。 這是很容易得到這些點。 你不必去想 為了任何事情來得到這些點。 你不必弄清楚什麼了。 它只是使它看起來很漂亮。 

艾里遜:其實我們 有風格的50,這 會告訴你,你搞亂 了,如果你搞亂款式 並會告訴你,正是你 需要修復,你需要如何解決它。 這也是剛剛好提 這是當然的政策 如果你在辦公室 小時,你的代碼是一個爛攤子, 我們可以拒絕幫助 你,直到它看起來更好。 於是開始了吧, 保持一貫的風格, 你也只會讓 你的生活輕鬆許多,當 你試圖去通過調試。 如果你想弄清楚 在那裡你錯過了一個大括號 他們是所有的地方,你 只是讓自己的生活更加艱難。 所以,要與風格相一致。 我保證它會讓你的生活更輕鬆。 它會讓我們的生活更輕鬆。 每個人都會更幸福。 這就是你想要的。 GABRIEL:你的分數會更高。 ALLISON:是的,你的成績。 如果你的TF就是喜歡你, 往往是有利的。 好吧,然後就 這裡的第二點。 一致的初始化。 所以,正如我們所看到,你可以聲明 和初始化的東西。 在同一行上的多個變量。 我們希望您不是一回事 做的是聲明一些變量 而不是初始化它們在同 您正在初始化其他線路。 

所以,如果說做 沒有任何意義, 我們這裡的例子 我們正在申報整數 在宿舍的變量 助攻和便士, 但宿舍和便士 有沒有初始值。 我們沒有初始化他們, 但就在中間有 我們已經初始化助攻為0。 所以,無論是做宿舍,硬幣,硬幣。 或者做宿舍等於0。 一角硬幣等於0。 便士等於0,或任何 這些初始值。 

大的事情有型有款,是一致的。 如果有疑問,是一致的。 但是,按照我們的風格指南了。 涼爽。 每個人都很好嗎? 

聽眾:哪裡的風格指南? 艾里遜:本風格指南 是on--有什麼網站? 

GABRIEL:我認為這是manual.cs50.net/-- 艾里遜:風格? 

GABRIEL:風格。 是的。 

艾里遜:是的。 那麼問題究竟在哪裡風格50。 manual.cs50.net/style。 是嗎? 

聽眾:如果我們定義 變量,它是OK 如果我們把像[聽不清]像 INT得分,然後INT目標。 所以,你會說,現在我們已經 一定要確定他們在一起嗎? 

艾里遜:那麼質疑,應 你有多餘的代碼 當你定義 變量如int得分和 在下一行INT遊戲? 羅布·鮑登:有一定 情況下,冗餘的代碼是壞的。 我不會考慮 該冗餘代碼。 我幾乎從來沒有申報多 變量在同一行過。 如果有什麼,那是因為 平時我留下一些評論 解釋變量是什麼。 所以我會說INT得分斜線斜線。 跟踪什麼的。 在總斜線斜線。 因此,它是那樣的多格羅瑟 把它們都在同一行上。 我從來沒有把它們放在同一行。 

艾里遜:我覺得這是 個人偏好在這一點上。 

聽眾:這是否去 for循環之類的東西嗎? 羅布·鮑登:像裡面? 如int i等於0逗號 長度等於什麼? 那你沒有選擇。 用for循環的初始化 part--所以你可能只看到 INT i等於0分號我少 比任何分號我加再加。 這個int i等於0, 技術上你也可以 做我們之前看到的 用逗號語法。 INT i等於0逗號Ĵ 等於3逗號k等於5。 你沒有選擇拆分 這為多行, 這就是標準。 看到它有罰款。 艾里遜:真棒。 好吧,方便SEGUE成環。 所以呀,我們這裡有一些例子 迴路,你們在看到划痕。 當然,所有的這些 只需在C.重建 他們基本上是讓你 重複代碼的某些部分 直到一定的條件 得到滿足,我們將 進入正確的說話後, 關於循環使用條件語句。 

因此,我們有三種主要類型。 因為,雖然,做一段時間,這 我們將所有的經歷現在。 所以,第一個是for循環。 所以對於一些條件, 執行這個代碼塊。 我們有這個很酷的小 關係圖在此間舉行的底部。 但基本上,你在 你的,那行頭, 你要 初始化變量。 

因此,當我們談到,我是 等於0或i等於10。 無論你需要的 變量是它的 要被初始化的存在, 聲明和初始化為某個值。 所以後來我們有一些 條件是怎麼回事 要檢查我們的 可變反對的東西。 這樣的情況下的典型的情況下 也許你想這部分代碼 執行五次。 因此,我們不得不INT i等於0,而且我們 希望它是,當i小於5。 使條件是剛剛 要檢查每一次。 如果條件 計算結果為true,它的 要運行的代碼,而這正是 這是什麼小圖是顯示。 

所以它執行它。 它更新一個變量, 這就是我們看到的 在我們對的最後部分 環路初始化那裡。 因此,只要繼續這樣做 直到該條件沒有被滿足, 然後將退出 循環並繼續 移動與程序的其餘部分。 每個人都很好嗎? 涼爽。 

因此,這裡是一個例子,非常相似 到東西,我剛才講的。 所以,我們只想打印 這是CS50 10倍。 所以,你在這裡看到我們有 我們的,然後我們 初始化變量 i到等於0。 我們的條件檢查 它的不到10%。 因此,計算結果為true時首先我們 開始,然後更新我們的變量 每次它實際上執行的時間 並打印出來,這是CS50。 經過10次將終止。 涼爽。 

所以,當環路旁邊。 正如你看到這裡,我們只是有 有的雖然這condition--問題? 

觀眾:我怎麼能跳 其實不只是一個數字, 但兩個號碼[聽不清] 我加再加加? 

艾里遜:所以,問題是你怎麼能 由一個以上的更新變量 的時間。 所以我加Plus會 更新一個各一次。 如果您希望通過更新它 2,你可以做我加等於2。 

羅布·鮑登:你見過 加上演講等於沒? 

聽眾:[聽不清]。 

艾里遜:這是有效的 同樣的事情,我等於我加2。 因此,它打算把它和 通過每次2更新它。 加等於只是一些 我們所說的語法糖。 羅布·鮑登:是啊,那些存在 幾乎所有的算術運算符。 所以,我多次等於 將增加一倍的數量。 Ĵ除法等於3是相同的 作為j為j通過3分。 

艾里遜:或減等於2將 通過每次2遞減島 羅布·鮑登:即使MOD平等。 你沒見過位運算符, 但插入符等於和等於符號, 所有這些的存在。 

艾里遜:所以很多時候,尤其是 你的第一對夫婦的P組, 你將很可能由遞增 一個,所以我加再加,J加再加 是你要的所有東西 以典型地使用。 但該更新條件是 完全的控制範圍之內。 您可以通過任何增量更新 或以任何方式你決定。 也許你甚至希望它是 隨機數的時候。 但是,是的,有很多 事情可以做的。 你不會受限於我加再加。 

羅布·鮑登:只要你 知道它的存在,它也 存在的另一種形式,再加上加上我。 因此,如果你曾經在網上搜索 而碰巧看到再加上加我, 幾乎是同一個意思。 艾里遜:酷。 好不好? 真棒。 因此,儘管循環。 非常相似。 你有一些條件。 最主要的是要注意 這裡,代替具有 三個不同的部分 成立,我們有一個。 我們只是有一些條件 這就是被選中。 並以同樣的方式,只要 該條件的計算結果為true, 你的代碼將運行。 如果它是假的,它 將終止,招 到你的程序的下一個部分。 因此,這是種like--什麼 檢查的一個很好的例子 對於一些正常狀態? GABRIEL:儘管這是事實。 艾里遜:你可以這樣做,而真實的。 井,1等於1。 

羅布·鮑登:你可以做while-- 使用for循環剛相反, 你總是可以編寫一個 for循環在while循環, 所以我大於0或 雖然我不到10。 

艾里遜:真棒。 然後我們做的while循環,這 非常適合用戶的驗證,其中 你想獲得的東西 你的用戶,看它是否有效, 然後從那裡繼續。 所以的事情知道的一個是用 這樣做,而在於它要執行, 然後它會重新執行 如果滿足這一條件。 

所以,可能是最好的方式做到這一點 只是看到一個例子來說明。 因此,正如我剛才提到的,用戶 驗證是真的useful-- 或者做消遣是真的 實用與用戶的驗證。 因此,這只是走 重新提示一些用戶 直到他們進入一個正數, 這可能是你的P組有用 本星期。 因此在這種情況下,當我們 首先運行該程序, 它要打印 輸入一個正數。 它會得到一些 來自用戶的輸入, 然後它會檢查 即對輸入的條件 你已經為它設置的。 

所以在這種情況下,它會檢查。 它會說,OK, 是我們的輸入負數, 或者是0或負, 這將是無效的。 這樣的話它會重新提示。 問題? 

聽眾:這是相同的,那麼作為一個 while循環,如果你只是複製代碼 並把它[聽不清] while循環? 

艾里遜:那麼問題是會 這是相同的只是一會兒 循環,如果我們只 複製while循環以上。 所以在這種情況下,你的while循環 要首先檢查條件。 所以在這種情況下,如果我們試圖 寫的只是一個while循環, 它會說而 輸入小於1。 但是,我們並沒有一個輸入它。 

聽眾:如果[聽不清] while循環包括這段代碼, 但你應付代​​碼 上面的while循環也。 你只要有這個代碼 [聽不清] while循環。 ALLISON:這將是 同樣的事情,是的。 所以,你可以只寫 -  而不是有一個do--肯定的。 GABRIEL:但是,這更優雅。 ALLISON:是啊,那是更優雅。 你可以進入設計和諸如此類的東西, 但是,是的,你完全可以做到這一點。 還有沒有其他問題? OK,爽。 

因此,我們談了很多關於條件 所有這些循環,我們有, 所以我們實際上進入 條件布爾表達式。 同樣,你在C中使用這些, 所以只是一種過渡 從以上圖形界面 實際的編碼。 

酷,這麼大一個,如果。 基本上只允許我們引入 一些邏輯到我們的程序和檢查 SYS條件。 所以在這種情況下,確定, 為n大於0? 的確是這樣,這樣你就可以執行了。 這只是一些檢查 你已經條件 設置,我認為我們都 舒適的檢查環境。 涼爽。 所以,如果別人是你的另外一個, 你可以說好,如果這是真的, 這樣做的第一件事。 否則我要你 默認情況下,做別的事情。 像這種情況,你要么選擇一個 正數或負數。 你只有兩個選擇。 你需要它來執行,無論 了解你的用戶輸入。 所以,你可以說好, 是它大於0? 涼爽。 打印的正數。 如果不是的話,打印負。 大家好? 

再有一點認識是 如果滿足該條件的話, 的人會永遠也執行。 只有將其中的一個 同時執行。 所以這是一個權衡。 你沒有得到兼得。 你要么具備的首要條件。 你要么有,如果 還是一樣,不能同時使用。 然後可以把事情 更加複雜, 因為如果你能做到, 否則,然後其他人。 所以在這種情況下,我們 有三個條件。 再次,只有其中的一個是 最終將會被執行。 所以,你可能想知道 好吧,如果你有什麼 有什麼事情, 能滿足這兩個。 也許無論你輸入 符合這兩個條件 因為如果和其他人的話。 唯一的事情,那將運行 

艾里遜:一旦它發現的東西 它滿足該條件 計算結果為true,這就是 它會跑,沒有別的。 所以,如果你有這號 關於第1 0和5之間, 或者是介於3這個數 和5的其他部分如, 您輸入的number-- 我說0和5還有 -  4。 這將創下第一個。 它會說OK,這 數為0和5之間。 執行和離開。 它永遠不會打了第二個選項。 很酷吧? 真棒。 

OK,我們也有switch語句,如果 你想獲得更為緩慢 - 還是遺憾, 開關旁邊。 我自己走在前面這裡。 同樣,如果多塊 正如我剛才所說的地方 只要你找到一個條件是 這是遇到了和其他人的話,如果其他人, 它的葉子。 如果您需要檢查 多的東西,你 會想用這個,因為 它會檢查這裡的每一次。 因此,這將通過,如果運行 它是大於或等於90, 它會打印。 它將貫穿和 檢查這些每一個人。 

聽眾:所以這將是 比[聽不清]更多的越野車。 這會不會像[聽不清]? 

艾里遜:問題是這是否 越野車還是該做你想做的。 這真的取決於什麼 你想從你的程序。 

聽眾:我的意思是,如果你把90等。 艾里遜:如果你把90-- 聽眾:[聽不清]。 GABRIEL:你會得到兩件事情。 艾里遜:你會得到兩件事情。 是的,2。 

羅布·鮑登:兩個? 

艾里遜:第 

羅布·鮑登:四。 如果你把90,它會說你 得了A,你有一個B,你有一個C, 你有D. 

聽眾:[聽不清]。 艾里遜:對。 所以,我要看你 想從你的程序。 有時你需要 檢查多東西。 你會得到更深入到什麼 良好的設計是為你往前走。 重要的是要 知道的是,這 這裡將檢查所有四個條件。 然而,如果這是一個的if else的if else 否則的話,它會打的第一種情況下, 它會打印你有一個A和完成。 

羅布·鮑登:即使我們 決定改變這是否 和大於或等於90, 如果和大於或等於80, 如果和小於或等於89, 如果n大於或等於70,則 並且n小於或等於 79,所以,這將是正確的。 這將做我們想要的,但 它仍然會檢查每一個它。 

因此,而在第一種情況,如果我們 進入90只,如果還有其他的話,如果, 我們輸入90,然後 它要糾正。 它會檢查第一 1,打印你得到一個A, 跳過一切,因為它 已經找到一個工作。 所有病例均是互斥的 否則的話,如果別人的話的基礎上。 所以它會執行 首先,如果,那麼它的完成。 它會走到最後。 

而如果我們改變 這是什麼我 說小於或等於89。 這將檢查的第一個。 它會打印。 它會檢查第二個。 它不會打印。 檢查第三個。 無法進行打印。 檢查第四個。 現在去打印。 所以在這種情況下,否則,如果 版本,因為這些情況 是相互排斥的,這是 更好地利用別人的話,如果還有的話, 因為那將不得不 少的條件檢查 比這個版本。 艾里遜:真棒。 所以另一件事,我們可以 做的是switch語句。 基本上是一個switch語句 需要一些變量, 在這種情況下,它是n,並且 決定執行哪一個情況。 所以,這也是1在您的案件 應該是種相互排斥的。 所以在這種情況下,如果 我們得到一個,它的 要匹配什麼的 n個變量 - 無論價值 是其中的一個箱子,所以1,2,或 3,並打印出相應的行。 

然後,如果你在這裡看到, 我們也有一個默認的, 你可以對所認為的你的人。 如果你選擇的任何其他號碼,以便 除1,2,和3在這種情況下 它只是要打印無效。 決定何時使用IFS與 如果偷別人對交換機是怎麼回事 要的東西,你們會 看到你開始編寫設計智慧 更複雜的方案,並且 有沒有硬性的規定 的時候使用它們。 這真的取決於你的環境。 

羅布·鮑登:而就 把它扔在那裡 因為它是更舒適的部分。 開關時,往往會 be--所以你限制 在方式的數量,你 可以使用它們,因為如果, 條件可以很 你想要任何東西。 帶開關的情況下, 必須是數字, 或技術上也可以是字符,但 字符,正如我們將看到的,都只是數字。 因此,他們必須是數字,但開關 真的,如果不是更有效 否則的話,如果還有,因為即使 以這個例子before--好, 檔次例子似乎不錯。 

好吧,讓我們在這裡說,我們不是做 這是一個用if else的if else,如果場景。 因此,如果n等於等於1,則 打印你選擇了一個低的數字。 如果別人當n等於等於2, 你選擇了一個中等數目。 否則,如果等於等於3,高。 否則無效。 

所以我們可以說,這是我們的場景。 所以我們可以說,我們進入 4,因此我們預計無效。 順便說,如果其他的if else 如果方法是行不通的 檢查第一個條件。 這不是滿意。 所以,我們檢查了第二個條件。 這不是滿意。 檢查第三個條件。 不滿意。 所以,我們去別的並打印無效。 

路開關廠 是它編譯成 到了我們要去 調用跳轉表。 主要的想法是 當你進入4的, 它可以立即去默認。 它並不需要檢查時的情況下我嗎? 沒了,這不是它。 案例2? 沒了。 案例3? 沒了。 默認值。 OK,這一定是哪裡 想要的,然後執行這一點。 不,它會立即跳轉到默認值。 或者我輸入2,它是 馬上要去到2 而不需要去通過案例1。 

因此,在這種方式 切實如今這 沒有那麼多的效率增益。 一般的電腦都還 快,這不是很大。 但它是這種情況即 開關速度更快。 如果你真的想 優化,使用一個開關。 

艾里遜:酷。 然後我們有三元運算符。 所以我知道我前面提到的 單詞語法糖。 所以,它只是事情讓 你的代碼更簡潔。 因此,這是其中的案例之一。 

因此,三元運算符是問號 結腸我們行字符串中看到 上的equalsñ大於100 問號高冒號低。 所以基本上這是如何工作是很 在n大於100是一個條件。 所以我認為這是有意義的。 這就像問一個問題。 它說的哦,是正大於100。 誰知道? 而如果計算結果為 如此,這將讓你 第一件事是 那裡列出,這是很高的。 否則,它會為您提供低。 所以,這只是一個非常簡單的和 有效的方式做到像的if else。 這就是這一切。 

如果我們寫這 作為一個if else條件, 那將是如果n是大於 100餘名,高回報。 否則,回報低。 這僅僅是一個更 寫它的簡潔方式。 

羅布·鮑登:所以這個特定的例子 是當你正在做的事情 就是這樣,這是一種模式 在這裡我使用三元非常頻繁。 所以,我們還沒有談到的範圍呢, 但我討厭看到字符串s分號。 如果n大於100,S等於高。 否則,S等於低。 這樣的模式,這五個線 代碼100字面上的時間% 可以被轉移到什麼 就是在那裡與三元。 因此,三元,一行代碼。 在別人的話,五。 這是一個例子,我點 每一次。 這將極大的地方 對於三元運算符。 它是那麼乾淨。 但是,人們往往不會使用它。 

艾里遜:把它拿走加布。 

GABRIEL:所以現在你們所有的 在本週的演講學會 這一切都在一個 計算機是二進制的,對不對? 就像這裡的燈。 你可以是接通和關斷。 和一切,我的意思是 從字面上一切。 一些數字和字符和字符串, 甚至代碼,你寫的時候 它被編譯為機器 代碼之類的東西, 所以這一切歸結為0和1“。 

所以,當我們正在處理 與整數,這 是什麼,在技術上是非常 簡單,我們應該能夠做的東西 如添加它們,這是 最簡單的事情大概1 你可以做兩個整數,對吧? 因此,加法和減法工作得 就像它在十進制記數法, 在這裡,除了它是二進制的,對不對? 因此,它在基地2。 所以加1加1。 這給了0和1進行了過來。 而只是一味地這樣做,所以現在 自帶的更有趣的問題。 

我們知道如何代表所有 在計算機中的正整數, 但讓​​我們做這個練習。 假裝你們都在1960年或 一些試圖建立一個電腦, 你必須拿出的 存儲減去1的方法, 例如,或減去任何 整為此事。 你會怎麼做呢? 任何想法? 就在我扔東西。 是嗎? 

聽眾:[聽不清]指定 一個特殊的,如果你的[聽不清]。 

GABRIEL:您可以指定一個 特位,這將是0或1。 比方說一個,如果它是積極的 和0,如果是負面的。 該位,然後休息 只是存儲號碼。 涼爽。 所以這是一個非常好的主意。 我們有,我不知道,200。 如果第一位是 導通時,那麼它的加200。 如果它關閉,這是零下200。 涼爽。 

只有一個小 問題這一點, 這就是,如果我們試圖總結的東西了。 所以,想像我們有11111在這裡, 我們正在總結這與00100什麼的。 如果這兩個是積極的,這很好。 但是,如果一個 它們是負的,像 讓我們說,這一點在這裡 是一個負責任的 for--我打算做一個separate-- 所以這一個裝置,該數字在這裡 是正的。 這個意味著該 此數字為負數,對不對? 

但是,當你 要總結他們,你 需要一個if語句 他說哦,如果這是0, 那麼我的總和將是 不同的東西,對吧? 所以這是一個稍微 更聰明的方式做 即,這是所謂的二的補碼。 所以基本上我們 做的是我們定義零下1 要的東西,如果 我們加起來1給了我們0。 讓我再說一遍。 所以我們可以說,這是這裡1。 是什麼東西 當然在正整數 加入給我們0? 如果我們嘗試將它添加到這個數字? 我們要have--好了,讓我們添加。 我們將有1加1 為0,然後將其攜帶以上。 然後我們將再次得到0。 我越來越糊塗了。 而你會得到0和 0 0 0 0 0。 大量的0。 

在最後的,我們不 要能夠進行一遍, 因為假設我們只處理 用一個字節,所以只有8位。 所以電腦的默認操作是什麼 只是忘記有關[聽不清] 行? 因此,這就是所謂的 的二的補碼。 我們簡單地定義減去1是 這裡的事情,如果你添加了1 會給你0。 這就是很酷 因為我們真的不 需要後期實施 不同類型的總和的 這取決於這是否是一個 負或正數。 這是否有道理? 

這麼一件事,我們做 這裡為了將 積極和消極之間 整數,然後我們會拋一切, 然後我們加1的號碼。 如果您嘗試自己做 上一張紙, 你會看到這是有道理的。 但是,如果我把這個號碼 這裡,這是5。 所以,如果我翻轉一切 這裡,使1,1,1,1,1。 翻轉,翻轉,翻轉。 然後我把它加1。 我要恰好有零下5。 行? 

種這是有道理的,因為如果 你試圖用數字總結本 我們面前,這 was--讓我們再次撥動了。 這是101和大量的0。 如果您嘗試添加這些 兩個數字一起, 你將有完全相同0。 行。 有問題嗎? 

聽眾:[聽不清] 

GABRIEL:你是什麼意思? 

聽眾:負向 正[聽不清]。 

GABRIEL:不,你翻車 你加1永遠。 是啊。 好了,人物也被編碼的二進制文件。 我們有ASCII表,你 也看到了講座,對不對? 因此,它基本上是一個事物的映射。 在這裡,我不能強調不夠 對於一台計算機,一和65 從字面上同樣的事情。 所以,如果我寫的東西像​​炭ç 等於一,我可以在同一時間 只寫65在這裡,它 將是完全一樣的,好不好? 有沒有任何區別。 

我們通常傾向於把 字符類型的變量。 CHAR,不是因為他們基本上是 對於製成的,但因為 人類的約定。 但是,你可以處理整數 而不是char類型的變量, 你會沒事的。 唯一的實際差別 一個char c和一個int我之間 是一個int在大多數四個字節 系統,而一個字符具有一個字節。 他們本質上是 同樣的事情在數據方面。 那麼,什麼將打印嗎? 在這裡,我們印刷用printf數字 用加1,只是喜歡整數, 字符可以總結,因此 的字符也可以被求和。 因此,這也正是65歲。 因此,有將是 66,在這裡,我們有 65加小負大A, 這將是的,我真的不知道。 但是這將是完全相同的間隙 大寫字母之間 和所用更小的文字,所以 我們將得到一個小,對吧? 是啊。 所以,這是怎麼回事打印 性格這正是這一個。 好不好? 有問題嗎? 

在這裡,我們有一堆不同 類型為數值型變量。 我們已經談整型。 浮動,不過是to--這是真的 有趣,因為當我第一次聽說 編程早在一天 Python中,第一個節目我這輩子 試著寫,我看到有一個 在所謂的類型和類型稱為浮動。 和浮子是對於所有實數。 於是我問為什麼 我曾經用一個int呢? 因為如果我可以使用所有 實數有浮動, 我只想停止使用整數,對吧? 因為實數是 很像更通用。 

事實證明,這是 沒有電腦的情況下 因為他們根本 不同的東西。 所以,整數和浮點數時, 操作,你做給他們 是因為本質的不同 對它們的存儲方式,好不好? 我們要談一點 更多的關於在第二。 

所以雙只是一個更大的浮動。 通常在大多數系統中,一個float 是四個字節,就像一個int。 和雙是八個字節。 很長很長,其實只是一個符號 你追加到如int類型。 你說的很長很長詮釋這個樣子。 龍長整型X使它更長的時間。 所以在大多數系統中,這將使 八個字節,而不是通常的4。 而實際上你可以刪除 的,所以它只能說很長很長, 並且工作過,好不好? 你也可以做其他事情一樣 unsigned int類型,或只是再次簽名 也將正常工作。 而且,它們將使得X是一個變量 就像一切都是積極的, 所以你不能真正擁有負 在我們看到了這裡的路上號碼。 所以,下面的精彩 浮點和精度。 這是其中一個原因,為什麼你 想用整數來代替花車, 因為整數是100%準確的,對不對? 這正是這個數字。 對於浮動點,如果你 說的答案等於1比10-- 我碰巧確切有這個 計劃在這裡,float.c。 打印到20位小數。 1除以10,並 通常為0.1,對不對? 但在這裡,如果我們做 浮然後我們運行它, 我們看到,它不是完全0.1。 這是0.149的東西。 

為什麼會這樣? 因為你不能真正代表每 在內存中一個可能的實數 因為有 不可數很多。 所以,我們在技術上只能 表示它們的一個有限數量 與數據的有限量。 但是,這真的很有趣。 現在,這引出了一個 的問題,你會怎麼 去代表 與此位,對不對? 那麼如何彩車存儲? 與整數很容易。 但隨著花車想要 最大限度的範圍內, 並希望能夠代表 巨大的數字和非常小的數字一樣 0.000001同時。 如此反复,相同的遊戲。 沒有任何人有任何想法如何,我們可以 去代表內存浮動? 只是扔東西。 是的,請。 

聽眾:[聽不清]為 如果是兩個整數和一個 作為[聽不清]和一個幸福 小數點後的一切。 GABRIEL:好,冬暖夏涼。 所以兩個不同的整數。 你可以有12.45,所以這是12和45。 不錯。 什麼前,先要考驗你要說的話? 同樣的事情? 是嗎? 

聽眾:[聽不清]符號 你分開的基礎在哪裡。 

GABRIEL:科學記數法, 是啊,這通常會發生什麼。 因此,這就是所謂的尾數。 這就是什麼是真正的 號,然後將指數 只是那裡的逗號,不是嗎? 因此,這將是東西 形式1,2,3,4,5次10 到零下4。 我只是意識到that--是啊,沒錯。 然後這個10的負4是 要定義所在的逗號,好不好? 在巴西,我們使用逗號。 在這裡,你們用一個點。 這樣一個點。 

這是很酷的,因為這樣你可以 集中大量的位上的這個傢伙 這裡,在尾數,然後這 將是您的實際精度。 你也可以做到這一點無論是在十進制 或在二進制基礎的系統。 有不同 的方式來實現這一點。 有問題嗎? 是嗎? 聽眾:有多少地方 小數[聽不清]呢? 

GABRIEL:這是一個複雜的問題, 因為它從來沒有真正100%準確, 因為當你看到這裡,為 一些數字是100%精確的。 我相信,如果我們把0.5在這裡, 這將是100%準確的。 這將是0.500000。 所以在這種情況下,它是完美的。 但在其他情況下, 這是少得多完美。 根據我的經驗,像多達四個, 小數點後五位是相當精確的。 如果您使用的是雙,這將 有辦法比這更精確,好不好? 

羅布·鮑登:所以剛才扔 在彩車一些情況下, 我從來不記得100%如何 彩車的規格實際工作, 但我做你永遠記得 漂浮開始變得凌亂。 這樣的想法是,當你真的, 真正的大數字還是真的,真的 小的數字,我們開始 每況愈下 在差異化 之間的兩個親密的浮動。 

所以,我怎麼樣想的是 浮點不精確, 有兩個浮筒的 如果我嘗試將它們指定 在C中,儘管事實是 他們是不同的數字, 他們將成為 解釋為相同的號碼, 因為我們不能將它們存儲不同。 我們需要使用相同的比特。 所以,當我們到達 真的,真的大量湧現, 像10交談的300 的東西,它是在該點 該10到300或 5次為10〜300個 無法區分 7次10到300。 所以這是一個相當大的差異 兩個數字之間。 

但是,當你趴下 到正常範圍外, 你往往是相當 在區分好。 然後當你趴下真的很小, 你也變得非常糟糕了。 因此,像一大堆 0.0000,它變得非常糟糕。 GABRIEL:是啊,這麼快註釋。 從來沒有做到這一點。 永遠不要嘗試比較 彩車使用equals等於, 因為即使他們幾乎 同樣,幾乎相同的是不一樣的。 那麼,你通常做的是你減去 其中,採取的是絕對值, 看看這是不是小 0.0001或類似的東西,好不好? 和冷靜。 我知道很多人都有 一些背景在Java中, 特別是那些誰做 AP計算機科學,對吧? 而Java是一種語言 這主要是基於C, 它有幾個非常大的差異。 但對於循環,如果,之類的東西 ,他們都是一樣的語法。 我有幾個項目在這裡展示這一點。 

因此,舉例來說,一個簡單的Hello World。 這是世界您好在C中,你 傢伙肯定是熟悉的, 而這一點,這個人是在Java中。 所以,在Java中,我們有這樣的 公共類,你好世界, 公共靜態無效 主,和字符串的args。 該字符串的args會 出現在C中很快。 但是,我們不要去那裡呢。 現在,我們有空隙這裡,這意味著 這主要是不帶任何參數。 然後我們有 的System.out.println的,這就是 一種等價類printf的。 在這裡,我們並不真正需要的反斜杠 N,因為打印LN這是否適合你。 其附加的反斜杠 處的N行的末端。 

但是,如果你進入 有點像的,你 可以看到,他們是 幾乎同樣的事情。 這樣的初始化,並且 條件,並且在更新 is--我錯過了一個空間,這裡 - 他們 幾乎除了Java的同樣的事情, 作為擁有幾個高層次的東西。 在這裡,我們可以做的,再加上我和 Java將自動 使這個我在這裡,這是 一個整數,轉換為字符串, 再追加 兩個串在一起。 在這裡,在C中,我們需要做的與%D。 這裡的線,對於 長得一模一樣。 

如果我們看一下,如果,在IFS 還長得一模一樣,對吧? 所以,真正的大差異 在你在這裡看到的那些東西。 公共靜態的,無效的,並 那麼公共類的話。 因此,Java有什麼 稱為虛擬機。 這是非常嚴重依據是什麼 被稱為面向對象的程序設計, 這是一個非常,非常普遍 範式編程時下。 這個類的事情是你所看到的, 從面向對象的東西, 在你創建一個類,然後你 可以從派生類的對象。 我們不會說太多 不多,在CS50, 但是這絕對 東西真的很酷, 特別是如果你想進入 更複雜的Web開發 在該過程結束時, 像提交您的最終項目 和一些漂亮的框架和內容。 

所以基本上的想法是,你 不想重新實現的東西, 所以你創造的東西,是 非常通用的,如形狀, 然後創建 它從不同的形狀, 然後從每個 這些形狀,為您打造 在三個一些更具體的形狀 尺寸或類似的東西。 他們有這樣的層次,他們 從其他的繼承,所以 所有功能和所有變量 大形在這裡了,所有這些 將有,所有的這些都 將有,等等,等等。 所以這是基本的想法。 

C沒有說,但是C ++ 確實有這種功能。 和Java是嚴重影響 通過面向對象, 所以這就是為什麼你看到 類在這裡所有的時間。 而另一件事是 該Java虛擬機。 所以,我覺得,是一個非常聰明的想法。 那麼是什麼人誰 發明了Java的確實是 他們不想要 兩次編譯自己的代碼 如果他們不得不在Windows中運行它, 或者Mac或Linux,所以他們做了什麼 他們是從字面上運行 像家電, 但你真的不看到它發生。 因此,他們運行一個虛擬機 你的電腦,裡面的這 基本上像一個 微型操作系統。 而且操作 系統的生命的目的 只是跑什麼叫做字節碼。 

因此,而不是在C中,這樣,我們將 編譯這讓若,然後運行 ./if。 我忘了反斜線。 在Java中,你會先做 Java的C到編譯它,if.c. 這不是C.它的點的java。 然後,你必須運行不./。 你得到這個新的文件 if.class,但你不能真的 運行if.class現在只是 像我們以前那樣。 這不是一個可執行文件。 您必須運行。 你必須把它送入 一個叫做Java程序, 並且該程序是虛擬機, 然後你做if.class,或者如果。 是。 然後它的工作原理。 OK,所以這是同類產品中 虛擬機發生。 C沒有了,所以如果我是 把這個程序在Windows機器上, 在Java中C.這是行不通的它。 有問題嗎? 涼爽。 這是否超節今天。