iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 1
1
Software Development

高二生_學c#一個月之痛苦,悲哀,感動回憶錄(從基礎控制判斷 goto 物件導向(內含大量圖解))系列 第 1

為什麼是C#

為何我選擇C#


大家好!

  我是一個高中生,九月時算是正式高二了,在這暑假兩個月的時間接觸了部分語言,從資處科的製作網頁導致接觸javascrip看了一些教學影片可卻沒能體會如何運用變成重複的使用addEventListenerfunction封裝更改css的程序,暑假的一開始在某中壢大學接觸了C/C++ (沒有物件導向) 很平凡的If...else Switch for while do...while以及函式(function/或稱子程式)以及部分資料型態與指針大約三天的課程外加2天的VBA,這主要是因應APCS的考試 (筆者還沒考過不知道如何呢) ,八月多找了三個朋友去Python營隊兩天,實際上還是跟某中壢大學一樣我們都還是在用 ((那幾個)) ,資處科二年級要學程式語言,這個語言名稱VB,傳說中被譽為最適合新手的語言但是從語法結構上分析會發現這是比較偏向英文比較強的人 (筆者英文不好QQ ) 我們來嘗試比較VBC# 代碼

  • VB
Module Module1
   Class program

       Sub Main()
           Dim logic As New Logic
           logic.Name = "DE"
           Debug.WriteLine(logic.Name)
       End Sub
   End Class
   Class Logic
       Private _name As String
       Public Property Name() As String
           Get
               Return _name
           End Get
           Set(ByVal value As String)
               If value = "" Then
                   _name = "沒名子的死小孩"
               Else
                   _name = value
               End If
           End Set
       End Property
   End Class
End Module
namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {
            Logic logic = new Logic();
            logic.Name = "DE";
            Console.WriteLine(logic.Name);
        }
    }
    class Logic
    {
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                if (value == "")
                {
                    _name = "沒名子的死小孩";
                }
                else
                {
                    _name = value;
                }
            }
        }
    }
}

前者正是教育部所規定的高職使用語言(或許是政策更新慢OR不重視才會這樣)

  相比之下我覺得c#更加簡潔有力且讓英文恐懼症的人能更加舒緩許多,且unity是採用C#的遊戲開發引擎,C#也適合當作遊戲設計師的語言選擇
  python也算是英文挺多的語言甚至有時候還會感覺黏在一起因為沒有所謂的 {}
  C++ 的class宣告等等都比較麻煩總結來說C#相比比較好入門
  大約8月開始我看了小山的c#教學以及鐵錳的c#語言入門詳解長達一個月的時間
這次的鐵人賽就當作一個紀錄筆記也不錯或是給那些0基礎的人當作學習的參考


在一開始我們必須初步了解 五個衡量程序好壞的點

  • 時間複雜度 Time complexity

  如果要認真說這個必然會說很久等待我們遇到迴圈以及疊代時候我們會稍微說明一下計算,各位只要記住我們並不需要算出真正的時間需要花多少,而是在我們運行這個程序時帶入的變數會被運行幾次即可,我們應該盡可能的壓低所要時間,他的單位叫做BIG O是種漸進時間複雜度。

  • 空間複雜度 Space Complexity

  空間複雜度與時間複雜度往往是相對的(一邊高另一邊則低),在講解變數以及陣列時候會給予計算說明,其定義為過程產生了幾個變數,當變數越多我們記憶體吃的量也越多。

  • 正確性 correctness

  正確性是指我們程序的三步驟 輸入-處理-輸出 的輸出是不是正確。

  • 可讀性 readability

  可讀性非常非常的關鍵,在我們學習語言一人開發時候我們往往會使用獨創語言如DD,CC,ABD,VS這類語言或是我們把私人字段,公開資段都用小寫或全部大寫等等這些不符合命名原則的事情,如果發生在一個一個團隊裡面會導致所有人都讀不懂整個團隊運行效率變成低的難以言語,所以說呢可讀性正是他人對於我們寫CODE能理解的程度

  • 健壯性 Robustness

    健壯性常常是指我們在進行輸入 或 處理時產生錯誤時程序會產生什麼反應,像是我們如果是遊戲開發商我們應該避免遊戲玩家ID重複,或是我們運算中把字串轉換成數字如果不行我們應該如何處理,我們應該保障這些錯誤能有完善的解決方法。
除了上面這些比較點還有很多種我們並沒有詳細的介紹

在程式語言當中還有必須知道的核心記憶體三個部分

  1. 堆疊 stack

    • 堆疊用來儲存區域變數(不包含new)
    • 或是在程序執行時候不需要透過具現化(new)的字段或方法參數
    • 各位可以發現實際上這些東西值是變動的可是類型沒有變過所以系統在編譯時候配置是固定的
    • 基本上都是實值型別(後續會詳細介紹)
  2. 堆積 heap

    • 堆積是指那些參考型別需要new出來的物件,字段,方法參數的
    • 值這點很重要因為他不儲存位置,這時候會利用堆疊進行位置紀錄在哪個堆積
  3. 全域 global

    • 全域顧名思義整個區域
    • 是放那些帶有static的方法,類,字段或是全域變數
    • 特色就是要等程序結束時候才會被釋放掉記憶體空間
後面我們也會敘述到

也差不多該進入重點如何編寫C#呢

  • 首先你必須擁有IDE

  這邊說的IDE絕對絕對並不是指硬體接口那個IDE喔XD!!!!
  而是指編輯程序與匯出程序的整合開發環境(Integrated Development Environment),在這套軟體的幫助下我們很便利的撰寫C#,常見的IDE有

  1. Visual Studio Code
    • 免費
    • 寫多種語言時挺好用的
  2. Visual Studio 2019
    • 功能多
    • 分三個版本(半免費制度)
    • 我們未來也是採用這套軟體來編輯

Visual Studio 2019 下載點
檔案開起來必須下載
https://ithelp.ithome.com.tw/upload/images/20190829/20120118SA8FzebTe1.jpg
以及最下面的
https://ithelp.ithome.com.tw/upload/images/20190829/20120118I1Z0YEvxhM.jpg
這樣就可以進行C#的程序開發
在軟體開啟時會呈現這樣
https://ithelp.ithome.com.tw/upload/images/20190829/201201188xg20bMTtc.jpg
選擇建立新的專案
找到控制台專案兩個都可以推薦選下面的
https://ithelp.ithome.com.tw/upload/images/20190829/20120118AJmdf49fha.jpg
點擊下一步應該會呈現這樣
https://ithelp.ithome.com.tw/upload/images/20190829/20120118aQXzh6vJDw.jpg
專案名稱與解決方案名稱先不要理會沒關係可以先把兩者命名統一化
架構則是其框架和語言版本建議選最新
位置則是這個專案的位置(記住專案本身就是一個資料夾,所以不用怕檔案膨脹的問題)
建立好應該會長這樣
https://ithelp.ithome.com.tw/upload/images/20190829/201201180OLsBjyPtm.jpg
以後如果要編輯的話就點ConsoleApp1(這是專案資料夾)裡面的ConsoleApp1.sln即可編輯

請大家嘗試寫出

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("你好C#");
            Console.ReadLine();
        }
    }
}

並點擊Visual Studio 2019上方的DEBUG右邊綠色開始按鈕


我們接者要說其構造

  1. (
    • 這代表方法所帶入的參數開始
    • 不一定要有值
    • 只要是方法就必須要擁有(
    • 有和其對應)代表結束
  2. )
    • 這代表方法的結束
    • 與上面為對應
  3. {
    • 這代表體開始
    • 其目標為方法(Method)則稱為方法體(Method)開始,若為類(Class)則稱為類(Class)體開始,依此類推
    • 並非每個都是這樣開始,因為有這種開始必然會有]這個作為結束,像是字段(欄位)就並沒有
  4. }
    • 這代表結束
    • 與上面為對應
  5. ;
    • 這也是結束
    • 像是字段(欄位)便是這種結束方式

接者我們來用圖片說明一下上方代碼的構造
https://ithelp.ithome.com.tw/upload/images/20190829/20120118Iq1l2krGG5.jpg

各位必須記住static void Main()這個方法!!

  在編成命名中我們要盡量避免使用Main這個詞(這並不是說不能寫Main_killr),因為static void Main()代表的程序進入點也就是程序會根據裡面內容進行運作,而當擁有兩個static void Main()方法編譯器便不能編譯因為這代表有一個以上的進入點是不正常的而()裡面的string[] args 則是當程序開始時會帶入的數組正常來說並不會使用且可以直接刪掉但()這兩個並不能刪掉!!


下期預告

輸入 輸出 聲明變數 資料型態


下一篇
資料類型之你好多阿
系列文
高二生_學c#一個月之痛苦,悲哀,感動回憶錄(從基礎控制判斷 goto 物件導向(內含大量圖解))7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言