指定BOTH操作对象的函数并返回一个值,与前者或后者的函数形成对比?

时间:2018-05-06 02:00:10

标签: terminology

很久以前,我发现有这个名称,但现在我忘记了。如果标题有误导性,请告诉我。

例如,C#中的IEnumerator有一个函数MoveNext(),它将枚举数推进到其集合的下一个元素,你可以用它来移动到下一个元素和/或检查是否有下一个元素元素,因为它返回bool。

MoveNext()不仅限于一个用例,例如只在其体内执行某些操作的空洞,或仅返回值的函数。

具有这种无限制使用的其他方法:

  • HashSet的Add,如果元素已经存在,则返回bool,但只能用于尝试添加元素。
  • Stack's Pop,返回最后一个对象并移动结构。
  • 队列的Dequeue,对Stack而言相同,但返回第一个对象。

这种方法多次使用的一个小例子:

public class Example
{
    Queue<int> testQueue;

    public Example()
    {
        testQueue = new Queue<int>();
        testQueue.Enqueue(1);
        testQueue.Enqueue(2);
        testQueue.Enqueue(3));
        testQueue.Enqueue(4);

        /// As function:
        int v = testQueue.Dequeue(); // I get 1.

        /// As method, just to take the elements out.
        testQueue.Dequeue();
        testQueue.Dequeue();
        // The first element is 4.
    }
}

感谢您的帮助,如果标题有些含糊不清,请原谅我。

2 个答案:

答案 0 :(得分:1)

如果函数除了返回值之外还执行其他操作,则它是具有side effect的函数。没有副作用的函数是pure function

答案 1 :(得分:0)

如果函数操作任何类型的数据结构或对象,则它是具有side effect的函数。如果有任何参数,带副作用的函数不保证返回值对于相同状态和相同参数总是相同。

没有副作用的函数pure function。纯函数,在给定状态和给定参数中将始终返回相同的值。

完整回答你的问题:

  • 非虚空功能改变某些内容是带有副作用的功能
  • 只返回的非空函数是纯函数

这给我们留下了“做某事但不回报任何东西”的功能。根据上面的定义,这样的函数也可能是具有副作用的函数,即使它没有返回任何类型的值。