What is the difference between a function and a subroutine?

前端 未结 11 1558
攒了一身酷
攒了一身酷 2021-01-30 06:32

What is the difference between a function and a subroutine? I was told that the difference between a function and a subroutine is as follows:

A function takes parameters

相关标签:
11条回答
  • 2021-01-30 07:23

    I am writing this answer from a VBA for excel perspective. If you are writing a function then you can use it as an expression i. e. you can call it from any cell in excel.

    eg: normal vlookup function in excel cannot look up values > 256 characters. So I used this function:

    Function MyVlookup(Lval As Range, c As Range, oset As Long) As Variant
      Dim cl As Range
      For Each cl In c.Columns(1).Cells
      If UCase(Lval) = UCase(cl) Then
      MyVlookup = cl.Offset(, oset - 1)
      Exit Function
      End If
      Next
    End Function
    

    This is not my code. Got it from another internet post. It works fine.

    But the real advantage is I can now call it from any cell in excel. If wrote a subroutine I couldn't do that.

    0 讨论(0)
  • 2021-01-30 07:28

    If we talk in C, C++, Java and other related high level language:

    a. A subroutine is a logical construct used in writing Algorithms (or flowcharts) to designate processing functionality in one place. The subroutine provides some output based on input where the processing may remain unchanged.

    b. A function is a realization of the Subroutine concept in the programming language

    0 讨论(0)
  • 2021-01-30 07:28

    Yes, they are different, similar to what you mentioned.

    A function has deterministic output and no side effects.
    A subroutine does not have these restrictions.

    A classic example of a function is int multiply(int a, int b)
    It is deterministic as multiply(2, 3) will always give you 6.
    It has no side effects because it does not modify any values outside its scope, including the values of a and b.

    An example of a subroutine is void consume(Food sandwich)
    It has no output so it is not a function.
    It has side effects as calling this code will consume the sandwich and you can't call any operations on the same sandwich anymore.

    You can think of a function as f(x) = y, or for the case of multiply, f(a, b) = c. Yes, this is programming and not math. But math models and begs to be used. So we use math in cs. If you are interested to know why the distinction between function and subroutine, you should check out functional programming. It works like magic.

    0 讨论(0)
  • 2021-01-30 07:29

    Based on Wikipedia subroutine definition:

    In computer programming, a subroutine is a sequence of program instructions that perform a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed.

    Subroutines may be defined within programs, or separately in libraries that can be used by many programs. In different programming languages, a subroutine may be called a procedure, a function, a routine, a method, or a subprogram. The generic term callable unit is sometimes used.

    In Python, there is no distinction between subroutines and functions. In VB/VB.NET function can return some result/data, and subroutine/sub can't. In C# both subroutine and function referred to a method.

    Sometimes in OOP the function that belongs to the class is called a method.

    There is no more need to distinguish between function, subroutine and procedure because of hight level languages abstract that difference, so in the end, there is very little semantic difference between those two.

    0 讨论(0)
  • 2021-01-30 07:34

    Both function and subroutine return a value but while the function can not change the value of the arguments coming IN on its way OUT, a subroutine can. Also, you need to define a variable name for outgoing value, where as for function you only need to define the ingoing variables. For e.g., a function:

    double multi(double x, double y) 
    {
      double result; 
      result = x*y; 
      return(result)
    }
    

    will have only input arguments and won't need the output variable for the returning value. On the other hand same operation done through a subroutine will look like this:

    double mult(double x, double y, double result) 
    {
      result = x*y; 
      x=20; 
      y = 2; 
      return()
    }
    

    This will do the same as the function did, that is return the product of x and y but in this case you (1) you need to define result as a variable and (2) you can change the values of x and y on its way back.

    0 讨论(0)
提交回复
热议问题