Doch, in allen Beispielen hat
if
einen Rückgabewert, alle Beispiele zeigen echteif
-Ausdrücke.
if vermittelt eine Wertzuweisung, so würde ich das eher formulieren. if selbst kann außer true oder false (sog. Boolsche Werte) keinen anderen Wert liefern aber if macht das implizit und jeder Versuch einer solchen direkten Zuweisung wird unweigerlich mit einem Syntaxfehler quittiert.
Ebensowenig prüft do einen Ausdruck. Schon der Begriff do-Expression ist irreführend, weil do keinen Ausdruck prüft, sondern lediglich das letzte im Block notierte Statement liefert -- ohne es zu prüfen.
Schönen Sonntag.