增加網址:
文章備註、標題(會記錄下來,但是暫時不會顯示):
[綜合]無題 無名 ID:ZruFYwP6 2019/09/29(日) 17:25:36.711 No.16139383
評分:0, 年:0, 月:0, 週:0, 日:0, [+1 / -1] 最後更新:2019-09-29 05:55:10
附圖
寫註解好苦啊
組員的程式碼到底完成了沒有也不給我知道
明明死線是今天的說...
無題 無名 ID:xJotLTY2 2019/09/29(日) 17:27:06.455 No.16139393
回覆: >>16139402
>>16139383

開啟不寫註解運動
無題 無名 ID:ZruFYwP6 2019/09/29(日) 17:28:04.354 No.16139402
附圖
>>16139393
這樣惠玲婚
無題 無名 ID:oPiFz/YA 2019/09/29(日) 17:29:40.144 No.16139417
附圖
>>16139402
用命名原則與隱喻來取代註解。
無題 無名 ID:oPiFz/YA 2019/09/29(日) 17:30:56.424 No.16139433
回覆: >>16139478
附圖
>>16139402
不相信的話泥把一段程式碼丟上來,窩來試著改寫成不需要註解也能看兜董
無題 無名 ID:str0p4hM 2019/09/29(日) 17:31:44.154 No.16139443
function會被維護 但註解不一定會被記得跟著一起更新
之前才有人被註解害死 讓整個公司的員工薪水每位多發了幾K
無題 無名 ID:ZruFYwP6 2019/09/29(日) 17:35:50.025 No.16139478
回覆: >>16139488
附圖
>>16139417
>>16139433
沒辦法不寫拉
老師好像規定不寫就0分 有點忘了
不過我也怕組員在口試的時候突然看不懂我寫的部分就爆炸惹
無題 無名 ID:oPiFz/YA 2019/09/29(日) 17:37:04.624 No.16139488
回覆: >>16140098
附圖
>>16139478
泥鳩跟老師縮"我的註解鳩素程式"

蔗才素業界標準ㄛ
無題 無名 ID:ztK79CEQ 2019/09/29(日) 17:41:19.520 No.16139540
當個全程自幹的高手呀
報告時組員名單就只列自己
無題 無名 ID:oPiFz/YA 2019/09/29(日) 17:47:14.563 No.16139607
回覆: >>16140098
附圖
>>16139540
自幹也很噗錯ㄛ,溝通成本大幅下降。

而且窩相信泥們的架構應該也混散亂,自幹OK兜。
無題 無名 ID:ZruFYwP6 2019/09/29(日) 18:26:52.496 No.16140098
附圖
>>16139488
挖幹 真的假的
我們糞校教計概的教授都告訴我們寫程式要有註解欸
>>16139540
>>16139607
其實程式也經有八成都是我寫的了
組員只負責其中一個任務
不過流程圖之類的文書我都丟給他做
不知道這樣對他好不好啦
無題 無名 ID:oPiFz/YA 2019/09/29(日) 18:29:48.315 No.16140130
回覆: >>16140160
附圖
>>16140098
窩不拿別倫的杹壓泥,你丟粗一段你寫好註解的程式,我改丸後你再告訴我哪郭比較好。
無題 無名 ID:SGpmoIVk 2019/09/29(日) 18:32:38.604 No.16140159
附圖
>>16140098
我看是沒救了
>>16140130
我第一次用AA的功能
不知道這樣用對不對
[aa]
void Dungeon::Read( int read ) {
int goal = -1 ;
while ( read == 2 && goal == -1 ) { // 讀任務二的目標並測試有沒有效
cout << "Please Input number of goal :" ;
goal = Decide_Error_or_number() ;
} // while

string file = "", line = "", str_x = "", str_y = "" ;
ifstream input( file ) ;
while ( !input ) { // 讀檔案名稱並測試有沒有效
cout << "Please Input file name :" ;
cin >> line ;
file = "input" + line + ".txt" ;
input.open( file ) ;
} // while

int test = 0 ;
getline( input, line ) ; // 讀input第一行到line
for ( int check = 0 ; check < line.size() && test != -1 ; check++ ) { // 紀錄xy軸
if ( line.at( check ) != ' ' ) // 找到x的數字
test++ ;
if ( line.at( check ) == ' ' && test != 0 ) { // 找完x的數字後把第一行拆兩部分並轉成數字
test = -1 ;
str_y = str_y.assign( line, check, line.size() - check ) ; // 後半段切成y字串
str_x = str_x.assign( line, 0, check ) ; // 前半段切成x字串
x = stoi(str_x) ; // 轉成數字
y = stoi(str_y) ; // 轉成數字
} // if
} // for

map.resize( y ); // 重設y軸大小
for ( int now_y = 0 ; getline( input, line ) ; now_y++ ) { // 記錄地圖( 跑y軸部分 )
map[now_y].resize( x ) ; // 重設x軸大小
for ( int now_x = 0 ; now_x < line.size() ; now_x++ ) { // 記錄地圖( 跑x軸部分 )
if ( line.at( now_x ) == 'O' )
map[now_y][now_x] = 1 ;
if ( line.at( now_x ) == 'E' )
map[now_y][now_x] = 2 ;
if ( line.at( now_x ) == 'G' )
map[now_y][now_x] = 0 ;
} // for
} // for

if ( goal == -1) // 如果沒有讀goal就進入任務一
Mission1() ;
else
Mission2( goal ) ;
} // Read()
[/aa]
無題 無名 ID:rRNmLXlM 2019/09/29(日) 18:34:51.645 No.16140176
>>16140160
這註解有跟沒有一樣阿
無題 無名 ID:JqXO0RCY 2019/09/29(日) 18:34:57.974 No.16140178
回覆: >>16140208
>>16140160
> int test = 0

我看你是想飛天膩??
無題 無名 ID:oPiFz/YA 2019/09/29(日) 18:36:46.859 No.16140201
回覆: >>16140208
附圖
>>16140160
確認一下ㄛ,C++?
無題 無名 ID:ZruFYwP6 2019/09/29(日) 18:37:50.900 No.16140208
>>16140178
對噗起...這種用完就丟的我都叫test...
>>16140201
是的
無題 無名 ID:LljrQiuE 2019/09/29(日) 18:40:34.817 No.16140232
回覆: >>16140261
>>16140160
read == 2
goal == -1
誰知道你的2和-1是三小
你不會寫個macro或enum嗎
每次看到這種return值意義不明的我都很火大
無題 無名 ID:74KndEio 2019/09/29(日) 18:41:52.443 No.16140247
>>16140160
脫褲子放屁= =
無題 無名 ID:74KndEio 2019/09/29(日) 18:43:10.152 No.16140261
>>16140232所說
你不註解什麼是read goal
寫那種一看就懂得幹嘛
無題 無名 ID:QW2yUJg6 2019/09/29(日) 18:45:06.527 No.16140277
>>16140160
你的註解是什麼垃圾
無題 無名 ID:oPiFz/YA 2019/09/29(日) 19:00:27.797 No.16140440
回覆: >>16141140
附圖
>>16140160
先企ㄘ晚餐
[aa]
ifstream tryOpenNewFile()
{
string file = "", line = "";
ifstream input( file ) ;
while ( !input ) { // 讀檔案名稱並測試有沒有效
cout << "Please Input file name :" ;
cin >> line ;
file = "input" + line + ".txt" ;
input.open( file ) ;
} // while
return input;
}

bool missionChecker(int mission,int goal){
switch(mission)
{
case 2:
//mission_2 must select goal
return goal != -1;
default:
return true;
}
}
void Dungeon::Read( int mission ) {
ifstream tryOpenNewFile();
//----------
//TODO
int test = 0 ;
string line;
string str_x = "", str_y = "" ;
getline( input, line ) ; // 讀input第一行到line
for ( int check = 0 ; check < line.size() && test != -1 ; check++ ) { // 紀錄xy軸
if ( line.at( check ) != ' ' ) // 找到x的數字
test++ ;
if ( line.at( check ) == ' ' && test != 0 ) { // 找完x的數字後把第一行拆兩部分並轉成數字
test = -1 ;
str_y = str_y.assign( line, check, line.size() - check ) ; // 後半段切成y字串
str_x = str_x.assign( line, 0, check ) ; // 前半段切成x字串
x = stoi(str_x) ; // 轉成數字
y = stoi(str_y) ; // 轉成數字
} // if
} // for

map.resize( y ); // 重設y軸大小
for ( int now_y = 0 ; getline( input, line ) ; now_y++ ) { // 記錄地圖( 跑y軸部分 )
map[now_y].resize( x ) ; // 重設x軸大小
for ( int now_x = 0 ; now_x < line.size() ; now_x++ ) { // 記錄地圖( 跑x軸部分 )
if ( line.at( now_x ) == 'O' )
map[now_y][now_x] = 1 ;
if ( line.at( now_x ) == 'E' )
map[now_y][now_x] = 2 ;
if ( line.at( now_x ) == 'G' )
map[now_y][now_x] = 0 ;
} // for
} // for
//--------------
int goal;
do{
cout << "Please Input number of goal :" ;
goal = Decide_Error_or_number();
}while ( false == missionChecker(mission,goal))
bool isEnterMission2 = goal != -1;
if(isEnterMission2)
{
Mission2(goal);
}
else{
Mission1();
}
}
[/aa]
無題 無名 ID:Is/gUp5. 2019/09/29(日) 19:07:18.102 No.16140539
回覆: >>16141240
>>16140098
讀資工畢業會寫程式的一屆裡大概沒幾個啦
一堆國立畢業後跟文組的差不多
作業自幹就對了
管他的未來怎樣勒
未來是自己的 別人沒必要對他負責
無題 無名 ID:JXbweHyU 2019/09/29(日) 19:24:38.428 No.16140782
回覆: >>16141175
附圖
文組的表示看不懂
無題 無名 ID:oPiFz/YA 2019/09/29(日) 19:51:47.649 No.16141140
附圖
>>16140440
>>16140160
大概先蔗樣,下面那段GOAL的部分窩感覺跟任務選取沒有太直接的關係,泥可能要重新思考一下大段邏輯。
[aa]
ifstream openDungeonMap()
{
string file = "", line = "";
ifstream input( file ) ;
do{
cout << "Please Input DungeonMap file name :" ;
cin >> line ;
file = "input" + line + ".txt" ;
input.open( file ) ;
}while ( !input )
return input;
}
bool missionChecker(int mission,int goal){
switch(mission)
{
case 2:
//mission_2 must select goal
return goal != -1;
default:
return true;
}
}
missionSelector(){

}
std::tuple<int, int> getDungeonMapSize(string mapInfo)
{
int test = 0 ;
int mapSizeX,mapSizeY;
string str_x = "", str_y = "" ;
for ( int check = 0 ; check < mapInfo.size() && test != -1 ; check++ ) { // 紀錄xy軸
if ( mapInfo.at( check ) != ' ' ) // 找到x的數字
test++ ;
if ( mapInfo.at( check ) == ' ' && test != 0 ) {
// 找完x的數字後把第一行拆兩部分並轉成數字
test = -1 ;
str_y = str_y.assign( mapInfo, check, mapInfo.size() - check ) ;
str_x = str_x.assign( mapInfo, 0, check ) ;
mapSizeX = stoi(str_x) ;
mapSizeY = stoi(str_y) ;
}
}
return std::make_tuple(mapSizeX, mapSizeY);
}
int getMapTokenEnum(string token)
{
switch(token)
{
case 'O':
return 1;
case 'E':
return 2;
case 'G':
return 0;
default:
return -1;
}
}
void setDungeonMap(ifstream dungeonMap)
{
string dungeonInfo;
getline( dungeonMap, dungeonInfo );
std::tuple<int, int> dungeonMapSize = getDungeonMapSize(dungeonInfo);
int sizeX = std::get<0>(dungeonMapSize);
int sizeY = std::get<1>(dungeonMapSize);
//----
map.resize(sizeY);
string mapTokenPerLine;
for ( int now_y = 0 ; getline( dungeonMap, mapTokenPerLine ) ; now_y++ ) { // 記錄地圖( 跑y軸部分 )
map[now_y].resize( sizeX ) ;
for ( int now_x = 0 ; now_x < mapTokenPerLine.size() ; now_x++ ) {
string mapToken = mapTokenPerLine.at( now_x );
map[now_y][now_x] = getMapTokenEnum(mapToken);
}
}
}
void Dungeon::Read( int mission ) {
ifstream dungeonMap = openDungeonMap();
setDungeonMap(dungeonMap);
//----
//TODO:邏輯有點微妙,需要釐清Decide_Error_or_number到底是幹嘛的才能整理下去。
int goal;
do{
cout << "Please Input number of goal :" ;
goal = Decide_Error_or_number();
}while ( false == missionChecker(mission,goal))
bool isEnterMission2 = goal != -1;
if(isEnterMission2)
{
Mission2(goal);
}
else{
Mission1();
}
}
[/aa]
無題 無名 ID:37D5cyY6 2019/09/29(日) 19:52:46.922 No.16141151
回覆: >>16141184
>>16141140
讓人煩躁的語障
無題 無名 ID:oPiFz/YA 2019/09/29(日) 19:54:37.749 No.16141175
附圖
>>16140782
枚關係,窩也有看木有董。
無題 無名 ID:oPiFz/YA 2019/09/29(日) 19:55:19.160 No.16141184
附圖
無題 無名 ID:tMAIu.ag 2019/09/29(日) 20:00:47.146 No.16141240
>>16140539
真的
還遇過有人連梯形的*都不會印
無題 無名 ID:wZ2rsXtY 2019/09/29(日) 20:01:03.179 No.16141246
>>16140160
if 和迴圈就不用畫蛇添足了 除非你的花掛號好幾層不好讀再做標註
重點放在變數的作用和解釋code做了什麼就好
無題 無名 ID:wZ2rsXtY 2019/09/29(日) 20:08:13.163 No.16141325
回覆: >>16141377
>>oPiFz/YA

語障除了在程設版用雕蟲小技騙騙新手刷優越感還會上綜合?
無題 無名 ID:oPiFz/YA 2019/09/29(日) 20:12:48.096 No.16141377
回覆: >>16141434
附圖
>>16141325
謾罵不會讓你進步,你為何不要協助原PO寫出更好的程式呢?
無題 無名 ID:wZ2rsXtY 2019/09/29(日) 20:17:19.401 No.16141434
回覆: >>16141474
>>16141377
因為你講的答案有一半是智障跳針
而且也不會讓原po寫得更好
無題 無名 ID:oPiFz/YA 2019/09/29(日) 20:20:52.493 No.16141474
回覆: >>16141527
附圖
>>16141434
>No.16141434
>因為你講的答案有一半是智障跳針
>而且也不會讓原po寫得更好
你...還好嗎?生活有問題要縮出乃阿
無題 無名 ID:gl32/Lzk 2019/09/29(日) 20:24:11.946 No.16141527
附圖
>>16141474
最喜歡這種會寫程式又耐心教人可愛又有趣的粗乃丸了
無題 無名 ID:mfS9tt6I 2019/09/29(日) 20:32:19.038 No.16141615
回覆: >>16141630
附圖
>>16140160
其實
就是將一個大雜燴的函式
拆成多個 每個做的事單純一點
最後 用一個有意義的名字去命名他
無題 無名 ID:oPiFz/YA 2019/09/29(日) 20:33:49.004 No.16141630
附圖
>>16141140
>>16141615
對ㄛ,其實鳩煮素這樣而已ㄛ
[aa]
/*
*由呼叫Dungeon的位置開啟檔案比較妥善
ifstream openDungeonMap()
{
string line = "";
do{
cout << "Please Input DungeonMap file name :" ;
cin >> line ;
input.open( "input" + line + ".txt" ) ;
}while ( !input )
return input;
}*/
std::tuple<int, int> getDungeonMapSize(string mapInfo)
{
//private
int test = 0 ;
int mapSizeX,mapSizeY;
string str_x = "", str_y = "";
//TODO:Google trim , and split/strtok
for ( int check = 0 ; check < mapInfo.size() && test != -1 ; check++ ) {
if ( mapInfo.at( check ) != ' ' )
test++ ;
if ( mapInfo.at( check ) == ' ' && test != 0 ) {
test = -1 ;
str_y = str_y.assign( mapInfo, check, mapInfo.size() - check ) ;
str_x = str_x.assign( mapInfo, 0, check ) ;
mapSizeX = stoi(str_x) ;
mapSizeY = stoi(str_y) ;
}
}
return std::make_tuple(mapSizeX, mapSizeY);
}
int getMapTokenEnum(string token)
{
//private
switch(token)
{
case 'O':
return 1;
case 'E':
return 2;
case 'G':
return 0;
default:
return -1;
}
}
void setDungeonMap(ifstream dungeonMap)
{
//private
string dungeonInfo;
getline( dungeonMap, dungeonInfo );
std::tuple<int, int> dungeonMapSize = getDungeonMapSize(dungeonInfo);
int sizeX = std::get<0>(dungeonMapSize);
int sizeY = std::get<1>(dungeonMapSize);
//----
map.resize(sizeY);
string mapTokenPerLine;
for ( int now_y = 0 ; getline( dungeonMap, mapTokenPerLine ) ; now_y++ ) {
map[now_y].resize( sizeX ) ;
for ( int now_x = 0 ; now_x < mapTokenPerLine.size() ; now_x++ ) {
string mapToken = mapTokenPerLine.at( now_x );
map[now_y][now_x] = getMapTokenEnum(mapToken);
}
}
}

bool missionChecker(int mission,int goal){
//private
switch(mission)
{
case 2:
//mission_2 must select goal
return goal != -1;
default:
return true;
}
}

void StartMission( int mission ){

//public
//TODO:需整理主要邏輯,對應可能出現的Mission3,Mission4
int goal;
do{
cout << "Please Input number of goal :" ;
goal = Decide_Error_or_number();
}while ( false == missionChecker(mission,goal))
bool isEnterMission2 = goal != -1;
if(isEnterMission2)
{
Mission2(goal);
}
else{
Mission1();
}
}
void Dungeon::Read(ifstream dungeonMap) {
setDungeonMap(dungeonMap);
//Mission的啟動由外部呼叫比較妥善
}
[/aa]
無題 無名 ID:70paUWvs 2019/09/29(日) 20:33:52.423 No.16141633
回覆: >>16141704
>>16139417
實在不知道在程式中使用隱喻是不是一件好事
無題 無名 ID:WBVZHPJE 2019/09/29(日) 20:37:39.173 No.16141677
>>16141630
真希望我跟粗乃丸一樣會丸
無題 無名 ID:oPiFz/YA 2019/09/29(日) 20:39:30.158 No.16141704
回覆: >>16141718
附圖
>>16141633
看你囉,窩素覺得不錯。
隱喻幫助你確認邏輯有無瑕疵。
也可能幫助你(或接手的人),快速理解程式的綱要。

對於重構與追蹤來說,隱喻更顯得很重要。
但是使用隱喻的程式會看擠奶呆呆兜,因此很多自認GEEK的輪噗喜歡用。
無題 無名 ID:gl32/Lzk 2019/09/29(日) 20:40:24.899 No.16141718
附圖
>>16141704
哪個部分是隱喻呢?
無題 無名 ID:oPiFz/YA 2019/09/29(日) 20:45:56.042 No.16141796
附圖
>>16141718
大至功能(Function)的名稱,小到變數的命名。
都可以隱喻,至於隱喻該到哪種程度,鳩要看經驗惹。

例如原PO的read變數,仔細閱讀後發現其俗比較像是任務代號(mission),
因此就應該做一下調整,改為mission。
無題 無名 ID:Vn.rmG2M 2019/09/29(日) 20:47:04.920 No.16141814
回覆: >>16142268
附圖
>>16141630
挖...謝謝好心丸
我下次作業也開始試著這樣寫
無題 無名 ID:AjtVJWCM 2019/09/29(日) 20:49:05.948 No.16141837
>>16141796
這是霊夢ㄇ
無題 無名 ID:oPiFz/YA 2019/09/29(日) 20:50:31.104 No.16141856
回覆: >>16142014
附圖
>>16141718
又或者原PO有一段城素漲這樣
[aa]
if ( line.at( now_x ) == 'O' )
map[now_y][now_x] = 1 ;
if ( line.at( now_x ) == 'E' )
map[now_y][now_x] = 2 ;
if ( line.at( now_x ) == 'G' )
map[now_y][now_x] = 0 ;
[/aa]
閱讀擠萊應該素"取得該行特定位置的字符,轉換為對應的數字編號"
因此就可以改寫成這樣
[aa]
int getMapTokenEnum(string token)
{
//private
switch(token)
{
case 'O':
return 1;
case 'E':
return 2;
case 'G':
return 0;
default:
return -1;
}
}
[/aa]
[aa]
string mapToken = line.at( now_x );
map[now_y][now_x] = getMapTokenEnum(mapToken);
[/aa]
無題 無名 ID:WBVZHPJE 2019/09/29(日) 20:50:40.729 No.16141860
>>16141837
仕魂 娜可露露
無題 無名 ID:oPiFz/YA 2019/09/29(日) 20:53:28.280 No.16141910
附圖
>>16141837
不清楚,窩猜素(侍魂)娜可露露
無題 無名 ID:gl32/Lzk 2019/09/29(日) 20:53:42.690 No.16141914
回覆: >>16141983
附圖
>>16141796
也就是說取一個跟程式作用本身有關的變數與函式名稱嗎
無題 無名 ID:8sPR2PYw 2019/09/29(日) 20:57:04.260 No.16141965
隱喻寫好的code好讀好學習
寫不好的code就像在讀咒語一樣難搞
無題 無名 ID:oPiFz/YA 2019/09/29(日) 20:58:15.277 No.16141983
附圖
>>16141914
枚湊,糾真的只是這樣而已,
這樣做有幾個好處
1.讓你可以在模糊的狀況下進行概念性開發。
2.錯誤追蹤時可以快速理解正確應該如何運行。
3.重構時方便你進行思緒整理。
4.讓下一個人(或是三個月後的自己)日子好過。
5.開發時釐清有無多餘/缺少/可優杹的邏輯。

命名月清楚越好,同時也代表你的程式段落內的關聯性越強。
無題 無名 ID:TXjexxYY 2019/09/29(日) 21:00:32.221 No.16142003
>>16141983
可是這樣不會容易造成命名很長嘛?
而且有時候打縮寫接手的人也未必看得懂
無題 無名 ID:gl32/Lzk 2019/09/29(日) 21:01:12.313 No.16142013
附圖
>>16141983
謝謝粗乃丸!三個月後的我也會謝謝粗乃丸的

自動丸成的編譯器最好用
無題 無名 ID:Vn.rmG2M 2019/09/29(日) 21:01:13.168 No.16142014
回覆: >>16142268
附圖
>>16141856
我是原po 謝謝好心丸的教學
才剛從大一計概放出來還不會其他指令
以後會注意隱喻的
無題 無名 ID:dy0uAJ02 2019/09/29(日) 21:02:15.726 No.16142027
回覆: >>16142381
>>16141983

粗乃玩你的薪水有多少?
隨便掰一個也好
讓我羨慕羨慕
無題 無名 ID:CfMKMqx2 2019/09/29(日) 21:03:16.504 No.16142040
>>16142003
沒有要你縮寫阿= =
把你要幹的事情直白的打成function名稱幹嘛要縮寫
無題 無名 ID:8sPR2PYw 2019/09/29(日) 21:04:31.205 No.16142052
回覆: >>16142166
>>16142003
命名很長好過太短
看過那種用各種拼音來取名的真的頭大
無題 無名 ID:oPiFz/YA 2019/09/29(日) 21:05:41.794 No.16142068
附圖
>>16142003
蔗鳩要取捨了
1.如果不打全名,簡寫惠噗會讓人看不懂。
2.團隊內有沒有公定的命名原則
3.這個產業領域(Domain)內有沒有專有的名稱,特別素可能會跟其他東西搞混。
4.使用簡寫並用註解後會不會只是把該命名的東西變成註解。

噗過有個很簡單的方式,讓你快速決斷,
鳩素交給你的PM/同事看一下,對於KnowHow熟悉,
但是沒有參與你負責功能的團隊成員。

只要它悶可以不用在你特別解說下看得懂,你這段CODE就過關惹。
無題 無名 ID:wZ2rsXtY 2019/09/29(日) 21:07:03.328 No.16142080
>>16142003
除非是很常用的縮寫 不然還是寫清楚比較好
變數也要跟上下文相關
還有 該寫的註解還是要寫 命名取得再長都不如寫一點解釋來得好看 不是每個人都知道你在想啥 也不是每個人程度都跟你一樣
無題 無名 ID:u1OmKktg 2019/09/29(日) 21:08:01.447 No.16142095
回覆: >>16142127
附圖
還是javascript方便多了
可以用中文當變數
無題 無名 ID:CfMKMqx2 2019/09/29(日) 21:11:25.878 No.16142127
>>16142095
你工作的地方要是準你這樣搞
馬上離職
無題 無名 ID:T.eT7I8c 2019/09/29(日) 21:12:29.595 No.16142143
>>16140160
雖然你明天要交了 但是有種東西叫coding style可以查一下
然後那種stoi就不用寫註解了
寫註解範圍可以再大一點 像是if或function前面
不是像教小學生一句一句寫
無題 無名 ID:oPiFz/YA 2019/09/29(日) 21:15:01.705 No.16142166
附圖
>>16142052
>命名很長好過太短
蔗我就要舉郭反面例子囉。
[aa]
getPermissionByRoleAndLevel(role role,level level)

getPermission(role role,level level)
[/aa]

換言之,寫到後面其實撰寫時有一部分會發現困擾自己會是語感....
蔗就必須要多看多感覺了。
無題 無名 ID:8sPR2PYw 2019/09/29(日) 21:18:57.748 No.16142218
回覆: >>16142308
>>16142166
看起來是單一函數要做的事太複雜,命名要短也難
也只有分拆成更短的函數,讓函數作用單純化
無題 無名 ID:TXjexxYY 2019/09/29(日) 21:21:35.987 No.16142246
>>16142166
像這樣的情況
把部份解釋寫在函式註解裡面會比較好嗎?
無題 無名 ID:oPiFz/YA 2019/09/29(日) 21:23:57.005 No.16142268
附圖
>>16142014
>>16141814
戀好隱喻不容易ㄛ,
除了藥學會這些程式語言的用法,你還需要多深入了解一些東西。
1.你的需求(作業),背後的邏輯,你必須能夠解釋給人聽。
2.相關函式的各種寫法,寫法其實會影響結構,結構又會逆流回隱喻的風格。
3.必須與自己進行各種掙扎。

噗過練會後好處真兜不少,加油ㄛ。
無題 無名 ID:oPiFz/YA 2019/09/29(日) 21:27:06.483 No.16142308
回覆: >>16142371
附圖
>>16142246
>>16142218
自我掙扎囉,閉上眼,上綜合三分鐘,回來看程式。
可以五秒內從名稱推斷內容必且重新敘述給自己依然概念/方向正確,
鳩先當過關囉。(兩郭月後重新再看一次決定要不要重構)
無題 無名 ID:TXjexxYY 2019/09/29(日) 21:32:23.243 No.16142361
附圖
感謝各位的回答
無題 無名 ID:LheftxkI 2019/09/29(日) 21:32:41.340 No.16142368
>>16142246
不用
如果有人看到一個名為getPermission的函式接收role跟level當作參數還不知道他就是getPermissionByRoleAndLevel
那他還是辭職去站加油站比較實在
無題 無名 ID:8sPR2PYw 2019/09/29(日) 21:32:56.899 No.16142371
回覆: >>16142443
>>16142308
依過去看到的,留到以後重構的,大多都不會做....
就像我上間公司和這間一樣,跑著熟悉的循環:

1. 需求不清沒文件,第一個寫的人只好隨便寫
2. 接手的人看半天很難動
3. 因為coder都很難做了,事情越積越多
4. 上面覺得沒有效率只好拉長時間,然後超時工作結果,又
回到第一步

而且也不意外的二間公司都是算低薪的那種
無題 無名 ID:oPiFz/YA 2019/09/29(日) 21:33:45.287 No.16142381
回覆: >>16142417
附圖
>>16142027
打日工ㄛ,一天素遷。

至於一郭月幾天你駐脊猜。
無題 無名 ID:dy0uAJ02 2019/09/29(日) 21:37:33.769 No.16142417
附圖
>>16142381

一天數千 算九千好了
一個月三十天
這樣就有二十七萬

看來你就是粗乃玩一族的最後驕傲了……
無題 無名 ID:WBVZHPJE 2019/09/29(日) 21:39:30.305 No.16142439
回覆: >>16142530
>>16142417
我想粗乃丸說的是四千
無題 無名 ID:oPiFz/YA 2019/09/29(日) 21:40:00.645 No.16142443
回覆: >>16142508
附圖
>>16142371
蔗就更顯得隱喻的重要惹!!!
因為隱喻其實鳩寺解決泥兜【問題1】與【問題2】

換言之....程式品質終歸回到人身上,
一鍋好的工程師要學會放下自我,
想辦法讓程式可以讓其他人(以及自己)看得懂,
同時又持續整理這些東西使其保持精簡。

素一個不斷調修兜過程,但素不要嫌麻煩,
因為每促修改兜可以學到新東西(有方向->GOOGLE)。
無題 無名 ID:oPiFz/YA 2019/09/29(日) 21:41:08.392 No.16142460
附圖
>>16142417
喔...窩也希望窩每天有九千...
無題 無名 ID:cFqjgvr. 2019/09/29(日) 21:45:25.274 No.16142508
回覆: >>16142573
>>16142443
泥塑不素有看無暇的程式碼
無題 無名 ID:mfS9tt6I 2019/09/29(日) 21:47:16.972 No.16142530
附圖
>>16142439
四千 * 三十天 = 十二萬

看來你就是粗乃玩一族的最後驕傲了……
無題 無名 ID:Vn.rmG2M 2019/09/29(日) 21:49:02.566 No.16142545
附圖
>>16142530
這樣會死掉吧
無題 無名 ID:cFqjgvr. 2019/09/29(日) 21:49:32.270 No.16142555
>>16142530
不速映該算工作天20天嗎
無題 無名 ID:oPiFz/YA 2019/09/29(日) 21:51:37.535 No.16142573
附圖
>>16142508
有阿,看書很重要ㄛ,噗過窩其實不建議學生看,
因為書中很多東西都需要有開發維護專案的經驗才看兜董,看兜深。

尤其素設計模式,有一種很糟糕的爛扣叫做
【為設計而設計】,基本上專案失敗中,
有至少2成鳩素因為出現惹蔗東西。
導致專案後期的微調與擴充大失敗。

至於coding style,窩也不建議學生學,因為不同團隊有不同習慣,
進去新團隊首要就是先拜碼頭,認識大家,認識CODE,而剛畢業的學生
往往都很驕,如果還自己先學惹一套Style,那就很難合作惹。
窩寧願他們兜不要看過,學過,進去先被電一兩郭月,然後融入團體。
也不要他們跟團隊互尬"阿網路上規範就是要這樣的STYLE阿,廢物"。

大原則與習慣就跟著學校老師,或式sample code走鳩好囉。
無題 無名 ID:oPiFz/YA 2019/09/29(日) 21:53:16.759 No.16142595
附圖
>>16142530
惠..會死...會死掉拉
無題 無名 ID:RuntYQ5s 2019/09/29(日) 21:54:05.517 No.16142610
附圖
>>16139383
幹 果然是粗乃丸集合串
超多粗乃丸