發表文章

目前顯示的是 4月 12, 2020的文章

一段全都是蛋的簡易Java故事化教學例範程式碼

圖片
插圖: Alfredobear 因為聽到某熊聊到,在線上程式課程中學到陣列 (Array),而且把它形容成「儲蛋格」(egg storage tray),覺得很有趣,因此瞬間就給了我一個靈感,來寫一小段Java物件與串流的教學範例程式。 類別 (class) 是絕大多數物件導向程式語言 (Object-Oriented Programming Languages) 的基本單元,在物件導向的理論中,class代表了我們所要描述/解決的問題體系中某一實體或概念的抽象結果。 換句話說,因為我們不能把真實的蛋放進數位世界裡(就算做得到也變成另外一回事了),因此針對我們要解決的問題,把蛋「抽象化」(通常是抽取我們要的數據、狀態或是特徵),再加上一些和蛋有關的行為或是處理工作,就成了所謂的class的基本內容,基本的框架是長這樣: class Egg { // data field, status, characteristics... // behaviors, processing tasks... } 那麼想到陣列,也就是儲蛋格(因為太囉唆以下改稱蛋架egg rack),就會想到創建一個集合型態 List ,裡面專門放蛋,像是這樣: List<Egg> eggRack; 從這裡故事就開始了,我開始導入了串流界面相關的功能了……(聽到這會眼神死的人且慢) 首先,空的蛋架很無聊,又沒有蛋可以吃,身為蛋食愛好者當然是無法接受,因此我們需要一個無限供應蛋的串流(輸送帶),源頭裝上一個專門供蛋的供應器 ( Supplier<Egg> )。但大部份時候無限供蛋也可以釀成災難,所以我們需要指定數量限制,例如一百顆就好(!),然後在末端裝上一個集蛋器,這樣就可以做為裝滿蛋的蛋架: eggRack = Stream. generate (Egg:: new ) // 無限供蛋器 . limit ( 100 ) // 限制數量以免釀災 . collect (Collectors. toList ()); // 集蛋器 這裡 Egg::new 其實就是 Supplier 格式: () -> new Egg() 的簡寫,稱做method reference,