Nice solution @Carlo 
Your transfer event and corresponding emit statement are both well coded. The emit statement is in the correct position in the transfer() function body and will log appropriate data when the transfer() function is successfully executed.
This is good thinking, but while a user who tries to transfer a 0 amount will save themselves a small amount of gas, you also need to consider that all other transfers (of amounts greater than 0) will now consume slightly more gas due to the additional require statement that needs to be executed. The amounts of gas involved will be very small, but if transferring 0 does not cause any issues apart from a slight inconvenience to the sender, you need to ask yourself whether the potential frequency of 0 transfers justifies all transfers having a slightly higher gas cost.
Let me emphasise that there is no right or wrong answer here. Each case needs to considered individually. It’s good, though, that you are already thinking about the impact our choice of smart-contract code will have on gas consumption, as this is something we should always take into consideration.
Just let me know if you have any questions 