К сожалению, так и не добавили логический XOR, приходится использовать бинарный ^. Кстати, если кто вдруг не в курсе, бинарные && и || не вычисляют второй операнд, если первый уже однозначно определяет результат. Ну это во всех языках одинаково.

Пример:
X++:
public boolean updateSuccessful(SalesId _salesId)
{
SalesTable salesTable;
boolean ret = true;
;
try
{
ttsBegin;
select forUpdate salesTable
where salesTable.SalesId == _salesId;
...
salesTable.update();
ttsCommit;
}
catch (Exception::Error)
{
ttsAbort;
ret = checkFailed("Unknown error while updating");
}
return ret;
}
public void execute()
{
// Если init() вернет false, второй метод не вызовется
// если в любом случае нужно вызывать updateSuccessful(), надо использовать одиночный &
if (this.init() && this.updateSuccessful(salesId))
{
this.run();
}
}