Все переменные / свойства должны быть по умолчанию readonly
/ final
.
Аргументация немного аналогична аргументу sealed
для классов, выдвинутому Джоном. Одна сущность в программе должна иметь одну работу и только одну работу. В частности, для большинства переменных и свойств не имеет никакого смысла когда-либо менять значение. Есть в основном два исключения.
Петлевые переменные. Но потом я утверждаю, что переменная вообще не меняет значения. Скорее, он выходит из области видимости в конце цикла и повторно создается в следующем ходу. Следовательно, неизменяемость будет хорошо работать с переменными цикла, и каждый, кто пытается вручную изменить значение переменной цикла, должен отправиться прямо в ад.
Аккумуляторы. Например, представьте случай суммирования значений в массиве или даже в списке / строке, которые накапливают некоторую информацию о чем-то еще.
1111 Сегодня есть лучшие средства для достижения той же цели. Функциональные языки имеют функции высшего порядка, Python имеет понимание списка, а .NET имеет LINQ. Во всех этих случаях нет необходимости в изменяемом аккумуляторе / держателе результата.
Рассмотрим частный случай конкатенации строк. Во многих средах (.NET, Java) строки на самом деле являются неизменяемыми. Зачем тогда вообще разрешать присваивание строковой переменной? Намного лучше использовать класс строителя (то есть a StringBuilder
) все время.
Я понимаю, что большинство современных языков просто не созданы для того, чтобы соглашаться с моим желанием. На мой взгляд, все эти языки в корне ошибочны по этой причине. Они не потеряли бы ничего из-за своей выразительности, мощности и простоты использования, если бы их изменили так, чтобы они по умолчанию рассматривали все переменные только для чтения и не позволяли им присваивать их после инициализации.
Задайте ширину ul .navigation и используйте margin: 0 auto;
.navigation ul
{
list-style: none;
padding: 0;
width: 400px;
margin: 0 auto;
}
Итак, чтобы использовать margin: 0 auto
для чего-либо, он должен иметь определенную ширину. Вероятно, лучший обходной путь:
ul li {
display: inline;
list-style-type: none;
}
ul {
text-align:center;
}
Вы можете установить
как display: inline
, затем установить text-align: center
на
. Таким образом вы можете удалить
float: left
из элементов списка, и вам не нужно иметь фиксированную ширину для панели навигации, как если бы вы использовали margin: 0 auto
].
<html>
<head>
<style>
ul {
list-style: none;
text-align: center;
}
li {
display: inline;
margin: 0 1.15em;
}
</style>
</head>
<body>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</body>
</html>
Вот решение , которое не требует указания ширины вашей ul .