Я считаю, что мне следует печатать меньше, если это возможно. Любое ненужное нажатие клавиши занимает немного времени. В контексте Objective-C мой вопрос:

Могу я напечатать это

[UIColor colorWithRed:0 green:0 blue:0 alpha:0.15];
[UIColor colorWithRed:0.45 green:0.45 blue:0.45 alpha:0.15];

Или я должен использовать суффикс f

[UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.15f];
[UIColor colorWithRed:0.45f green:0.45f blue:0.45f alpha:0.15f];

1) почему работает даже без "ф"?

2) Если мне нужно написать f, останется ли у меня исключение для «0», это означает, что если оно равно нулю, все еще нормально без «f»?

1
Earl Grey 11 Апр 2014 в 17:09

3 ответа

Когда вы вводите 0, это целочисленная константа. Если вы затем назначите его для числа с плавающей запятой, он будет автоматически повышен : это похоже на приведение типов, но компилятор делает это автоматически.

Когда вы набираете 0.0f, это означает «нулевую плавающую точку», которая напрямую присваивается переменной с плавающей запятой.

В этом случае нет значимой разницы между обоими методами.

1
user439793user439793 11 Апр 2014 в 13:17

Тот факт, что вы задаете этот вопрос, указывает на то, что вы должны быть откровенным, несмотря на лишнее нажатие клавиши. Последнее, что хочет сделать любой программист, начиная работать над некоторым кодом, - это сказать: «Здесь происходит WTF». Код читают чаще, чем пишут, и вы только что продемонстрировали, что кто-то с вашим уровнем опыта может не знать, что делает этот код.

Да, это будет работать, и нет, у этого нет недостатков компиляции / времени выполнения, но код должен быть написан для других людей, а не для компилятора - компилятору все равно, какой мусор вы напишете, он будет делать с ним лучше всего, независимо от . С другой стороны, другие программисты могут вскинуть руки и отойти от клавиатуры.

1
jmoreno 11 Апр 2014 в 23:54

В обоих случаях скомпилированный код идентичен. (Протестировано с LLVM 5.1, Xcode 5.1.1.)

Компилятор автоматически преобразует целые числа, литералы float и double в CGFloat. Обратите внимание, что CGFloat - это float в 32-разрядной версии и double в 64-разрядной версии, поэтому компилятор выполнит преобразование независимо от того, используете ли вы 0.15f или 0.15.

Советую не переживать по этому поводу. Я предпочитаю использовать наименьшее количество символов не потому, что их легче печатать, а потому, что их легче читать.

0
Douglas Hill 12 Май 2014 в 12:59