Спецификация POSIX для встроенной оболочки .
предназначена для поиска файла по путям из $PATH
, аналогично тому, как выполняется поиск исполняемых файлов. Это расширение Bash, которое также ищет файл в текущем каталоге, если его нет в $PATH
.
Таким образом, . ./conf.conf
является POSIX-совместимым способом сделать это, и вы наблюдаете поведение как с Bash, так и с sh
. Однако . conf.conf
зависит от Bash (sh
будет искать только $PATH
), поэтому вы получите результат только с Bash.
Boolean isValueBig = ( value > 100 ) ? true : false;
Boolean isValueBig;
if( value > 100 ) {
isValueBig = true;
} else {
isValueBig = false;
}
Различие между троичной операцией и если/еще то, что троичное выражение является оператором, который оценивает к значению, в то время как, если/еще не.
Для использования примера, изменяющегося от использования троичного выражения к тому, если/еще Вы могли бы использовать этот оператор:
Boolean isValueBig = null;
if(value > 100)
{
isValueBig = true
}
else
{
isValueBig = false;
}
В этом случае, тем не менее, Ваш оператор эквивалентен этому:
Boolean isValueBig = (value > 100);
Boolean isValueBig;
if (value > 100)
{
isValueBig = true;
}
else
{
isValueBig = false;
}
Когда я был плохо знаком с C++, я нашел, что он помог считать эту конструкцию следующим образом:
Boolean isValueBig = if condition ? then x else: y;
(Заметьте, что это не действительный код. Это, что я обучил меня читать в голове.)
Boolean isValueBig;
if(value > 100) { isValueBig = true; } else { isValueBig = false; }
Я никогда не был поклонником тернарного оператора, потому что я думал, что было трудно читать. Как это так происходит, Jon Skeet и его книга, C# подробно наконец поражают эту старую собаку по голове и заставили ее впитываться. Jon сказал, и я перефразирую, думаю о нем как о вопросе.
значение> 100?
"да": "нет"
Теперь слепые видят.
Надежда это помогает Вам сделать это второй натурой.
Как заключено в кавычки из?: Страница Operator MSDN, "условный оператор (? :) возвращает одно из двух значений в зависимости от значения булева выражения".
Таким образом, можно использовать тернарный оператор для возврата больше, чем просто булевские переменные:
string result = (value > 100 ) ? "value is big" : "value is small";
Удостоверьтесь, что Вы не смешиваете типы в истинных/ложных частях в Java. Это приводит к странным результатам :-(
Пример PHP
<?php
// Example usage for: Ternary Operator
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// The above is identical to this if/else statement
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
"Выражение (expr1)? (expr2): (expr3) оценивает к expr2, если expr1 оценивает к ПРАВДА, и expr3, если expr1 оценивает ко ЛЖИ".
Как заключено в кавычки из MSDN (отмеченный в предыдущем сообщении)
представить результат в виде строки = (значение> 100)? "значение является большим": "значение является маленьким";
Мог быть считан как:
Действительно ли значение больше, чем 100? Если да, строковым результатом является "значение, является большим", если не, строковым результатом является "значение, является маленьким".
Плохой пример, потому что Вы могли легко записать
Boolean isValueBig = value > 100 ? true : false;
как:
bool isValueBig = value > 100
Кроме того, все остальные уже ответили на это. Я просто не рекомендовал бы использовать тернарные операторы для установки значений bool, начиная с того, что Вы оцениваете уже, булево значение.
Я понимаю, что это был просто пример, но на это стоило указать.
Другие уже ответили на это, но вот одна вещь, которую необходимо действительно знать об использовании ternary, и этим я, никогда имею в виду не делают этого.
Позволяет предполагают, что у Вас есть часть кода, который, как предполагается, возвращает другой объект для каждого возможного изменения некоторого значения, позволяет, говорят для пользы simpliticy целое число между 1 и 5. Ваш код похож на это:
if(i==1) {
return new ObjectOne();
} else if(i==2) {
return new ObjectTwo();
} else if(i==3) {
return new ObjectThree();
} else if(i==4) {
return new ObjectFour();
} else if(i==5) {
return new ObjectFive();
} else {
return new DefaultObject();
}
Легко понять, но немного тяжелый. С тех пор троичный просто другой способ записать если.. еще оператор, который может быть пересмотрен к этому
return (i==1) ? new ObjectOne() :
(i==2) ? new ObjectTwo() :
(i==3) ? new ObjectThree() :
(i==4) ? new ObjectFour() :
(i==5) ? new ObjectFive() : new DefaultObject();
Это назвало вложенным троичный. Это является злым, теперь, когда Вы знаете об этом, никогда не используют его. Это, может казаться, имеет свое использование как случай выше, но вероятно, что в реальных ситуациях необходимо было бы использовать его где-нибудь, где это проигрывает, удобочитаемость (думайте, изменяя конфигурации с переменной суммой параметров и такого).
Бонусный сектор: Никогда не устанавливайте значения атрибута внутри, если (), просто посмотрите на это: if(bool=true!=false) { .. }