ฉันมีบางอย่างที่ฉันภาคภูมิใจและบางส่วนของพวกเขาเขียนด้วยตัวเองไม่กี่ปีที่ผ่านมา มันไม่จำเป็นต้องเป็นรถบักกี้ แต่เป็นรหัสที่ไม่ดี
ฉันมีบางอย่างที่ฉันภาคภูมิใจและบางส่วนของพวกเขาเขียนด้วยตัวเองไม่กี่ปีที่ผ่านมา มันไม่จำเป็นต้องเป็นรถบักกี้ แต่เป็นรหัสที่ไม่ดี
คำตอบ:
ฉันไม่รู้เกี่ยวกับความภาคภูมิใจของการแก้ไขเพราะมันชัดเจนมาก แต่รหัสที่น่ากลัวที่สุดที่ฉันจำได้ว่าการแก้ไขคือ
if (userName=="John O'Reily") { userName= "John O''Reily";}
if (userName=="Stacy O'Neil") { userName= "Stacy O''Neil";}
if (userName=="Finnegan O'Connor") { userName= "Finnegan O''Connor";}
...
someSQL = "SELECT * from Users where UserName='" + userName + "'";
เห็นได้ชัดว่านักพัฒนาก่อนหน้านี้เพิ่งเพิ่มบรรทัดใหม่ทุกครั้งที่ผู้ใช้ใหม่ (โดยปกติชาวไอริช) เริ่มได้รับข้อผิดพลาดในแอปพลิเคชัน
ฉันจะปล่อยให้มันเป็นแบบฝึกหัดสำหรับชั้นเรียนว่ามันได้รับการแก้ไขอย่างไร
UserName='John O''Reily'
จะกลายเป็นUserName='John OReily'
(เช่นวิธี C เชื่อมต่อตัวอักษรสตริงที่อยู่ติดกัน) แต่ไม่ได้คิดเกี่ยวกับการขาดหายไป'
:(
ฉันไม่ควรภูมิใจในสิ่งนี้ แต่ด้วยเหตุผลบางอย่างมันก็น่าพอใจ
นอกเหนือจากการมีภาษาโคบอลในโรงเรียนฉันไม่มีประสบการณ์ แต่ฉันเป็นคนต่ำบนเสาโทเท็มและเราจำเป็นต้องให้ซอร์สโค้ดการคอมไพล์แก่ผู้ให้บริการภายนอกเพื่อตรวจสอบ Y2K เรามีไฟล์ภาษาโคบอลเดี่ยวที่มีกิจวัตรหลายอย่างที่เรียกกันในไฟล์เหมือนปาเก็ตตี้และมันใหญ่เกินไปที่จะโหลดใน IDE ปัจจุบันของเราสำหรับการรวบรวม มันต้องถูกแยกออกเป็นไฟล์ฟิสิคัลอย่างน้อยสองไฟล์และแน่นอนไฟล์เหล่านั้นจำเป็นต้องมีทุกสิ่งที่พวกเขาต้องการในไฟล์ของตัวเอง (หรืออาจมีวิธีที่จะเชื่อมโยงพวกเขาเข้าด้วยกัน แต่ฉันไม่รู้จักภาษาโคบอล)
อย่างไรก็ตามฉันใช้ไฟล์นี้ประมาณ 100,000 ไฟล์และค่อยๆแยกชุดคำสั่งหลายสิบชุดเพื่อหาชุดคำสั่งสองชุดที่เป็นอิสระจากกันและอาจมีอยู่ในสองไฟล์แยกกันแต่ละเส้นประมาณ 50,000 เส้น (ฉันคิดว่าจำนวนสูงสุดที่คอมไพเลอร์สามารถจัดการได้คือประมาณ 80,000 บรรทัดดังนั้นจึงจำเป็นต้องจับคู่อย่างเท่าเทียมกัน)
ฉันกำลังอ่านภาษาโบราณที่ฉันไม่รู้และยังประสบความสำเร็จในงาน
ฉันหยิบเคอร์เซอร์ออกจากทริกเกอร์และลดเวลาในการแทรกเร็กคอร์ดใหม่ 40,000 รายการจากหนึ่งชั่วโมงเหลือน้อยกว่าหนึ่งนาที ในที่สุดสิ่งนี้ทำให้ฉันสามารถแทรก 21 ล้านเร็กคอร์ดในบางเวลาน้อยกว่ายุคน้ำแข็ง แต่เราไม่เคยลองนำเข้าเร็กคอร์ด 20 ล้านจนกว่าจะมีการแก้ไขดังนั้นฉันจึงไม่มีสถิติเกี่ยวกับเวลาที่เราบันทึกไว้
มีคลาสฐานสำหรับการสร้างกล่องโต้ตอบการยืนยันสำหรับการดำเนินการที่แตกต่างกันในโหนดต้นไม้ คุณจะต้องให้เฉพาะข้อความที่จะแสดงในกล่องโต้ตอบและการกระทำที่จะทำงานหากได้รับการยืนยัน ระบบดี แต่ไม่อนุญาตการจัดการพิเศษในกรณีที่ไม่มีการเลือกโหนดต้นไม้ ด้วยเหตุนี้ข้อความในกล่องโต้ตอบข้อใดข้อหนึ่งจึงกล่าวว่า: "โปรดเลือกไม่" หากคุณเลือกใช่จะมีข้อผิดพลาดเกิดขึ้น ประสบการณ์การใช้งานที่ดีมากแน่นอน
ฉันแก้ไขสิ่งนี้โดยปิดการใช้งานการดำเนินการที่ไม่ถูกต้อง
ที่แย่ที่สุดที่ฉันเคยเห็นคือโค้ด Java บางอันเพื่อดึงประโยคสำคัญจากคลังข้อความ
เพื่อความเป็นธรรมนี่คือไม่มีอะไรเทียบกับบางสิ่งที่เรามี แต่ก็ยังมีความแตกต่างอย่างมากในคุณภาพก่อนและหลัง พิจารณาตามจริงก่อนและหลังรหัสของหนึ่งฟังก์ชัน:
ก่อนหน้า (ลองคิดดูว่ามันทำอะไรก่อนที่จะดูหลังจาก!):
public static void getCluster() {
count = new Vector();
for (int i = 0; i < begin.size(); i ++)
count.add("1");
if (begin.size() > 1) {
for (int i = 0; i < begin.size() - 1; i ++) {
for (int j = i + 1; j < begin.size(); j ++) {
int b1 = Integer.parseInt(begin.get(i).toString());
int e1 = Integer.parseInt(end.get(i).toString());
double w1 = Double.parseDouble(wght.get(i).toString());
int c1 = Integer.parseInt(count.get(i).toString());
int b2 = Integer.parseInt(begin.get(j).toString());
int e2 = Integer.parseInt(end.get(j).toString());
double w2 = Double.parseDouble(wght.get(j).toString());
int c2 = Integer.parseInt(count.get(j).toString());
int max = Math.max(e1, e2);
boolean toRemove = true;
if (b1 == b2) end.set(i, Integer.toString(max));
if (b1 < b2) {
if (b2 < e1) end.set(i, Integer.toString(max));
else {
if ((b2 - e1) <= 3) end.set(i, Integer.toString(e2));
else toRemove = false;
}
}
if (b1 > b2) {
if (e2 >= b1) {
begin.set(i, Integer.toString(b2));
end.set(i, Integer.toString(max));
} else {
if ((b1 - e2) <= 3) {
begin.set(i, Integer.toString(b2));
end.set(i, Integer.toString(e1));
} else toRemove = false;
}
}
//System.out.println(b1 + ", " + e1 + ", " + b2 + ", " + e2 + " ---> " + begin.get(i).toString() + ", " + end.get(i).toString());
if (toRemove) {
wght.set(i, Double.toString(w1 + w2));
count.set(i, Integer.toString(c1 + c2));
begin.removeElementAt(j);
end.removeElementAt(j);
wght.removeElementAt(j);
count.removeElementAt(j);
j --;
} //end of if
} //end of for j
} //end of for i
} //end of if
//System.out.println(begin);
//System.out.println(end);
//System.out.println(wght);
//System.out.println(count);
}
หลังจาก:
/** Returns the result of merging all overlapping-with-leeway clusters into single combined clusters.
* @param leeway The minimum number of word-spaces which must separate two clusters in order for them to not be overlapping.
* @requires clusters != null
* @requires leeway >= 0
* @ensures result != null */
private static List<TermCluster> combineOverlappingClusters(Iterable<TermCluster> clusters, int leeway) {
if (clusters == null) throw new NullPointerException("clusters");
if (leeway < 0) throw new IllegalArgumentException("leeway < 0");
//Sort to allow linear folding
List<TermCluster> sortedClusters = Iter.sort(clusters, new Comparator<TermCluster>() {
@Override public int compare(TermCluster o1, TermCluster o2) {
return new Integer(o1.begin).compareTo(o2.begin);
}
});
if (sortedClusters.size() == 0)
return sortedClusters;
//Combine left-to-right
List<TermCluster> result = new ArrayList<TermCluster>();
TermCluster acc = sortedClusters.get(0);
for (TermCluster cluster : sortedClusters.subList(1, sortedClusters.size())) {
if (acc.isOverlappingWithLeeway(cluster, leeway)) {
//combine
acc = acc.combineWith(cluster);
} else {
//next
result.add(acc);
acc = cluster;
}
}
result.add(acc); //leftovers
return result;
}
งานเขียนโปรแกรมแรกของฉันคือการเขียนโปรแกรมติดตั้งใน InstallShield ฉันสืบทอดสคริปต์ที่มีหลายพันบรรทัดโดยไม่มีฟังก์ชั่นมีเพียง gotos มันเป็นความคิดที่จะเชื่อได้ ฉันเขียนใหม่ทำให้มันสวยและเป็นโมดูลและขับเคลื่อนข้อมูลเพื่อที่ฉันจะได้รับไบนารี / art / etc และเปิดตัวติดตั้งใหม่ภายในไม่ถึงหนึ่งชั่วโมงแทนที่จะเป็นสัปดาห์ + มันใช้เวลาคนที่แต่งตัวประหลาดก่อนหน้านี้ ฉันภูมิใจในตัวเองมาก
ฉันคิดว่าไม่มีอะไรมาใกล้เคียงกับสิ่งนี้ :
function pmn_Sort(strBy)
local tblA = {};
local tblB = {};
local tblC = {};
local tblD = {};
local tblE = {};
local tblF = {};
local tblG = {};
local tblH = {};
local tblI = {};
local tblJ = {};
local tblK = {};
local tblL = {};
local tblM = {};
local tblN = {};
local tblO = {};
local tblP = {};
local tblQ = {};
local tblR = {};
local tblS = {};
local tblT = {};
local tblU = {};
local tblV = {};
local tblW = {};
local tblX = {};
local tblY = {};
local tblZ = {};
local tblOT = {};
local iA = 0;
local iB = 0;
local iC = 0;
local iD = 0;
local iE = 0;
local iF = 0;
local iG = 0;
local iH = 0;
local iI = 0;
local iJ = 0;
local iK = 0;
local iL = 0;
local iM = 0;
local iN = 0;
local iO = 0;
local iP = 0;
local iQ = 0;
local iR = 0;
local iS = 0;
local iT = 0;
local iU = 0;
local iV = 0;
local iW = 0;
local iX = 0;
local iY = 0;
local iZ = 0;
local iOT = 0;
if strBy == "Name" then
strSort = "Name";
numPlcount = ListBox.GetCount("Playlist");
numPLitem = 1;
numPLadd = 0;
while numPLitem <= numPlcount do
strPLtxt = ListBox.GetItemText("Playlist", numPLitem);
strPLdata = ListBox.GetItemData("Playlist", numPLitem);
strPLleft = String.Left(strPLtxt, 1);
if strPLleft == "a" or strPLleft == "A" then
iA = iA + 1;
tblA[iA] = strPLdata;
elseif strPLleft == "b" or strPLleft == "B" then
iB = iB + 1;
tblB[iB] = strPLdata;
elseif strPLleft == "c" or strPLleft == "C" then
iC = iC + 1;
tblC[iC] = strPLdata;
elseif strPLleft == "d" or strPLleft == "D" then
iD = iD + 1;
tblD[iD] = strPLdata;
elseif strPLleft == "e" or strPLleft == "E" then
iE = iE + 1;
tblE[iE] = strPLdata;
elseif strPLleft == "f" or strPLleft == "F" then
iF = iF + 1;
tblF[iF] = strPLdata;
elseif strPLleft == "g" or strPLleft == "G" then
iG = iG + 1;
tblG[iG] = strPLdata;
elseif strPLleft == "h" or strPLleft == "H" then
iH = iH + 1;
tblH[iH] = strPLdata;
elseif strPLleft == "i" or strPLleft == "I" then
iI = iI + 1;
tblI[iI] = strPLdata;
elseif strPLleft == "j" or strPLleft == "J" then
iJ = iJ + 1;
tblJ[iJ] = strPLdata;
elseif strPLleft == "k" or strPLleft == "K" then
iK = iK + 1;
tblK[iK] = strPLdata;
elseif strPLleft == "l" or strPLleft == "L" then
iL = iL + 1;
tblL[iL] = strPLdata;
elseif strPLleft == "m" or strPLleft == "M" then
iM = iM + 1;
tblM[iM] = strPLdata;
elseif strPLleft == "n" or strPLleft == "N" then
iN = iN + 1;
tblN[iN] = strPLdata;
elseif strPLleft == "o" or strPLleft == "O" then
iO = iO + 1;
tblO[iO] = strPLdata;
elseif strPLleft == "p" or strPLleft == "P" then
iP = iP + 1;
tblP[iP] = strPLdata;
elseif strPLleft == "q" or strPLleft == "Q" then
iQ = iQ + 1;
tblQ[iQ] = strPLdata;
elseif strPLleft == "r" or strPLleft == "R" then
iR = iR + 1;
tblR[iR] = strPLdata;
elseif strPLleft == "s" or strPLleft == "S" then
iS = iS + 1;
tblS[iS] = strPLdata;
elseif strPLleft == "t" or strPLleft == "T" then
iT = iT + 1;
tblT[iT] = strPLdata;
elseif strPLleft == "u" or strPLleft == "U" then
iU = iU + 1;
tblU[iU] = strPLdata;
elseif strPLleft == "v" or strPLleft == "V" then
iV = iV + 1;
tblV[iV] = strPLdata;
elseif strPLleft == "w" or strPLleft == "W" then
iW = iW + 1;
tblW[iW] = strPLdata;
elseif strPLleft == "x" or strPLleft == "X" then
iX = iX + 1;
tblX[iX] = strPLdata;
elseif strPLleft == "y" or strPLleft == "Y" then
iY = iY + 1;
tblY[iY] = strPLdata;
elseif strPLleft == "z" or strPLleft == "Z" then
iZ = iZ + 1;
tblZ[iZ] = strPLdata;
else
iOT = iOT + 1;
tblOT[iOT] = strPLdata;
end
numPLitem = numPLitem + 1;
end
ListBox.DeleteItem("Playlist", LB_ALLITEMS);
for ii, id in tblA do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblB do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblC do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblD do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblE do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblF do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblG do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblH do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblI do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblJ do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblK do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblL do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblM do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblN do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblO do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblP do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblQ do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblR do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblS do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblT do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblU do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblV do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblW do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblX do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblY do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblZ do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
for ii, id in tblOT do
if id ~= "" then
numPLadd = numPLadd + 1;
strPLtxt = String.SplitPath(id).Filename..String.SplitPath(id).Extension
ListBox.AddItem("Playlist", strPLtxt, id);
end
end
elseif strBy == "Type" then
strSort = "Type";
if File.DoesExist(_ProgramFilesFolder.."\\MediaX\\playlist.mx") == true then
play_file2 = TextFile.ReadToTable(_ProgramFilesFolder.."\\MediaX\\playlist.mx");
if play_file2 then
ListBox.DeleteItem("Playlist", -1);
for rl,rPath in play_file2 do
r2Path = String.TrimLeft(rPath, nil);
ListBox.AddItem("Playlist", String.SplitPath(r2Path).Filename..String.SplitPath(r2Path).Extension, r2Path);
end
end
end
end
end
การแก้ไข? เอ๊ะนั่นไม่น่าต้องการคำอธิบายมากนัก