Absolutely. Though it’s worth noting that QT will only punish you for leaving out a *goto size
label in that example…it doesn’t force you to use a goto/label after an *if unless there’s an elseif/else involved. So even without switching on ICF, you could get by just fine with:
John was
*if size = 4
*set johnimpression %+ 5
@{superlative stupendously|very} tall
*if supersmell
and odorous
*goto size
*elseif size = 1
*set johnimpression %- 5
@{superlative incredibly|very} small
*goto size
*else
about as tall as you
*if (cindypresent)
or Cindy
expected
*goto size
*label size
for his age.
which is a mere four lines longer than the ICF-on version, and considerably more readable than the eight-line monstrosity of your first example.
Of course you could condense it even more by using a “multi”-replace for the internal ifs:
John was
*if size = 4
*set johnimpression %+ 5
@{superlative stupendously|very} tall @{supersmall and odorous|}
which uses even fewer lines, and is very quick to write if you’ve got a macro that serves you multireplace. Not sure I’d call it more readable, though–that would definitely vary with the beholder. In general “readability” doesn’t seem to me an obvious or universal advantage of multireplace, even with its standard use case where you’re not leaving one or more empty sets…it can be quite readable once you’ve practiced enough that your brain picks up quickly on the pipe, but it won’t be for everyone.
Personally, I’d be inclined to go with the ICF-off version as shown above, for the same reason I still use *fake_choice solely for its original function of flavor-text choices: on my scans of my own code, it helps me quickly skim through the flavor text (which will not have a goto/label, whether it comes in a fake_choice or following a lone if) to focus on choices or if/elses that actually branch the story or affect stats, which will have more commands around them, generally including a goto/label.