Hanya penasaran. Yang paling saya miliki adalah for for loop for for loop, karena setelah membaca ini dari Linus Torvalds:
Tab adalah 8 karakter, dan dengan demikian lekukan juga 8 karakter. Ada gerakan sesat yang mencoba membuat lekukan dalam 4 (atau bahkan 2!) Karakter, dan itu mirip dengan mencoba mendefinisikan nilai PI menjadi 3.
Dasar Pemikiran: Seluruh ide di balik lekukan adalah untuk secara jelas menentukan di mana blok kontrol dimulai dan berakhir. Terutama ketika Anda telah melihat layar selama 20 jam berturut-turut, Anda akan lebih mudah melihat bagaimana lekukan bekerja jika Anda memiliki lekukan besar.
Sekarang, beberapa orang akan mengklaim bahwa memiliki lekukan 8 karakter membuat kode bergerak terlalu jauh ke kanan, dan membuatnya sulit dibaca pada layar terminal 80 karakter. Jawabannya adalah bahwa jika Anda memerlukan lebih dari 3 level indentasi, Anda tetap kacau, dan harus memperbaiki program Anda.
https://www.kernel.org/doc/Documentation/CodingStyle
Saya pikir itu adalah praktik yang tidak dapat diterima bagi saya untuk pergi ke lapisan ketiga perulangan, dan akan merestrukturisasi kode saya (Terutama Qt).
Apakah Linus bercanda?
Apakah ini tergantung pada bahasa atau aplikasi?
Apakah ada beberapa hal yang benar-benar membutuhkan tiga atau lebih tingkat pengulangan?
Jawaban:
Kernel sangat menyukai algoritma sederhana
Sementara berbagai algoritma mungkin memerlukan loop yang sangat bersarang di dalam loop, dalam konteks kernel Linux (di mana kutipan itu dikatakan), Anda biasanya memerlukan respons waktu nyata yang cepat. Dalam konteks itu, deep nesting adalah bau yang dapat mengindikasikan bahwa aliran kode terlalu kompleks untuk domain ini dan mungkin perlu diubah karena karakteristik eksekusi, bukan keterbacaan atau masalah indentasi.
Lebih lanjut, kernel Linux berbeda dari kebanyakan kode aplikasi seperti untuk persyaratan auditabilitas dan pengujian - dan karenanya lebih memilih untuk tidak memiliki algoritma bertingkat 4+ dalam satu fungsi. Harus jelas untuk melihat apa yang masing-masing fragmen kode lakukan dengan tepat dan terperinci, termasuk semua kemungkinan aliran kontrol dan kasus tepi. Kode bersarang sangat menghambat itu.
sumber
because
proyek yang lebih tabu memanfaatkan bahasa tingkat bawah mendapat manfaat dari gaya pengkodean yang berfokus pada algoritma yang lebih sederhana?Sampai taraf tertentu, saya berhenti menganggap kutipan ini dengan serius di "Tab adalah 8 karakter" . Inti dari tabulator adalah bahwa mereka bukan jumlah karakter yang tetap (jika ada, tab adalah satu karakter). Apa beban tosh. Demikian pula, saya tidak sepenuhnya yakin bahwa menetapkan aturan "tiga tingkat indentasi" yang keras dan cepat itu waras (sebanyak menetapkan aturan yang keras dan cepat untuk segala sesuatu adalah waras).
Namun, membatasi tingkat Anda dari lekukan adalah secara umum saran yang masuk akal, dan tidak satu yang harus datang sebagai kejutan untuk Anda.
Pada akhirnya, jika program Anda membutuhkan tiga tingkat iterasi, itulah yang dibutuhkan oleh program Anda . Semangat kutipan ini bukan untuk secara ajaib meringankan persyaratan dari proyek Anda, tetapi untuk menghilangkan logika menjadi fungsi dan tipe sehingga kode Anda lebih tegas dan lebih ekspresif.
Ini hanya memberikan umpan balik ke pedoman yang sama yang diberikan di atas mengenai tingkat indentasi. Ini tentang bagaimana Anda menyusun kode dan membuatnya mudah dibaca, dipelihara, dan menyenangkan untuk dimodifikasi selama bertahun-tahun yang akan datang.
sumber
Outside of comments, documentation and except in Kconfig, spaces are never used for indentation, and the above example is deliberately broken.
- 6 paragraf turun dari kutipan di OP.Intinya sama dengan konstruksi kontrol aliran apa pun: jika kodenya sulit dipahami, Anda perlu mengubahnya. Jika Anda melakukan manipulasi sederhana dari array multi-dimensi, maka memiliki loop yang bersarang sedalam lima atau enam mungkin tepat, asalkan logika pada loop paling dalam mudah. Namun, jika Anda memproses beberapa logika bisnis yang rumit dan isi loop Anda selusin baris atau lebih, maka Anda mungkin tidak ingin membuat sarang lebih dari satu loop. Anda dapat mencoba menghitung kompleksitas cyclomatic dari kode tersebut, tetapi apa yang sebenarnya terjadi adalah keterbacaan dan pemeliharaan kode tersebut.
sumber
Sepotong ditulis dalam gaya bermain yang menunjukkan bahwa penulis akrab dengan cara pengkodean gaya dibahas di antara praktisi serius: Kita semua memiliki preferensi kita, dan kita membela mereka dengan berani, tetapi dengan lidah setidaknya sebagian di pipi. Kami sangat memahami bahwa sebagian besar hanya masalah selera pribadi. Dia mengatakan, dalam banyak kata,
"Coding style is very personal, and I won't _force_ my views on anybody"
- setidaknya di luar kode yang dia pertahankan secara pribadi. Tetapi konsistensi gaya dalam proyek yang diberikan adalah ide yang sangat bagus. Saya lebih suka kode ke gaya saya tidak suka daripada berurusan dengan banyak gaya dalam fungsi yang diberikan.Berikut adalah contoh penulisan yang jelas-jelas lucu:
Main-main (1).
Ini bisa dibilang saran yang baik untuk mencoba menjaga indentasi agar tidak lepas kendali, meskipun maksimum tiga level mungkin hiperbolik. Saya tidak akan memahami sumber kernel dan menghitung urutan empat karakter tab, tetapi saya berani bertaruh Anda bisa menemukan setidaknya satu yang ditulis Torvalds.
Di sisi lain, jika seseorang dapat menulis kernel Linux tanpa sering melebihi tiga level indentasi, batas tiga level mungkin merupakan latihan yang patut dicoba untuk sementara waktu dalam kode Anda sendiri, hanya untuk melihat ke mana ia membawa Anda. Ini tidak seperti perubahan jenis kelamin, Anda tahu. Itu bukan komitmen seumur hidup.
Jika Anda bertemu seseorang di Internet yang berpikir ia memahami pemrograman jauh lebih baik daripada Torvalds (2), Anda tahu orang seperti apa yang suka berbicara banyak di Internet.
Di sisi lain, ia secara pidana salah tentang tab delapan-ruang. Itu adalah keributan dari seorang pria yang harus disimpan dalam pengekangan dan diberi makan melalui slot. Empat ruang jelas benar.
(1) Tetapi perhatikan bagaimana ia secara keliru menempatkan ruang di depan elips, dan dua ruang setelahnya, dan dua ruang setelah berhenti penuh. SALAH SALAH SALAH. Dan kemudian dia memiliki keberanian berani untuk menghukum para bidat. Bidat itu adalah kamu, Torvalds! ITU ADALAH KAMU!
(2) Jika Anda ingin berbicara tentang " memahami cara merancang sistem kontrol sumber ", mungkin ada ruang untuk perdebatan.
Catatan: Rekan pengguna terkasih yang telah berulang kali mengirimkan hasil edit yang sama: Pemformatan dalam materi yang dikutip disimpan persis seperti yang dimaksudkan penulis. Itu karena itu dari esai tentang pemformatan teks lebar tetap, ditulis dalam teks lebar tetap, oleh seseorang yang telah memberikan pemformatan teks lebar tetap pemikiran yang adil. Format adalah bagian sadar dan sengaja dari maksud penulis, dan itu relevan dengan subjek.
Selain itu, saya merujuk kembali ke format itu di teks saya sendiri. Jika Anda menghapus pra-pemformatan, catatan kaki saya (1) menjadi omong kosong. Jika pra-format dihapus, maka seharusnya teks di catatan kaki saya (1) merujuk pada pasangan spasi setelah berhenti penuh di akhir kalimat. Saya dapat melihat alasan untuk menghapus catatan kaki itu, karena itu menjadi kurang lucu daripada ketika saya menulisnya. Tetapi untuk menghapus format tanpa menghapus catatan kaki tidak membantu.
sumber
.
di komentar ini ;-))preferred coding style
dan jugabut this is what goes for anything that I have to be able to maintain
Linus memiliki gaya berbicara yang sangat blak-blakan, dan selera humor yang kering, tetapi dia tidak bercanda dalam hal ini. Ada situasi di mana suatu algoritma perlu bersarang lebih dalam dari dua level, tetapi Anda dapat melakukannya dengan menggunakan cara lain selain mengindentasi kode Anda. Panduan gaya kernel Linux sangat memilih metode-metode lain ini, karena sulitnya mempertahankan loop yang bersarang secara mendalam, dan itulah yang dikatakan Linus di sini.
Untuk beberapa contoh metode alternatif, Anda dapat menggunakan rekursi, memisahkan loop internal menjadi fungsinya sendiri, atau membuat struktur data menengah.
Bersarang berlebihan adalah salah satu kasus yang lebih mudah ditulis, tetapi sulit dibaca. Mengatur kedalaman tab yang besar adalah cara Linus membuatnya lebih mengganggu untuk menulis juga.
sumber
Ada banyak pertanyaan di mana saran berbeda untuk seseorang yang mengajukan pertanyaan daripada seseorang yang tidak bertanya. Jika Anda bertanya "Jika saya pernah memiliki loop yang bersarang lebih dari dua level" maka untuk Anda, orang yang menanyakan pertanyaan itu, jawabannya adalah TIDAK. Jika Anda bertanya, maka jangan lakukan itu. Jika Anda memiliki cukup pengalaman yang tidak perlu Anda tanyakan, maka Anda tahu apa jawaban yang benar dalam setiap kasus. Dan jangan berdebat jika Anda tidak setuju dengan jawabannya, karena jawabannya bukan untuk Anda.
sumber
Ini akan tampak seperti kasus buku teks dari ekor yang mengibas-ngibaskan anjing.
Jika Anda memiliki tampilan 80 karakter maka tentu saja Anda akan mencoba dan membuat kode sesuai yang Anda bisa, bahkan jika itu tidak menghasilkan struktur terbaik untuk kode .
Menangani sisa poin Anda di kepala:
Saya pikir itu adalah praktik yang tidak dapat diterima.
Saya pikir Anda terlalu banyak membaca ini. Tahan dorongan untuk menganggap segala sesuatu yang Anda baca sebagai Injil tanpa memahami konteksnya dengan tepat.
Apakah dia bercanda?
Sulit untuk memastikan konteksnya, tetapi lihat poin asli saya di atas.
Apakah ini tergantung pada bahasa atau aplikasi?
Sangat banyak sehingga. Ambil bahasa mainframe / midrange mana pun di mana Anda cenderung membuat kode pada terminal (atau terminal emulator).
Apakah ada beberapa hal yang benar-benar membutuhkan tiga atau lebih tingkat pengulangan?
Ya, ini sangat umum dalam beberapa algoritma brute force. Lihat Masalah 31 tentang Euler Proyek. Ini adalah contoh klasik dari masalah yang bisa diselesaikan dengan kekerasan menggunakan sejumlah loop (8 tepatnya).
sumber
Tidak, itu adalah pedoman resmi.
Pedoman pengkodean umumnya tergantung pada bahasa dan aplikasi, namun kode yang sangat bersarang selalu membebani pembaca.
Masalah dengan kode bersarang adalah bahwa secara umum meningkatkan kompleksitas siklomatik: yaitu, semakin banyak kode bersarang, semakin banyak jalur eksekusi potensial yang ada dalam fungsi. Ledakan kombinatorial dari jalur eksekusi potensial membuatnya sulit untuk beralasan tentang kode, dan karenanya harus dihindari secara umum.
Jadi mengapa 3? Pedoman pengkodean subyektif sulit untuk ditegakkan dan tidak mungkin untuk ditegakkan secara otomatis. Menyiapkan pedoman pengkodean obyektif pada tingkat lekukan maksimum membutuhkan persetujuan angka: di kernel Linux mereka memilih 3.
Ini sewenang-wenang, dan tampaknya cukup untuk mereka.
Algoritma-bijaksana, mungkin, namun dalam bahasa yang cukup ekspresif Anda selalu dapat memperbaiki kode menjadi potongan yang lebih kecil (baik dengan fungsi atau penutupan).
Anda jelas dapat menulis kode yang dikaburkan dengan sedikit bersarang dan banyak fungsi kecil saling memanggil tanpa pernah mengeja kontrak mereka ...
... namun, fungsi kecil dengan kontrak yang jelas jauh lebih mudah untuk diaudit daripada fungsi besar dengan kontrak yang jelas pada umumnya.
sumber