A1
咗 — the action finished
How 咗 marks a completed action in Cantonese, why it is not a past tense, and why it cannot appear alongside 冇.
咗 after a verb says the action is complete. It is zo2, and it is the Cantonese counterpart of the 了 that sits immediately after a verb.
我食咗飯。
Ngo5 sik6zo2 faan6.
I’ve eaten.
佢琴日嚟咗。
Keoi5 kam4jat6 lai4zo2.
He came yesterday.
我買咗三本書。
Ngo5 maai5zo2 saam1 bun2 syu1.
I bought three books.
琴日 is yesterday and 嚟 is to come — neither resembles 昨天 or 来, and both are everyday words.
Not a past tense
The time word says when. 咗 only says the action finished, which is why it turns up happily in sentences about the future.
我食咗飯就去。
Ngo5 sik6zo2 faan6 zau6 heoi3.
I’ll go once I’ve eaten.
Nothing there has happened yet. And a habit takes no 咗 at all, however far in the past it sits — 我以前日日飲咖啡, I used to drink coffee every day.
It disappears under 冇
冇 says the action did not complete, so there is nothing left for 咗 to mark.
我冇食咗飯。
我冇食飯。
The same rule as Mandarin’s 没…了, and the same cause: English keeps its past marking in the negative — didn’t eat still looks past — and neither Chinese language does.
Asking
未 at the end asks whether it has happened yet, and 未 alone is the answer for not yet.
你食咗飯未呀?
Nei5 sik6zo2 faan6 mei6 aa3?
Have you eaten?
Answer with 食咗 or 未。
咗 and 了 are not quite the same shape
Mandarin has a second 了 at the end of a sentence, marking a change of state. Cantonese splits that job across several particles instead — 喇, 囉, 嘞 — so 咗 is only ever the verb-suffix one, and there is no ambiguity of the kind Mandarin learners spend months untangling.