Saya memiliki beberapa yang saya banggakan dan beberapa di antaranya ditulis sendiri beberapa tahun yang lalu. Itu tidak harus selalu buggy, hanya kode yang buruk.
Saya memiliki beberapa yang saya banggakan dan beberapa di antaranya ditulis sendiri beberapa tahun yang lalu. Itu tidak harus selalu buggy, hanya kode yang buruk.
Jawaban:
Saya tidak tahu tentang bangga dengan perbaikannya karena sangat jelas, tetapi kode yang paling mengerikan yang saya ingat untuk diperbaiki adalah ini.
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 + "'";
Rupanya pengembang sebelumnya hanya terus menambahkan baris baru setiap kali pengguna baru (biasanya Irlandia) mulai mendapatkan kesalahan dalam aplikasi.
Saya akan meninggalkannya sebagai latihan untuk kelas tentang bagaimana hal itu diperbaiki.
UserName='John O''Reily'
akan menjadi UserName='John OReily'
(seperti bagaimana C menggabungkan string literal yang berdekatan), tetapi tidak berpikir tentang '
:( yang hilang :
Saya seharusnya tidak benar-benar bangga dengan ini, tetapi untuk beberapa alasan, itu memuaskan.
Selain memiliki COBOL di sekolah, saya tidak punya pengalaman, tetapi saya orang yang rendah di tiang totem, dan kami perlu memberikan kompilasi kode sumber ke agen outsourcing untuk pengecekan Y2K. Kami memiliki satu file COBOL dengan banyak rutin yang memanggil satu sama lain dalam file, seperti spaghetti, dan itu terlalu besar untuk dimuat di IDE kami saat ini untuk dikompilasi. Itu perlu dipisahkan menjadi setidaknya dua file fisik, dan file-file itu tentu saja, perlu memiliki semua yang mereka butuhkan dalam file mereka sendiri. (Atau mungkin, ada cara untuk menghubungkan mereka bersama, tapi aku tidak benar-benar tahu COBOL.)
Bagaimanapun, saya mengambil sekitar 100.000 file baris ini, dan dengan lembut memisahkan puluhan dan puluhan rutinitas untuk menemukan dua set rutin yang independen satu sama lain, dan karenanya dapat ada dalam dua file terpisah, masing-masing sekitar 50.000 atau lebih baris. (Saya pikir maks yang dapat ditangani oleh kompiler adalah sekitar 80.000 baris, jadi memang perlu dicocokkan secara merata.)
Saya membaca bahasa kuno yang tidak saya ketahui, dan masih berhasil dalam tugas itu.
Saya mengeluarkan kursor dari pelatuk dan mengurangi waktu untuk memasukkan 40.000 catatan baru dari satu jam menjadi kurang dari satu menit. Akhirnya ini menghasilkan saya dapat menyisipkan 21 juta catatan dalam waktu yang kurang dari waktu gletser, tetapi kami tidak pernah mencoba impor 20 juta catatan hingga perbaikan, jadi saya tidak memiliki statistik tentang berapa banyak waktu yang kami simpan.
Ada kelas dasar untuk membuat dialog konfirmasi untuk operasi yang berbeda pada simpul pohon. Anda hanya perlu memberikan pesan untuk ditampilkan dalam dialog dan tindakan untuk dijalankan jika dikonfirmasi. Sistem yang bagus tetapi tidak memungkinkan penanganan khusus jika tidak ada simpul pohon yang dipilih. Akibatnya, teks dalam salah satu dialog mengatakan: "Silakan pilih tidak". Jika Anda memilih ya, itu melempar pengecualian. Pengalaman pengguna yang sangat bagus, memang.
Saya memperbaikinya dengan menonaktifkan operasi yang tidak valid.
Yang terburuk yang pernah saya lihat adalah beberapa kode Java untuk mengekstrak kalimat kunci dari sebuah corpus teks.
Agar adil, ini tidak seberapa dibandingkan dengan beberapa barang kami di sana, tetapi masih ada perbedaan besar dalam kualitas sebelum dan sesudah. Pertimbangkan kode aktual sebelum dan sesudah dari satu fungsi berikut:
Sebelum (coba cari tahu apa fungsinya sebelum melihat Setelah!):
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);
}
Setelah:
/** 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;
}
Pekerjaan pemrograman saya yang pertama adalah menulis installer di InstallShield. Saya mewarisi skrip yang ribuan baris tanpa fungsi , hanya gotos. Itu membingungkan pikiran. Saya menulis ulang, membuat semuanya cantik dan modular dan didorong data, sehingga saya bisa diberi binari / seni / dll. dan menghasilkan penginstal baru dalam waktu kurang dari satu jam, daripada minggu + yang dibutuhkan orang sebelumnya. Saya sangat bangga pada diri saya sendiri.
Saya pikir tidak ada yang mendekati ini :
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
Memperbaiki? Eh, itu seharusnya tidak membutuhkan banyak penjelasan.