天天看點

02 程式設計需要的基礎概念說明

文章目錄

    • 程式、算法和資料
    • 資料類型
    • 變量、變量名和值
      • 變量和變量名
      • 指派
    • 編譯期與運作期
    • 強類型與弱類型
    • 進制與進制轉換
    • 編碼

主要是名詞解釋和一些基本的概念說明,包含:

  1. 算法和資料
  2. 資料為什麼要有類型
  3. 變量、變量名和值
  4. 編譯期、運作期
  5. 強類型和弱類型
  6. 進制、進制轉換
  7. 編碼

程式、算法和資料

程式是為了解決人類的各種問題而被設計出來的,這些問題可以是通信、視訊、計算、也可以是聽歌、玩遊戲或者修改一張照片等等。

程式開發就是使用程式設計語言,通過邏輯的設計編寫出能夠解決需求的軟體的過程。

圖靈獎的獲得者:Pascal之父——Nicklaus Wirth 提出了一個著名公式:

程式 = 算法 + 資料

問題來了,什麼是算法,什麼是資料 ?

下面以蛋炒飯為例,在下廚房APP上先找一個蛋炒飯的菜單:

這裡應該有菜單的圖檔,但是現在圖檔無法上傳,引用一個網址 https://home.meishichina.com/recipe-10897.html,之後檔案可以上傳再修改回來。

可以看到需要的東西很多,比如雞蛋、米飯、鹽、油、鍋、鏟子、碗… 這些就是資料。

菜單對于怎麼做有詳細的介紹:

  1. 做什麼什麼
  2. 做什麼什麼

做蛋炒飯的步驟就是算法。

生活中,我們幾乎随時都是在解決各種不同的問題,比如中午吃什麼,到哪兒吃,怎麼過去,都需要我們進行各種比較。如果把這些内容以代碼的方式呈現出來,那就是根據已經知道的資料和解決思路,設計程式的執行過程。

資料類型

看字面意思也能猜到「資料類型」就是把資料按照不同的類型劃分了。問題是為什麼要這麼做,和程式設計有什麼關系呢 ?

還是以蛋炒飯為例(本喵喜歡吃),在食譜中可以看到,食譜中将所需的所有東西進行了分類,比如

  1. 食材
  2. 廚具
  3. 餐具

為啥這麼分類 ?當然是為了友善記憶,友善使用麼,其實就是打标簽。人腦的原則就是怎麼簡單省事消耗小就怎麼來,是以貼标簽就稱為了人類認知事物的本能,比如 90後、斜杠青年、果粉、有車一族等等。

程式設計中也會有各種各樣的資料,為了能夠友善的操作資料,程式設計語言會規定可以使用的資料類型。

常見的資料類型

對于程式設計,資料類型不可能會脫離人類日常了解的範疇,是以常見的是:

  1. 數字(主要是整形和浮點型)
  2. 字元
  3. 字元串(多個字元組合起來就是字元串,把字元串起來,很生動。翻譯的人真是天才)
  4. 布爾(真或者假)

變量、變量名和值

變量、變量名和值是程式設計無法繞過去的概念。

值就是資料,我們使用任何軟體,其本質都是在操作資料。比如用微信給你喜歡的人發送一條消息,這條消息就是資料。

變量和變量名

假設你家裡有很多鞋子,比如100雙,四季各有25雙。鞋子不用的時候就放到了鞋盒裡面,等換季的時候再拿出來穿。此時出現了一個問題,你記不清哪個鞋盒裡面放了什麼鞋子,隻好一個一個鞋盒打開找你想要穿的那雙鞋。

為了友善查找,細心的人會在鞋盒上面寫上鞋子的名稱,或者幹脆拍個照片貼上去,這樣查找起來不就友善多了麼。

生活 程式設計 作用
鞋盒 變量 知道需要操作的值(生活案例就是知道哪個鞋盒中有你要穿的鞋子)
鞋盒上的标簽/照片 變量名 通過變量名才能定位變量
鞋子 變量也好,變量名也好,最終都是幫我們找到要用的東西(鞋子或者資料)

指派

程式設計的最終目的還是要通過代碼來操作資料,按照上面的說明進行聯系,程式設計語言就需要有一種方式能夠将變量和值關聯起來,這種方式我們成為指派,很多語言都是使用等号來表示這種操作。比如下面JS的代碼:

var name = '張三';
           

編譯期與運作期

程式設計語言分類的時候有很多方式,其中一種分類就是編譯期程式設計語言與運作期程式設計語言。2者的差別非常簡單,現在你寫了一篇非常棒的文章,需要翻譯為英語。有兩種方案:

方案一:找一個翻譯品質高的翻譯人員,一次翻譯完成。之後哪兒要用就把翻譯的版本拿去用即可。

方案二:找一個即時翻譯人員,以後哪兒要用方案,翻譯人員就開始同步翻譯。

兩種方案各有優缺點,方案一的效率高,翻譯一次以後就不用再次翻譯,缺點是如果内容發生變化,還需要重新翻譯一次。方案二優點在于靈活,畢竟是随時翻譯麼,缺點也非常明顯,就是效率問題。

有的程式設計語言會結合2種方案,在不同時期内使用不同的解決方案。

強類型與弱類型

強類型和弱類型也是可以用于判斷程式設計語言的方式,差別就是建立變量的時候,要不要直接确定變量的類型。看下面的代碼

這種在建立變量時就需要指定變量類型的語言就是強類型程式設計語言,String就是變量 message的類型

String message = "你好,世界";
           

JS 則是變量聲明時不需要說明變量類型,程式運作時用到了再确認類型的弱類型程式設計語言。var 隻是說明 message是一個變量,但沒有說明類型

var message = '你好,世界';
           

進制與進制轉換

不管是什麼程式設計語言寫出來的程式,最終都需要翻譯為 0 和1 這種二進制供計算機執行,因為計算機隻認二進制。問題對于人類,十進制才是熟悉高效的計算方式,那麼用十進制寫出來的程式代碼讓計算機執行的時候,就需要轉為二進制。這個過程就是進制轉換。

其實計算機常用的進制有:

  1. 二進制
  2. 八進制
  3. 十進制
  4. 十六進制

編碼

計算機自美國人發明之後,最基本的就是進行文字的輸入與輸出。但是計算機隻認0和1,是二進制,想要正确儲存或者讀取英語就需要将内容進行轉換,這個過程稱為編碼。

計算機存儲的最小機關是位元組,而一個位元組是八位,一共可以組合出256(2的8次方)種不同的狀态。從 0 開始到 255 結束。因為現代計算機是在美國誕生的,美國人根據英語在計算機上進行編碼,占用了0127位,128255便空着。這個方案叫做 :American Standard Code for Information Interchange,美國資訊互換标準代碼。

當計算機在全世界使用的時候,各個國家都需要顯示自己國家的文字,就從128位之後開始增加自己語言的編碼,這被稱”擴充字元集”。但是原有的編号方法,已經再也放不下更多的編碼對于中國來說,常用漢字6000多個,于是将127之後的編碼重新編寫。前127位元組和原來的意義相同,後面的位元組用于顯示漢字、數學符号、羅馬希臘的字母、日文的假名。這套編碼稱為 GB2312

但是 中國的漢字實在是太多了,GB2312無法滿足需要,于是GBK 就誕生了GBK 在GB2312的基礎上,同時又增加了近20000個新的漢字(包括繁體字)和符号。随着中國的經濟發展,少數民族也開始使用電腦了,于是我們在GBK 的基礎上,又增加了幾千個新的少數民族的字,這就是 GB18030 編碼到此為止,一個漢字在程式中需要占用2個位元組!

每個國家都像中國這樣搞了一套自己國家的編碼标準,但是互相都不相容。如果日本的電腦想正确顯示中文就需要安裝一個「漢字系統」。如果将一段中文用GB18030編碼寫入電腦,用日文的編碼讀取,因為找不到對應的編碼排列組合,就會出現奇怪的字元,但是誰都看不懂~~ , 這就是「亂碼」。

為了能夠讓全世界的計算機都能互相正常處理其他國家的文字。一個國際組織站了出來,這就是 ISO (國際标誰化組織)ISO采用的方法很簡單:廢了所有的地區性編碼方案,重新搞一個包括了地球上所有文化、所有字母和符号的編碼!他們打算叫它”Universal Multiple-Octet Coded Character Set”,簡稱 UCS, 俗稱 “UNICODE”

UNICODE 開始制訂時,計算機的存儲器容量極大地發展了,空間再也不成為問題了。ISO 就直接規定必須用兩個位元組,也就是16位來統一表示所有的字元,這種大氣的方案在儲存英文文本時會多浪費一倍的空間,英文隻用到8位。UNICODE 是用兩個位元組來表示為一個字元,他總共可以組合出65535不同的字元,這大概已經可以覆寫世界上所有文化的符号。

伴随 UNICODE 來到時,一起到來的還有計算機網絡的興起,UNICODE 如何在網絡上傳輸也是一個必須考慮的問題,于是面向傳輸的衆多 UTF(UCS Transfer Format)标準出現了UTF8 就是每次個位傳輸資料,而 就是每次個位,隻不過為了傳輸時的可靠性,從到 時并不是直接的對應,而是要過一些算法和規則來轉換。

總結:

國内常用的編碼:

  • ASCII
  • GB2312
  • GBK
  • GB18030
  • UTF8
  • UTF16

亂碼:資料儲存與讀取使用了不同的編碼,而無法正确識别。

上一章 01 學習前注意事項和學習方式

下一章 03 Java基礎階段學習說明