what's the use of edge made by 'f'?
One case where I've used F on a face is when I want to create a new object starting from some of my pre-existing geometry. By using F then P, you get an edge that won't affect original mesh when you separate it out. In the case that you just added a new object, you would've had to snap the vertices onto the old object to line things up. While it doesn't save a lot of time, the little things do add up.



Also, trying to create a check for "don't fill in the edge if the two vertices are part of the same face" can become problematic very quickly.

Take this example below: I want to fill in an edge between these two vertices. They're all part of the same big n-gon and I clearly want a new edge, but a blatant, "don't fill in an edge if the vertices are part of the same face" block would prevent me from adding the edge entirely.



There are many cases where it's better for the devs to design Blender in a way that helps prevent users from making mistakes. However, in cases like this one, it's probably better for the user to avoid making mistakes rather than having the devs try to do the thinking for you. It's more likely that the devs will introduce bugs, and it isn't worth the time to implement when there are many other bugs and features that they could/are working on (in my opinion).