函数设计原则有哪些