Отступ для метода сцепления
Предположим, у меня очень длинный метод цепочки
object.SetA(123).SetB(234).SetC(345) ...
какой лучший отступ? Все компиляторы их поддерживают?
object.
SetA(123).
SetB(234).
SetC(345) ...
или же
object
.SetA(123)
.SetB(234)
.SetC(345) ...
5 ответов
Assuming that we're talking about method chaining on the same object (each function retuns *this
), how about:
object.setA().setB().setC();
object.setD().setE().setF();
Long lines aren't just bad because your screen isn't wide enough to contain them. If that's all there was to it, just buy a bigger monitor or reduce the font size. They're bad because people read code one line at a time, and if you're doing too much in one line you break their tiny little carbon-based brains.
If all else fails, personally I'd indent it this way:
object
.setA()
.setB()
...
;
but I'd prefer:
object.setA();
object.setB();
...
Объединение методов - это способ втиснуть больше в строку, поэтому, если мы собираемся снова разделить строки, я не вижу преимущества. Иногда мы вынуждены, потому что object
на самом деле является временным (результат вызова функции, а не именованной переменной) или чем-то, и мы не можем взять ссылку на него.
Возможно, вы могли бы просто позволить линии бежать с правой стороны. Это раздражает, когда приходится прокручивать вбок или иметь перенос строк, но опять же это уже раздражает, когда приходится делать это в одном утверждении, так что, очевидно, есть какая-то невероятно важная причина.
ИМО, второй лучше. Начиная строку с., Это делает очевидным, что это продолжение цепного вызова.
Да, все компиляторы будут их поддерживать. Все, что вы делаете, это добавляете пробелы, которые удаляются компилятором во время лексического анализа.
Это вопрос личных предпочтений, но я согласен с мнением Майка Квана.
Я написал бы это, если цепочка слишком длинная и не может находиться в одной строке:
object.SetA(123)
.SetB(234)
.SetC(345)
.SetD(345)
.SetE(345)
.SetF(345);
В противном случае я бы пошел на это:
object.SetA(123).SetB(234).SetC(345).SetD(345).SetE(345).SetF(345);
C++ не чувствителен к пробелам, все они будут работать на любых компиляторах C++ (ну... при условии, что в лексере нет ошибок). В любом случае я предпочитаю последний, с завершающей точкой с запятой, размещенной на отдельной строке (что делает добавление дополнительной цепочки более простым, это сделает простая копия строки).