Мне очень нравится этот оператор, но читатель должен быть принят во внимание.
Вы всегда должны балансировать между компактностью кода и временем, потраченным на его чтение, и в этом у него есть довольно серьезные недостатки.
Во-первых, это дело Оригинального Аскера. Он просто потратил час, публикуя об этом и читая ответы. Сколько времени потребовалось бы автору, чтобы написать каждый ?: как если/то на протяжении всей своей жизни. Не час, чтобы быть уверенным.
Во-вторых, в C-подобных языках вы привыкаете просто знать, что условные операторы стоят на первом месте. Я заметил это, когда использовал Ruby и наткнулся на такие строки:
callMethodWhatever(Long + Expression + with + syntax) if conditional
Если бы я долгое время был пользователем Ruby, у меня, вероятно, не было бы проблем с этой строкой, но, начиная с C, когда вы видите "callMethodWhatever" в качестве первого элемента в строке, вы ожидаете, что она будет выполнена. Знак ?: менее загадочен, но все же достаточно необычен, чтобы сбить читателя с толку.
Преимущество, однако, заключается в том, что у вас в животе действительно классное ощущение, когда вы можете написать 3-строчный оператор if на месте 1 из строк. Не могу этого отрицать :) Но, честно говоря, не обязательно более читабельным для 90% людей просто из-за его редкости.
Когда это действительно присваивание, основанное на логическом значении и значениях, у меня нет проблем с этим, но им легко злоупотреблять.
person
Bill K
schedule
28.04.2009