搜尋

搜尋結果

Lambda 表達式之可讀性
科技新知
MacauYeah・2023-11-24

Java作為一個真OOP物件導向的程式,在設計和編寫上是很嚴謹,什至是囉嗦的程度。近年很多Programmer因為各種原因,都放棄Java跳船去其他語言。 Javascript是其中一個很多人的選擇,因為Javascript有nodejs的加持,在Web世界下,可以同時走frontend、backend路線。而Javacript亦有一個很明顯的特性,就是大部份的library都以callback的型式出現。另外,Javascript也讓很多人覺得很簡潔,這除了是因為它沒有強型態的規限外,另一個原因也是因為有callback的大量使用。 Function Pointer 其實callback,籠統一點講就是在一個function A傳入另一個function pointer B。而編寫function A的作者,並初期並不知道function pointer B的實際操作會是什麼。A作者只是強調在特別定時候,它就會使用這個function pointer B。而這種把function pointer 傳來傳去的做法,就可以看成是Functional Programming的基礎。 Functional Programming除了把function pointer 當成是一等公民以外,還有很多附加要求,例如: Pure Function 它只會使用到自己的Local Variable本地變數,這樣它的作用域就鎖死在Function內部,就不會有副作用。 傳統的OOP,Class中不少變數會以Class Attribute型式存在,雖然它們可能是private attribute,但還是獨立於Function外,這樣各Function的操作,都要靠作者好好地記著Class Attribute的狀態。 Nested Functions 與普通程式語言類似,很多情況下都需要local variable,而Function Programming要足夠好用的話,就需要彈性地在function裏定義local function pointer。 Java Lambda 表達式 其實從Java 8開始,就有提供Lambda表達式,這是一個可以制作匿名function pointer的方法。所以硬要講,Java也可以做Functional Programming。 但必需要盡早強調的是,Java經常性地使用class attribute,它們很多時候都會引申請狀態的概念。即是在它們必需經過特定步驟後,class attribute才會有特定的意義。也就是Lambda表達式想保持Pure Function的特性,它可以使用的時期就有很大限制。 但我們還有必要使用Lambda嗎 以筆者的經驗來講,它還是有作用的,特別在於它可以改善Class Function的閱讀性。 例如下面一個Java Class。它是一個工廠,提供一個服務可以生產一堆車。那些車而需要經過特定檢測,才能推出。 public class Factory ex1 public static List generateListOfCarByForLoop List tempCars = new ArrayList; many other logic many other logic many other logic List passTestCars = new ArrayList; for Car car tempCars if car.getWheels.size == 4 many other check logics many other check logics many other check logics passTestCars.addcar; return passTestCars; 中間的for loop可以用lambda來改寫。 ex2 public static List generateListOfCarByLamda List cars = new ArrayList; many other logic many other logic many other logic cars = cars.stream.filtercar gt; if car.getWheels.size == 4 many other check logics many other check logics many other check logics return true; return false; .toList; return cars; 有人會說,上述ex2只是形式上改變了,沒有特別易讀。就像ex3這樣,把特定邏輯抽成獨立function,才是真正的易讀,對嗎 ex3 public static List generateListOfCarByForLoopFunction List tempCars = new ArrayList; many other logic many other logic many other logic List passTestCars = filterCarsByWheelsSizetempCars, 4; return passTestCars; private static List filterCarsByWheelsSizeList originalList, int targetSize List passTestCars = new ArrayList; for Car car originalList if car.getWheels.size == targetSize many other check logics many other check logics many other check logics passTestCars.addcar; return passTestCars; 上述ex3是一個有效的改進。如果大家不計較傳入參數的先後順序及交互影響的話,就已經很足夠。 但如果大家對於多參數的解讀又怎樣 private static List someotherfunctionList cars, List wheels 大家又會不會突然停住,想想到底是cars影響wheels,還是wheels影響cars 對於多參數的function來講,相互影響就會越來越多,但使用Lambda的話,可以針對性地表達這是一個Predicate Lambda。 ex4 public static List generateListOfCarByLamdaComposition List cars = new ArrayList; many other logic many other logic many other logic List wheels = new ArrayList4; cars = cars.stream.filter filterCarByWheelSizePredicatewheels .toList; return cars; private static Predicate filterCarByWheelSizePredicateList wheels return car gt; if car.getWheels.size == wheels.size many other check logics many other check logics many other check logics return true; return false; ; 就最後的ex4版本,可以很明確的知道是cars被Predicate所作用。 如果大家還有其他使用Lambda的明顯好處,也可以一起來Github分享大家的Code

Japanican 東京、長野超狂復興優惠券!最強勁減83%!
激安優惠
OHChance 旅遊誌・2020-01-14

下載 OHChance 手機 APP, 特價資訊直送你手!   Japanican(e路東瀛)推出東京及長野縣復興優惠券,訂酒店依不同人數,最高減20000日元! 東京都酒店(限入住日期為即日起至2月28日):.滿12,000日元減10,000日元(優惠碼碼:TOKYO10) 限2位成人一間房且入住一晚.滿18,000日元減15,000日元(優惠碼碼:TOKYO15) 限4位成人一間房且入住一晚.滿24,000日元減20,000日元(優惠碼:TOKYO20) 限4位成人一間房且入住一晚 長野縣酒店(限入住日期為即日起至2月28日):.滿12,000日元減6,000日元(優惠碼碼:NAGANO6) 限2位成人一間房且入住一晚.滿18,000日元減9,000日元(優惠碼碼:NAGANO9) 限3位成人一間房且入住一晚.滿20,000日元減10,000日元(優惠碼碼:NAGANO10) 限2位成人一間房且入住一晚.滿24,000日元減12,000日元(優惠碼碼:NAGANO12) 限4位成人一間房且入住一晚.滿30,000日元減15,000日元(優惠碼碼:NAGANO15) 限3位成人一間房且入住一晚.滿40,000日元減20,000日元(優惠碼碼:NAGANO20) 限2位成人一間房且入住一晚  優惠碼使用方法是在填個人資料的頁面,旁邊的折扣碼空格中輸入優惠碼即可。注意只能訂一晚,而且每個折扣碼數量有限,用完即止。  【促銷公司】Japanican【折扣代碼】請參閱內文【預訂時限】折扣碼用完即止【預訂方式】Japanican 網頁【預訂網址】httpsohchance.inforefjapanican   價錢 Sample ndash; 使用 TOKYO10 優惠碼 === 想搵平機票去玩,即上 OH!Chance!澳燦旅行資訊 httpsohchance.info 去日本旅行買咩 JR Pass好?即上 OH!Note!小燦的旅行筆記做功課 httpsohnote.info 唔知間航空公司好唔好坐?馬上 Subscribe OH Chance Youtube 睇睇佢:httpsyoutube.comcOHChanceTravel 睇埋 Facebook 專頁 httpsfb.comohchance 第一時間獲得最新旅遊資訊!

守夜人:長夜、返校、還願|一整個月都讓你有驚喜|Taiwan Speedrun Show
手機‧電玩
MacauYeah・2021-10-19

《Taiwan Speedrun Show》已經開始了半個月有多啦,這個表演平台,是不是很驚艷呢? 其實《Taiwan Speedrun Show》是一個以台灣Speedrun社團主辦的活動,並開放華語區的跑者參加。 本年10月共31天,每天晚上將進行各種遊戲項目的Speedrun,隨時都觀迎花生友們,進來一起觀看神奇的快速通關精彩操作。除了作為觀眾,無論任何項目,只要你覺得準備好了,都可以一起參加Speedrun,推廣給更多華語區的朋友,認識這個競技與表演融合的特別節目。 守夜人:長夜Vigil The Longest Night 10月19日今晚內容超級多,大神們先後為我們帶來三款遊戲Speedrun。打頭陣的是由「alqk0310」領跑的高難度橫向2D平台遊戲守夜人:長夜。可能大家對這個名字還不太熟悉,因為這是2020年才發售的台灣獨立遊戲,而且還在Steam上取得極度好評的口碑,遊玩的感覺就像是快速動作版惡魔城。 限時完整重播用手機無法自動播放的朋友,可以按這裏或手動跳到27m37s處 返校、還願 跟著就是大神「Iceoffreeze」為我們帶來兩款獨立遊戲,而且同為恐怖解謎的「返校」、「還願」的Speedrun。筆者還記得自己在「還願」當中,是多受驚嚇的體驗,有些場面可不是Speedrun的就夠跳掉 限時完整重播用手機無法自動播放的朋友,可以按這裏或手動跳到1h13m6s處 10月20日節目預告 明天晚上,將會由台主「ghosttree_nozomu」帶來「Rosenkreuzstilette 12」遊戲的Speedrun。 Twitch的Live重播是有時間限制的喔,不想錯過任何精彩表現和重播,如果不想,記得按Twitch的遊戲追隨喔。成功追隨後,就可以看到更多沒有時限的精華剪輯。 過去幾天發生了什麼?快看這裏

測試驅動開發 | 系統邊界Mock
科技新知
MacauYeah・2024-04-23

好一段日子之前,筆者就介紹了一些寫Test Case的大方向 。對於大部份情況來說,有分隔的開發環境,有整個配套,測試起來是順暢的,想做單元測試可以,做整合測試也可以。但如果沒有,我們其實也要想辦法寫Mock。 Mock這個概念,對於寫前端程式的朋友應該比較熟悉,因為前端開發者總不能等後端準備好之後,才開始慢慢設計。前端很早期就要模擬一些情況,做介面設計,做各種思考。而且這個Mock不是指在運行單元測試時,才使用的臨時修改隨機數據。而是針對開發時,自行模擬的後端或外部環境。不過因為前端介面涉及很多主觀設計,很多元素冇辦法做固定的自動測試,所以前端的測試通常要人幫測試。 而後端開發,邊界Mock這一概念也很有用。在外部環境不足的情況下,為自己系統的邊界部份自建一個Stub Dummy 等的模疑數據,是很有幫助的。不論我們對外部環境的掌控度有多少,我們走測試驅動開發(Test Driven Development),好好地定義這個外部環境的期待行為是很重要的。 例如,你有個功能,需要存入數據,但資料庫未準備好,也沒有所謂的In Memory資料庫可以用。這時,自己架空寫一個什麼都不做或回傳固定結果的函數作為中轉接口,然後在你的Test Case可以規劃你的想要結果。 也許你會說,這個函數就是存下資料,我不會需要它的回傳結果,但我們其實還是可以在Test case 中定義一些錯誤檢測,確保這個函數沒有Throw Exception 。再進一步想,我們主程式是否真的不負任何儲存失敗的責任?要定義其他回傳變數,方便寫Log讓追蹤?或者我們至少要知道成功後的Primary Key ?若然業務上真的不在乎儲存結果的有效性,我們不存入數據也是可以的? 所以歸根究底,我們還是在乎儲存的成功與否。還是有必要去驗證驗寫入是否成功。 上述例子,因為資料庫不存在,開發途中可能Test Case 有好長一段時間也通過不了,但至少當資料庫完備後,可以直接驗證,不用人手手工測試。 舉另外一個例子,我們要從某個地方,例如API或資料庫,讀取數據。我們也可以先寫中轉接口,並為它寫Test Case定義應有的行為。雖然明明就只是讀取,我們沒法控制太多。但在接口做好異常狀態處理,是很重要的。例如Handle exception、檢查某些重要業務值會不會是空、確保後續部份可以正常使用,這是因為我們不能被外部系統的失誤而導致自身系統癱瘓。 其實測試驅動,本質上就是強逼大家想多一點,好好定義預期的行為,不論內部條件怎樣變化,都有一自動的檢收標準。

【澳門優惠情報】吃貨們的福音!Visa卡簽賬著數優惠全公開,特選餐廳最低8
激安優惠
Cheers!・2020-09-24

在澳門出街食飯想食得抵,除了周圍比較格價之外,最簡單又快捷的方法當然是用 Visa 卡找數。由即日起至2020年12月31日,到指定特選餐廳食飯,除了有折扣優惠,還會提供 Visa 卡用戶獨有的禮遇,最低餐飲優惠更享有8折。馬上為大家介紹去澳門邊間餐廳食飯碌 Visa 卡有著數優惠啦! 一廳咖啡 ONE amp; ONLY Cafe Kitchen 在澳門開業四年的「一廳咖啡」主打混合式新派主題扒房特色西餐廳。好味菜式款式多,而且食材來自世界各地,十分國際化。現在到「一廳咖啡」結賬時使用 Visa 卡,總單享有88折優惠。香港持卡人,則享有85折優惠。 優惠:使用有效 Visa 卡簽賬,享總單88折優惠。香港持卡人,使用有效 Visa 卡簽賬,總單享有85折優惠。 地址:澳門黑沙環中街海天居地下UV舖 營業時間:週一至週日 上午 8 時至午夜 12 時 電話:853 6613 3399 瘋堂新派料理 Fantasia Kitchen 充滿歐陸建築特色的西餐廳「瘋堂新派料理」位於澳門著名景點大三巴牌坊和婆仔屋之間的小巷內。以義大利食物為基礎,並在菜式內加入世界不同風格及口味,配合紅酒、白酒及手工啤等,這就是所謂的「美酒佳餚」。如果入座時出示有效的 Visa 卡,更可獲贈餐前小食一份,此優惠只得 Visa 卡持有者所有。 優惠:使用有效 Visa 卡簽賬,每桌獲贈餐前小食一份。 地址:澳門美珊枝街6A地下 營業時間:週二至週日 中午 12 時至晚上 11 時,週一休息 電話:853 2835 8835 婆仔屋 ALBERGUE 1601 位於澳門婆仔屋內的「ALBERGUE 1601」,環境不但充滿葡萄牙建築風格,而且也是不少喜歡食傳統葡萄牙菜式的人士必到之處。現在消費滿澳門幣800元,就可以獲贈主菜一份,好味又抵食。 優惠:使用有效 Visa 卡簽賬,消費滿800澳門元(不含10%服務費),每桌可獲贈主菜一份。 地址:澳門瘋堂斜巷8號 營業時間:週一至週日 中午 12 時至下午 3 時,晚上 6 時至 10 時 30 分 電話:853 2836 1601 英皇娛樂酒店 皇廷閣 Grand Emperor Court 來到位於澳門南灣區的「皇廷閣」,除了有以珍貴海味及海鮮為主的廣東菜式之外,更備有各種上等香茗。顧客到店後出示有效 Visa 卡並簽賬,就可以獲得9折優惠,還會贈送開胃菜,記得在預約 rdquo;任何特殊要求rdquo; 欄內,提及 ldquo;Visa Offerrdquo; 呀! 優惠:使用有效 Visa 卡簽賬,午餐單點或晚餐單點(贈送開胃菜)享9折優惠。 地址:澳門商業大馬路288號英皇娛樂酒店9樓 營業時間: 週一至週六 上午 11 時至下午 3 時,晚上 6 時至 11 時; 週日及公眾假日 上午 10 時至下午 3 時,晚上 6 時至 11 時 電話:853 2838 3322 英皇娛樂酒店 貴族炉端燒 Royal Robatayaki 同樣是位於英皇娛樂酒店內的「貴族炉端燒」,最擅長為食客帶來新穎日式燒烤美食。看著大廚以熟練技巧即場炮製日本地道料理,大飽眼福之餘,更加提升對食的慾望。想享受放題九折優惠,就記得碌有效的 Visa 卡,一星期七日都有優惠呀! 優惠:使用有效 Visa 卡簽賬,享週一至週五和風午餐定食及週末節假日午餐放題9折優惠;每日晚餐放題享9折優惠並贈送開胃菜。 地址:澳門商業大馬路288號英皇娛樂酒店大廳 營業時間:週一至週日 中午 12 時至下午 2 時 30 分,晚上 6 時至 11 時 電話:853 2888 9918 英皇娛樂酒店 御廚 Royal Kitchen 想食自助餐的朋友,機會來啦!英皇娛樂酒店「御廚」集合了中西式美食,以及多款健康小吃及甜品,令人滋味無窮。現在用 Visa 卡付款,不但有九折優惠,而且還送您飲品。 優惠:使用有效 Visa 卡簽賬,自助午餐及自助晚餐(贈送飲品)享9折優惠。 地址:澳門商業大馬路288號英皇娛樂酒店9樓 營業時間:週一至週日 早上 7 時至 10 時 30 分,中午 12 時至下午 2 時 30 分,晚上 6 時至 10 時 電話:853 2838 9988 有間咖啡廳 La Caffetteria 想一邊嘆美食,一邊欣賞澳門南灣湖畔的湖景?「有間咖啡廳」一定是心水之選。現在使用 Visa 卡簽賬,即時給您9折優惠。 優惠:使用有效 Visa 卡簽賬,享消費總單9折優惠。 地址:澳門商業大馬路89L及K南灣半島地下K及L舖 營業時間:週一至週日 上午 11 時至晚上 11 時 電話:853 2871 8694 西洋菜餐館 Seek Your Choice Bistro 在澳門開業至今已經有8年的「西洋菜餐館」,運用西式烹調技巧,把澳門本地傳統及獨有的食材及風味呈現出來。如果出示有效 Visa 卡並用來結賬,即刻送您一份「西洋菜餐館」精選甜品。 優惠:使用有效 Visa 卡簽賬,每桌獲贈精選甜品一份。 地址:澳門南灣湖景大馬路雅文湖畔S8舖 營業時間:週一至週日 中午 12 時至晚上 10 時 30 分 電話:853 2871 4150 品咖啡 Blooom 鍾意嘆咖啡的朋友,不妨來到「品咖啡」,品嚐最新鮮烘焙出來的咖啡。現在用 Visa 卡購物滿澳門幣200元,就送您單品咖啡掛耳包一份。 優惠:使用有效 Visa 卡簽賬,消費滿任何咖啡產品(飲品/咖啡豆/咖啡掛耳包)滿澳門幣200元,即可獲贈單品咖啡掛耳包一份。 地址:澳門中區雀仔園柯高街5號 營業時間: 週一至週五 上午 8 時 30 分至晚上 7 時 30 分 週六日 上午 11 時至晚上 7 時 電話:853 6665 0584 地址:澳門國際機場第10000028號商鋪(離境禁區1號登機閘口) 營業時間:週一至週日 約上午 6 時 30 分至凌晨 2 時 電話:853 6252 7360 Goa Nights 在氹仔舊城區、由印度人開設的「Goa Nights」是不少白領人士放工後,和朋友摸酒杯底的好地方。由印度人手上調配出來的創意雞尾酒,配合印度菜式口味,每晚盡情享受 Happy Hour!享受完 Happy Hour,一於碌 Visa 卡,就可獲85折優惠。 優惠:使用有效 Visa 卡簽賬,享總單85折優惠。 地址:澳門氹仔告利雅施利華街118號 營業時間:週一至週日 中午 12 時至下午 3 時,晚上 6 時凌晨 1 時 電話:853 2856 7819 澳門十六浦索菲特酒店 雅聚廊大堂吧 Rendez Vous Lobby Bar 走法國風為主的「雅聚廊大堂吧」無論格局或食物都別樹一格。早餐、下午茶及黃昏時段均會推出特式悠閑輕食,再來嚐一口由調酒師調配出來的獨特雞尾酒,甚麼煩惱都可以拋諸腦後。結賬時 Visa 卡,更帶給您所有餐點及飲品消費85折優惠。 優惠:使用有效 Visa 卡簽賬,享所有餐點及飲品消費85折優惠。 地址:澳門十六浦索菲特酒店1樓 營業時間:週一至週日 中午 12 時至凌晨 2 時 電話:853 8861 7213 澳門十六浦索菲特酒店 派意舫 Priveacute; 同樣是走法式路線的「派意舫」主要以法式烹飪為主,每個季節都會帶來不同驚喜體驗,最適合小型私人晚宴。用 Visa 卡付有關 rdquo;派意舫海鮮之旅rdquo; 菜單費用,即可享85折優惠,好抵食。 優惠:使用有效 Visa 卡簽賬,享 ldquo;派意舫海鮮之旅rdquo; 共享菜單85折優惠。 地址:澳門十六浦索菲特酒店6樓 營業時間:週二至週六 晚上 6 時至晚上 10 時,週日及週一休息 電話:853 8861 7213 澳門十六浦索菲特酒店 海風餐廳 Mistral Restaurant 以環球海鮮自助餐而聞名的「海風餐廳」,除了可容納高達 188 人之外,客人還可以選擇到池畔古雅露天平台。一邊欣賞澳門內港風貌,一邊品嚐美食,用 Visa 簽賬更可獲所有餐點及飲品消費8折優惠。 優惠:使用有效 Visa 卡簽賬,享所有餐點及飲品消費8折優惠。 地址:澳門十六浦索菲特酒店6樓 營業時間: 早餐:週一至週五 上午 7 時至上午 10 時 30 分,週六日 上午 7 時至 11 時 午餐:週一至週日 中午 12 時至下午 2 時 30 分 晚餐:週一至週日 晚上 6 時至晚上 9 時 30 分 電話:853 8861 7210 澳門十六浦索菲特酒店 樂軒華粵菜餐廳 Le Chinois Cantonese Restaurant 邊食粵菜,邊欣賞澳門全景那個地方可以做得到?答案是「樂軒華粵菜餐廳」。餐廳內可容納 148 人,而且菜式均是以正宗粵菜,再配以法式來演繹,為客人帶來嶄新飲食體驗。同樣用 Visa 結賬,可獲得最低8折餐點優惠。 優惠:使用有效 Visa 卡簽賬,所有餐點消費8折優惠。 地址:澳門十六浦索菲特酒店18樓 營業時間:週一至週日 上午 9 時至下午 3 時,晚上 6 時至晚上 10 時 30 分 電話:853 8861 1001

Switch / Steam Deck / Mobile 使用體驗大比拼 (三)
手機‧電玩
MacauYeah・2023-12-14

上兩期,筆者從機身重量、續航性兩方面,對於遊戲機身便攜性的影響,今期最後一期,就從穩定性方面去討論,最後再做一個綜合影響。 沒有對比也就沒有傷害 Mobile Smart Phone 筆者所講的穩定性,其實就是正常運行一個遊戲,不會出現閃退的情況,讓你可以正正常常玩完一款遊戲。但因為Mobile原本是多用途機器,你玩著玩著,可以就要跳出遊戲回覆信息,但再次回到遊戲後,能不能正常運行的不知道。 大部份iOS遊戲,因為舊iphone機能限制,基本上跳出去後,都因為不夠RAM,回來後遊戲會重置。除非你打死不切換,否則一款遊戲沒有頻繁auto save功能,根本玩不下去。Android可能會好一點,有不同機型可以選擇,多一點RAM總是安全一點。 強行地用Linux運行Windows的黑科技 Steam Deck 老實說,Windows已經不夠穩定,用Linux運行Windows Game,會比較穩定嗎?不過最幸運的是,Steam Deck有技術支援,更有社群支援,各遊戲經過Steam官方驗證,連續遊玩下閃退情況都很少。不穩定的原因,反而是Steam Deck主機本身。 在筆者遊玩的經驗中,待機後再打開,有一定機會率會整個遊戲閃退。這些問題在遊玩大作,特別是3A大作,會引來一個很不愉快的體驗。因為它們的auto save位置點一般都是以情節點來做考量,而以上班族來講,三步一待機的使用情境也很常見,那麼觸發閃退的機會率就很高。某次啟動會隨機引起閃退遊戲,真的欲哭無淚。 筆者也翻查過網上的資料,一年多前就有這個問題存在,而官方亦無法根治。筆者在寫稿的途中,還在測試坊間一些可能的補救方式,但因為時間不長,不敢說這問題是可以解決的。 穩定發揮 Switch Switch在穩定性真的無可挑剔,多次待機後都沒有太多問題。完全貼合它的市場定位在家可以隨時在電視玩,出外也可以四處走。隨時隨地停,隨時隨地再開。最多最多都是遊玩實體卡帶時,因為接觸不良而閃退。但這些不可避免的,因為實體卡始終是物理型態存在,跟著Switch四處奔波,難免會出問題。但下載數位版,存放於SD卡就不會有閃退。至少SD卡不會像實體卡會經常替換,所以出問題的機會也較少。 綜合體驗 其實討論了幾個方面,筆者都從是省心遊玩的角度出發去討論。 Mobile在裝備上會最少煩惱,想最輕鬆出問,這個是不二選擇,但考慮玩非課金類遊戲就最沒有保障。 Steam Deck優點是移動堡壘,若你玩的是高性能需求的遊戲,你只能選它。但想隨時玩就未必做得到。 Switch 在重量和穩定性上面最有優勢,考量延續性體驗,這個是首選。