Biasanya ketika saya melihat kode diposting di sini seperti milik Anda, saya mengeditnya, karena kami benci gulir horizontal. Tetapi karena itu adalah bagian dari pertanyaan Anda, saya akan menunjukkan kepada Anda hasil edit di sini:
int extractMessage(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
int lengthOfWord = 0;
int lengthOfCipher = 0;
lengthOfWord = length(keyWord);
lengthOfCipher = length(cipherText);
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
continue;
}
}
}
Istirahat yang mungkin mengejutkan, tapi lebih mudah dibaca daripada versi dengan scroll horisontal, dan itu lebih baik daripada memperpendek nama untuk i
, j
, dan k
.
Ini bukan berarti bahwa Anda tidak harus menggunakan i
, j
dan k
. Itu adalah nama yang bagus saat mengindeks 3 for
loop bersarang . Tapi di sini nama-nama itu adalah satu-satunya petunjuk saya tentang apa yang Anda harapkan terjadi. Terutama karena kode ini tidak benar-benar melakukan apa pun.
Aturan terbaik untuk mengikuti panjang nama variabel adalah cakupan. Semakin lama sebuah variabel hidup, semakin banyak variabel sesama namanya harus bersaing. Nama CandiedOrange unik pada pertukaran tumpukan. Jika kami sedang mengobrol, Anda bisa memanggil saya "Permen". Tetapi sekarang, Anda berada dalam ruang lingkup di mana nama itu dapat dikacaukan dengan Candide , Candy Chiu , atau Candyfloss . Jadi semakin panjang cakupannya, semakin lama namanya. Semakin pendek cakupannya, semakin pendek namanya.
Panjang garis tidak boleh mendikte panjang nama. Jika Anda merasa seperti itu maka cari cara lain untuk mengeluarkan kode Anda. Kami memiliki banyak alat untuk membantu Anda melakukan itu.
Salah satu hal pertama yang saya cari adalah kebisingan yang tidak perlu untuk dihilangkan. Sayangnya contoh ini tidak melakukan apa-apa, jadi itu semua kebisingan yang tidak perlu. Saya perlu sesuatu untuk dikerjakan, jadi mari kita membuatnya melakukan sesuatu.
int calcCipherColumn(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
int lengthOfWord = 0;
int lengthOfCipher = 0;
lengthOfWord = length(keyWord);
lengthOfCipher = length(cipherText);
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
continue;
}
}
return cipherColumn;
}
Di sana, sekarang ia melakukan sesuatu.
Sekarang ia melakukan sesuatu, saya bisa melihat apa yang bisa saya singkirkan. Barang panjang ini bahkan tidak digunakan. Ini continue
juga tidak melakukan apa-apa.
int calcCipherColumn(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
}
}
return cipherColumn;
}
Mari kita membuat sedikit ruang putih kecil, karena kita hidup di dunia kontrol sumber dan itu bagus ketika satu-satunya alasan garis dilaporkan sebagai diubah adalah karena itu melakukan sesuatu yang berbeda, bukan karena sebagian dari itu harus berbaris dalam kolom.
int calcCipherColumn(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
}
}
return cipherColumn;
}
Ya, saya tahu itu sedikit kurang dapat dibaca tetapi jika tidak Anda akan membuat orang gila yang menggunakan alat vdiff untuk mendeteksi perubahan.
Sekarang mari kita perbaiki jeda garis konyol yang kita miliki ini karena kita berusaha untuk tetap berada di bawah batas panjang garis.
int calcCipherColumn(
char keyWord[25],
char cipherText[17424],
int rowSize,
char message[388]
) {
int keyColumn = 0;
int keyOffset = 1;
int nextWord = 1;
int cipherColumn = 0;
int cipherOffset = (rowSize * nextWord) + nextWord;
char key = keyWord[keyColumn];
char keyNext = keyWord[keyColumn + keyOffset];
while (key != cipherText[cipherColumn]) {
cipherColumn++;
if (keyNext != cipherText[cipherColumn + cipherOffset]) {
cipherColumn++;
}
}
return cipherColumn;
}
Di sana, sekarang logika dalam loop difokuskan pada perubahan apa dalam loop. Bahkan, segala sesuatu kecuali cipherColumn
bisa ditandai final
. Dan hei! Lihat itu. Kami sekarang memiliki ruang untuk melakukannya.
Yang saya lakukan adalah menambahkan 3 variabel lagi, mengganti nama satu, dan mengatur ulang mereka sedikit. Dan hasilnya kebetulan membuat garis cukup pendek agar pas tanpa linebreak konyol !=
.
Tentu nama-nama key
dan keyNext
tidak deskriptif, tetapi masing-masing hanya digunakan sekali, tidak hidup selama itu, dan yang paling penting tidak melakukan sesuatu yang menarik dalam lingkaran. Jadi mereka tidak perlu seperti itu. Dengan memperkenalkan variabel tambahan, kami sekarang memiliki ruang untuk membuat nama mereka panjang jika perlu. Banyak hal berubah, jadi pada akhirnya kita mungkin perlu. Jika kita melakukannya, itu bagus bahwa kita memiliki ruang bernapas.
Saya juga mengambil kebebasan untuk menunjukkan kepada Anda bentuk 6 varian gaya Jeff Grigg dari meletakkan parameter input untuk menghormati batasan panjang garis.
cipherColumn + (rowSize*nextWord) + nextWord
bahwa merek itu jelas apa perhitungan yang untuk , misalnya? Saya bertaruh nama itu lebih pendek dari perhitungan, sehingga Anda mendapatkan manfaat keterbacaan dan panjang garis yang dikurangi. Juga jangan menyelaraskan tugas, atau Anda harus memindahkan semuanya jika Anda mengganti nama variabel terpanjang.