(Seperti yang dijanjikan, pendapat saya berdasarkan pengalaman.)
Pertama-tama, jika Anda dapat mencegahnya: jangan tidak mencampur bahasa, bila memungkinkan.
Sebagai contoh Anda, sepertinya Anda kebanyakan bertanya-tanya tentang bagaimana hal itu harus dilakukan dalam bahasa templating yang dicampur dengan HTML, yang akan saya bahas. (Kasus lain akan membangun SQL menggunakan bahasa pemrograman lain, yang akan membutuhkan aturan yang sama sekali berbeda).
Sebagai contoh, saya akan membahas Django (tapi PHP, Twig, dll) kebanyakan berfungsi sama. Django memiliki blok logis dalam template (buka {% tag %}
, tutup {% endtag %}
). HTML memiliki blok logis (buka <tag>
, tutup </tag>
). Di sini saya kebanyakan mengikuti aturan ini: kenaikan setelah tag terbuka, penurunan setelah tag penutup. Aturan lain yang saya pertahankan: pastikan bahwa konten blok Django adalah HTML yang diformat dengan baik.
Per contoh Anda, menurut saya ini sangat salah:
<div>
IF FOO
<div someattribute>
ELSE
<div otherattribute>
END FOO
<p>content</p>
</div>
</div>
Mengapa? Karena konten IF
bukan HTML yang diformat dengan baik. Seperti apa bentuknya?
<div>
<div
IF FOO
someattribute
ELSE
otherattribute
END FOO
>
<p>Content</p>
</div>
</div>
(Karena bahasa template Anda tidak memiliki sintaks yang dapat diuraikan, kita perlu baris baru. Di Django, saya akan menulis)
<div>
<div {% if foo %}someattribute{% else %}otherattribute{% endif %}>
<p>Content</p>
</div>
</div>
Sebagai manfaat tambahan, bayangkan bahwa <div>
ada 7 atribut, 1 di antaranya diputuskan berdasarkan kondisi tertentu. Atau lebih buruk: bagaimana jika memiliki 3 atribut yang masing-masing tergantung pada suatu kondisi. Itu akan memberikan 8 tag berbeda.
Dengan mengingat "aturan" untuk menjaga konten semua blok diformat dengan baik dalam lingkup itu, Anda tidak perlu khawatir melanggar indentasi kedua bahasa.
Poin lain yang ingin saya bahas (meskipun sedikit di luar topik): Jika tag pembuka dan penutup berada pada baris yang berbeda, mereka harus menjadi satu-satunya tag pada baris itu.
Salah:
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</i>
</ul>
Sebaliknya, lebih suka
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a></li>
</ul>
atau
<ul>
<li>
This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</li>
</ul>
(Peringatan: penggunaan lanjutan): Terkadang Anda memiliki beberapa tag pembungkus, Anda mungkin (tidak harus) menganggap ini sebagai satu tag:
<ul>
<li><div id="something"><span class="like this">
Something like this
</span></div></li>
</ul>
Namun, sebaiknya jangan mencampur bahasa (host / tamu) saat melakukan ini. Dan sebaiknya jangan lakukan ini dengan for
loop. Dan jangan lakukan ini dengan.
TL; DR untuk pertanyaan spesifik Anda.
- Anda memiliki 'host' (mis. Django templating) dan 'guest' language (mis. HTML). Pastikan blok bahasa host selalu berisi blok bahasa tamu yang diformat dengan benar.
- Pembukaan setiap blok harus menambah indentasi, penutupan setiap blok harus sejajar dengan pembukaan.
Dan catatan umum yang harus saya tambahkan (seperti biasa): gunakan penilaian Anda sendiri. Tahu kapan harus menyimpang.