一,什么是編程
究竟什么是編程?你可能以前聽過類似的詞語。電腦編程是一套指令?這就是問題,這些聲音就像說明就像人類的大腦80%是水。因為你聽到他們,並且然后你看到一個復雜的程序如Photoshop或者Flash高清晰度的視頻或者3D游戲。
是的,但不能僅僅是一組指令。但他們這些究竟是什么?每一個電腦程序是一系列的指令,一組單獨的小命令,一前一后的序列。一個程序可能只包含5個指令,或者5000個,或者500萬個。每一個指令告訴計算機做一件很小但很具體的,
把一個偉大的想法分解成個別的步驟的藝術。最精彩的是每個人都能這么做,讓我們想象下,你坐在郊區的一個房子里,等待一個朋友來拜訪你。你的電話響了,就是她,她問你路線,她告訴你她在附近的加油站,你知道那個加油站,
因為你每天就要經過那。所以有個點A到點B的路程,並滴到你的頭里面,但你馬上知道這條直線不能相通。你必須分解成簡單的部分,這對你來說是自然的事情。因此你開始扣除,你告訴她,首先”向前行駛1公里后“,“右轉”,然后
在“雲棲路”的“第二個路口”,“右轉”。具體,個別,簡單,清晰的自包含指令。現在你知道順序是至關重要的(vitally),你把這些單獨的指令混淆能得到很多不同的結果。比如先”右轉“,然后”向前行駛1公里“。順序的不同,會讓她到達
其他不同的地方。這些都是同級別的指令"左轉",“右轉”,“直行”。可以帶你在拐角處,也可以帶你去美國或者世界的某個地方,只是你需要更多的指令。所以編程就可以理解為給計算機方向,把復雜的想法或者復雜任務拆解到更小的個體指令中
並且使用一個編程語言寫那些指令。當然如果你沒有編過程,可能不太明白那些指令。你可能只知道右轉,左轉,直行。那些給計算機最基礎的指令到底是什么?它們常常是些基礎的東西,就像2個數字相加,屏幕上顯示一個字母,檢查用戶
是否點擊了空格鍵,改變一個單獨像素的顏色。你把足夠的指令串到一起它就能獲得足夠遠。所以你編寫復雜的游戲或應用程序時候,當你有100個人寫這些指令,一周60個小時,然后相互協同合作,就能很快完成復雜的產品了。計算機處理指令是非常快的,
計算機會准備的執行指令,但指令是你告訴它的,如果出來的效果和你想要的效果不一樣就表示你的指令有錯誤或者只是順序上的錯誤。在編程語言中,我們通過statement來使用那些指令,statement就像中文和英語中的句子一樣,使用單詞,數字,標點(Punctuation)來表達
一個想法。大多數編程語言的statement是非常短的,就只有幾個單詞。具體是什么單詞,就根據你使用的編程語言不同而不同,一些語言在statement結束后使用分號(semicolon)來作為結束,就像平常句子中的一個句號(period)。一些語言不需要分號結束,只
需要換行即可。一些語言全部是大寫字母,一些語言全部是小寫字母,一些不在意大小寫。現在理解每個語言的規則和語法。所以編程是把你的想法分解成一些指令塊,並且知道如何使用編程語言寫那些指令塊,注意正確的順序,正確的語法。
二,什么是編程語言
到目前為止,已經有數百種編程語言,但在任何給定時間內,有十幾種比較流行的語言,流行的語言表示被用於許多當前的軟件,大量開發者使用的語言,並且有活躍的社區(community),某種語言顯著(significant)的就業市場。隨着時間的流逝
(as the years go by),以前流行的語言可能會沒落或者更新,但時間會比較慢,大多數程序員在職業生涯(career)中學習和使用多種語言,一旦你了解基礎知識,學習額外的語言是非常容易的,稍后(a little later),我們會更深入當前流行的語言。
但如果是你新手,你可能會思考,為什么有什么多語言,不能都使用最基礎的計算機語言嗎。其實(actually)這個語言是存在的,CPU的芯片中央處理單元,是不理解目前那些流行的語言的。我們可以非正式(informally)的說,當我們寫代碼編程時,
計算機能直接理解,但事實一般不是這樣。那些是芯片理解的機器碼或者叫機器語言,那些指令直接運行在電腦硬件中。那為什么我們不自己寫機器碼,因為這幾乎是不可能的,這些數字的操作,微小的指令,工作於很小的內存塊中。即使你能寫它,但
其他人不一定會讀。這是為機器而不是為人,因為機器碼工作在CPU級別,不同的CPU型號對應不同的機器碼。在機器碼寫一個完整的程序就像用鑰匙在一座山中挖通隧道(digging a tunnel)一樣,理論上(theoretically)可能,但會很長很乏味(tedious)。
因此不要去嘗試。所以目前大多數流行的語言實際上是一個折中(compromise),它們是被發明(invented)的語言,就像一座橋來連接機器硬件和人類眾生。現在有些語言其實相當靠近機器語言,最接近的被叫做(assembly language),大體上靠近
機器語言,這寫起來是很困難的,並且你必須識別實際的硬件。所以被稱為低級語言,現在讓我看看被成為高級語言的編程語言,高級語言基本上不用讓你關心硬件,並且寫起來更容易,甚至能跨平台。但這些語言運行起來會相對慢一點,因為這些高級語言
不直接在CPU級別優化。話說回來(having said that)無論我們使用哪種語言,就會在它執行前被轉換成機器碼,不管我們寫java,C++,ruby,python的源碼,最后都會被轉換成機器碼在計算機上運行。寫源代碼需要知道三點:
1.怎么寫代碼,字面上(literally)其實就是打字
2.理解源代碼如何被轉換成機器碼
3.怎么運行它,怎么執行我們的程序
三,寫源代碼
源代碼寫在一個空白文本中,你能打開一個簡單的文本編輯器如Notepad或TextEdit。注意每個語言的源代碼擴展名是不同的,比如java下是.java,javascript下是.js她們都不是.txt這樣的擴展名。很多語言可以使用同樣的statement。比如
print("Hello World") ALGOL68/Python3/Lua。有些需要嚇人的(intimidating)大括號(curly brace),和怪異神秘的(weird esoteric)的關鍵字,比如java ,C++, C#。可能你記得多種語言的寫法,並且一個個敲出來。但當你熟練后
我們需要一種更搞笑的方式來書寫代碼,這時候程序員的文本編輯器出現了,他方便你寫代碼,更高級的如IDE,它提供的功能更復雜,有些代碼能自動生成。當然有些是免費的,有些是收費的。像行號,功能更強大的查找和替換這典型的功能。
他們往往有顏色編碼。這是不一樣的格式。彩色編碼是自動發生的,它可以幫助你閱讀和識別語言的不同部分。他們往往有語法檢查,有點像在一個文字處理器的拼寫檢查。如果它發現了你代碼的問題,語法檢查將讓你知道是什么問題。一些文本編輯器是面向
特定的語言,說的不僅僅是Java,以及一些其他人可能有幾十個語言的支持。現在,如果你做任何web開發你可能會發現,你所選擇的web開發應用也是一個可用的程序員的文本編輯器。集成開發環境的例子是蘋果的Xcode或微軟的Visual Studio和跨平台的Eclipse。
現在,在這個過程中,我們是不會擔心的IDE。雖然IDE不是寫代碼必須的工具,但你最終很可能會想要的。然而,一旦我們開始寫代碼了,接下來需要了解如何將其轉化為機器代碼,以便它可以在電腦本身上運行。
四,編譯型語言和解釋型語言
因此,我們需要讓我們的源代碼轉換成機器碼,才可以運行,有這樣的兩個主要途徑:什么叫做編譯源代碼的,什么是所謂的解釋源代碼。現在,幸運的是,這不是一個很大的決定,你不用擔心。但它的差異是值得了解的。因此,讓我們有一個簡單的場景。比方說,
你和我。你有你的電腦,我有我的電腦,你會寫一個要我運行的程序。現在,用一個編譯語言,你寫完源代碼后會發生什么事?你有一個叫做編譯器的程序將通過該源代碼來創建一個包含機器代碼的單獨文件,你只要給我那個文件。這個最終的結果是有時被稱為一個可
文件,因為我可以直接執行它。我現在可以運行你的程序。你不需要給我源代碼,我從來沒有看到它。現在,用另一方面解釋型語言,你不用事先編譯源代碼。你只要給我一個副本我就可以運行了。所以,我需要我的機器來解釋它,來運行你的程序。現在,解釋器不同
於編譯器。我們可以把它看作是通過你的源代碼並一行一行當場處理它。它不會將其保存為一個單獨的機器代碼文件。現在,您已經使用解釋語言,即使你不知道它。每當你看着一個使用JavaScript的網頁,這是已經發生。JavaScript已發送到您在網上以及一堆其他文
件,如網頁和圖像,它已經作為源代碼發送到你的機器,你的網頁瀏覽器剛剛解釋了JavaScript,因此它可以運行該代碼。那么,哪一個是最好的?嗯,他們都有自己的好和他們的優缺點。編譯的代碼的好處。一旦它的編譯,這是馬上就可以運行,你可以將其發送給
100或1,000或100,000不同的人。這是蓄勢待發。它可以用於CPU進行優化,所以它實際上可以更快,你沒有給你的源代碼發送給大家,這可能是一件好事。然而,缺點是如果我在Windows PC上編譯它,該可執行文件將無法在Mac上工作。事實上,它往往需要單獨
編譯為不同類型的CPU,即使在同一個平台上,當你寫代碼是編譯型的,你必須在每一個的步驟測試你的程序。現在,有了解釋型的代碼,一個很大的好處是我真的不關心在另一端是什么樣的機器,因為我們不提供機器代碼。我們只是發送源代碼,我們讓對方照顧它。
因此它可以是更輕便,在各種平台上也更加靈活。這也是一個比較容易測試,因為你只寫你的源代碼,然后運行它的時候,讓解釋器把它轉換。沒有在兩者之間編譯步驟。它出問題時更容易調試,因為你總是可以訪問所有的源代碼。然而,它有它的兩面性,因
為大家都需要他們的機器上有一個解釋器他們的機器上的語言。它會慢一些,因為你必須在每次程序運行時解釋它,而源代碼是公開的,因為你把它發送到需要運行該程序的人的機器上。現在,有關於編譯語言和解釋型語言的好東西,是兩者兼而有之的第三條道路。編
譯模型,所有的工作就完成了前期,運行快,但就是不靈活。解釋模型,所有的工作就完成了在接收端,很靈活,但可以稍微慢一點。所以像java這種語言就是同時有編譯和解釋性的特點,本地編譯,跨平台運行。因此,舉例來說,C,C + +和Objective-C,這些通
常是編譯語言,所以你需要一個編譯器。編譯器可以免費下載,但它們通常內置在集成開發環境中的應用。現在,像PHP和JavaScript,這樣是為解釋語言,以及如Java,C#,VB.NET和Python(Python是一個解釋型的語言。但是為了效率上的考慮,Python也提供
了編譯的方法。編譯之后是bytecode的形式)語言使用解釋型和編譯型的結合。現在,無論是語言是編譯或解釋,或介於兩者之間你都可以根據你自己具體的需求。
五,核心編程語法
我們不想成為的概念(conceptual),我們希望得到的方法,我們希望一個良好的語言能做到這一點。我們希望對初學者友好,但不只是一個初學者的語言。它需要的是真實的。它需要的是流行,它需要的是相關的。總之它需要的是很好的解釋這些概念的語言。現在有
很多的適合該法案的語言,但非常重要的並且我們也想要的是,盡可能操作簡單,不用裝太多東西因此,決定去用JavaScript。這不是最強大或最靈活的語言在,但它肯定受歡迎,它肯定是相關的,它是探索這些概念的一種偉大的語言。所以,即使你腦子里想一些其他
的語言,但你知道JavaScript是一種非常實用的語言就行。JavaScript是操作網頁的語言。有人發明了它。我們不會使用JavaScript來說桌面應用程序,我會用C++或Java或C#或Objective-C語言。盡管名稱Java和JavaScript類似,但他們是完全不同的語言,是不相
關的。現在,有可能你喜歡的ActionScript或AppleScript或VBScript。這些是腳本語言,腳本語言是被嵌入到另一個程序更有限的編程語言。因此,ActionScript中的例子是,我們使用內部Flash的編程語言。 VBScript中可使用在Microsoft Office應用程序,同樣的
JavaScript也只能在其他應用程序,就是Web瀏覽器。您的瀏覽器是否是Internet Explorer或Safari或Firefox或Chrome或Opera,他們都有一個JavaScript引擎,它們內部有JavaScript解釋器。一般腳本語言並不比這些通用編程語言更有限制,他們往往更容易拿來
用和他們非常善於做些他們領域的事情。因此,JavaScript的最像的腳本語言是一種解釋型語言。我們不必手動將其編譯成機器代碼。它會自動通過Web瀏覽器來完成,當我們試圖運行我們的JavaScript。操作系統上運行的Web瀏覽器並且Web瀏覽器中運行我們的
JavaScript。JavaScript的很重要的是區分大小寫的語言。當我們看到一些其他編程語言,大量的使用這些花括號,當我們看到語句似乎都以一個分號結束,和一些其他的事情,這種語言是由C語言編程的影響。自20世紀70年代初周圍許多最流行的語言和像C的形狀
。有些人甚至共享名稱為C++,C#,Objective-C語言,而有些則沒有。Java是一種C風格的語言,還有如ActionScript中,因JavaScript。並知道一個C語言風格可以更容易地跳進任何其他語言。因此,JavaScript是一種基於C語言的解釋型區分大小寫的語言。這
是高度相關的,它是對初學者很友好。因此,讓我們看看如何在JavaScript中創建我們的第一個程序。
六,創建JavaScript
新建一個container.html文件和script.js
container.html的內容如下:
<html> <head> <title>simple</title> </head> <body> <p>this is a very simle HTML</p> <script src="script.js"> </script> </body> </html>
script.js的內容如下
alert("Hello World");
然后雙擊container.html即可看到效果
七,變量和數據類型
當我們使用任何編程語言編寫哪怕是最簡單的程序,我們必須跟蹤信息。如果我們正在寫一個貸款計算器,我們需要保存貸款金額的,月數,利率。如果我們正在編寫一個游戲程序,我們可能需要知道當前的得分,玩家在屏幕上的位置,有多少生命值,我們要用我們的球
員是什么形象。這所有的數據,我們需要創建變量來保存數據。變量只是容器。我們的程序正在運行,正在使用計算機內存並抓住其中一小片,給它一個名稱使用。我們抓住這個空間,我們命名它,然后我們把一個值放在里面,像一個電子郵件地址或一個日期或位置或數
字,然后根據我們需要,我們可以改變這個值。變量可以變化,因此而得名。所以在JavaScript中創建這樣的一個變量。變量名都是小寫,這是JavaScript語言的一部分,然后我們將其命名變量。變量的名稱是由我們和它應該代表我們要保持一段數據。因此,一個叫
year變量,或者一個叫customerEmail,或todaysDate,或如foo或如x甚至一個單一的字母這樣無意義詞匯。現在,你的變量名稱由字母,數字,美元符號和下划線組成。其他字符不允許,但你不能以數字開頭。因此,例如,這個33dom變量名是行不通的,但
dom33就可以。當我們以后談論命名變量的風格時,我們將更多地討論。但我現在只是要使用簡單的名字。var year=2011; var 表示聲明變量 year表示變量名 =表示賦值 2011是給year變量賦值。變量名和變量的值注意分清楚。現在,在JavaScript中,一旦你
創建了一個變量,你可以在里面放任何東西。數字,文字,日期,那聽起來並不尋常,但很多其他語言不會讓你做到這一點。在許多語言中創建一個變量並不僅僅意味着定義一個容器,還會給他定義變量類型,雖然目前在JavaScript中不需要,但其他有些語言需要,而
且等你用時就知道了。
八,強類型和弱類型
在許多編程語言中,當你創建一個變量,你不只是給它一個名字,你還要確定它的類型信息。你必須事先決定,如果它要存儲一個整數,這意味着它只能存整數,而不能存小數點,或者單個字符,或者多個字符(叫做字符串),或者是一個布爾值,表示真或假,也可能
是更加復雜的數據類型,但你必須選擇該數據類型。一旦你選擇了它,你不能改變它,這就是所謂的強類型語言。每個變量必須是一個特定的類型。但在JavaScript中,我們不這樣做。JavaScript是所謂的弱類型語言。我們不需要定義數據類型,我們只需要創建一個通
用的變量,一個空的容器,然后我們可以簡單地把任何值賦予它。現在,如果我創建這個變量沒有給它一個值,它開始了作為什么JavaScript調用未定義的。現在你可能會想,嗯,這弱類型語言可能更方便點,你可以在任何地方放東西。大多數時候,當你在編程的時
候,你將不再需要或更改數據類型。如果你有一個,你已經被稱為score的變量,那么你會希望只存分數的數字類型,而不是存字符串或者是true或false。所以任何事情都有兩面性,沒有絕對的好,只有適不適合。
九,與數字工作
所以,任何時候,我們用變量處理的工作。我們有自己的變量,容器,桶,我們有,我們可能打算每時每刻的改變成不同的值。目前,最常見的計算機程序都是數值,號碼,其實這不奇怪的。當然,當我們使用電腦這個詞,我們也可以認為是一
個機器。但數百年來,電腦其實是一個工作。在17日,18日,19世紀,你就像一台電腦一樣被別人雇佣。它只是意味着一個像電腦一樣的人來做計算,誰做計算。那么這些機器做某些事情的時候遠比人做得更好。我們認為計算機是指硬件。但他們被發明的原因,就是
一直對數字運算。但是,我們必須坦然面對我們使用的數字。當我們在寫程序時,我們正在處理的銀行結余及貨幣,屏幕上飛船的位置,Web瀏覽器窗口的高度和寬度,使用地理定位設備的坐標,播放毫秒級MP3歌曲,連顏色紅,綠,藍都代表了數值范圍。
現在,與你遇到的其他編程語言不同,你必須非常清楚是什么是數據的類型,你有--整數,浮點數,正數,負數,一個很大的數字,它是一個小的數字 - - JavaScript的,有一個非常人性化的方式來表示數字。他們都只是考慮數字。因此,讓我們來看
看如何與他們合作。我這里有一個空文件設置為寫一些JavaScript,讓JavaScript創建一個變量,並調用它。當執行這行代碼時,這個變量的值是不確定的。因此,接下來,我將這個變量設置為5號。現在,你有一個嶄新的值,像a= 5,b =10。這看起來有點怪異,
就像在學校學的方程。但請記住,當你看到等號,這是一個指令。把它變量的值設為5。
我不在乎以前是什么,但執行這行代碼之后,它的值將為5。它分配一個值。這就是為什么“=”正式名稱為賦值運算符。現在,請注意周圍有一有有引號的數字5在這里被稱為數字文字。它代表了固定值5。這條線的可變部分作為我們的程序運行時可以改變,但文字卻沒
有。5總是意味着5。如果我們想改變嗎?如果我們希望有一個億?好吧,我只是說=1000000,我們不要它使用逗號。我們只使用數字本身。而在其他的編程語言,我們必須非常清楚,如果值是整數,寓意完整的數字,JavaScript並沒有在意。
如果我想打一個負數,把一個減號放在它的前面。比如,-500。下面讓我們來談談下一個字符串。