上一篇是
ChatGPT
針對以下問題:
我有一組資料: 1=滿福堡餐、2=豬肉滿福堡餐、3=豬肉滿福堡加蛋餐、4=無敵豬肉滿福堡加蛋餐、5=青蔬滿福堡餐。當使用者輸入1時,印出『您好,請問您點的是滿福堡餐嗎?』輸入2時,印出『您好,請問您點的是豬肉滿福堡餐嗎?』輸入3時,印出『您好,請問您點的是豬肉滿福堡加蛋餐嗎?』輸入4時,印出『您好,請問您點的是無敵豬肉滿福堡加蛋餐嗎?』輸入5時,印出『您好,請問您點的是青蔬滿福堡餐嗎?』
所給出的Java程式解決方案。
有興趣回顧的話,可以參考:前情提要
本篇分享下我自己對於相同問題給出的Java程式解決方案。我的程式碼包含兩個部分:一個是業務邏輯的處理程式,另一個則是資料面向的程式。
業務邏輯程式碼:
import java.util.Scanner;
public class MyDemo {
public static void main(String[] args) {
MyData data = new MyData();
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入您要點的餐點編號:");
int input = scanner.nextInt();
if (input > data.menu.size()-1 || input <=0)
System.out.println(data.menu.get(0) + "1~" + (data.menu.size()-1) + "。");
else
System.out.println("您好,請問您點的是" + data.menu.get(input) + "嗎?");
}
}
資料程式碼:
import java.util.ArrayList;
public class MyData {
public ArrayList<String> menu;
MyData () {
menu = new ArrayList<String>();
menu.add("您的點餐號不存在,請重新輸入餐號");
menu.add("滿福堡餐");
menu.add("豬肉滿福堡餐");
menu.add("豬肉滿福堡加蛋餐");
menu.add("無敵豬肉滿福堡加蛋餐");
menu.add("青蔬滿福堡餐");
//menu.add("");
}
}
執行結果如下:
執行結果與ChatGPT
的執行結果大同小異,滿足題目給定的需求。
分析一下自己的設計理念與
ChatGPT
最大的差異在於這段描述:『我有一組資料: 1=滿福堡餐、2=豬肉滿福堡餐、3=豬肉滿福堡加蛋餐、4=無敵豬肉滿福堡加蛋餐、5=青蔬滿福堡餐』中,我是將餐點看成資料的一部分,而ChatGPT
則是將這段描述當成是業務邏輯的一部分。ChatGPT
將1=滿福堡餐、2=豬肉滿福堡餐...等資料放在switch
的結果,就是當main方法
結束後,這些資料就消失了。
反觀我的設計切出一個MyData
類別,這些資料未來則可以被其他要開發的功能給呼叫使用。最具體的影響就是當這些資料要被放進資料庫(例如:MySQL)而需要改寫重構時,直接針對MyData
這個類別進行重構即可。值得一提的是,MyData
類別中,刻意選用ArrayList
來儲存資料的原因,也是因為這是與資料庫互轉資料常用的類別。
更直觀的優點,當加入新資料時,我提供的解決方案只需要在MyData
的程式區段中,將註解的部分修改為
menu.add("鬆餅餐");
一切就修正完畢了。業務邏輯的部份完全不需要調整。
執行結果如下:
分析完可擴展性、可維護性的面向後,接著來看一下程式碼的精簡度。
ChatGPT
的BurgerOrder.java,未添加6=鬆餅餐時,就有29行了。
反觀我的程式碼,MyData.java還是包含6=鬆餅餐,兩段加起來也才14+13=27行。
ChatGPT
的評鑑報告:
程式精簡度 | 程式可擴充性 | 程式可維護性 | 是否勝任資深Java PG |
---|---|---|---|
X | X | X | 失格 |
不過AI強大的地方在於越多人餵它資料,日後給出的答案會更好。現在的
ChatGPT
無法勝任資深Java程式設計師只是在2023年3月我測試評鑑的當下無法,1年後甚至是10年後就難說了。