Local Function

ภัทชรัตน์ ดวงตา 650710575

Local Function ถูกนำเข้ามาใช้ใน C# 7.0 คือ Function ที่ถูกสร้างอยู่ใน Function หลัก เพื่อใช้ทำงานเฉพาะตัวของ Local Function นั้นๆ โดยจะช่วยให้โค้ดมีความเป็นระเบียบและอ่านง่าย

  • Local Function สามารถประกาศและเรียกใช้ได้จากเมธอด, คอนสตรัคเตอร์, Property accessors, Event accessors, Anonymous methods, Lambda expressions, Finalizers และ Local Function อื่นๆ

  • ไม่สามารถประกาศ Local Function ใน expression-bodied member ได้

  • Local Function สามารถเข้าถึงตัวแปรและพารามิเตอร์ของ Function หลักได้

  • Modifiers ที่สามารถใช้กับ Local Function คือ async, unsafe, static และ extern

  • ไม่สามารถใช้ private กับ Local Function ได้เพราะตัว Local Function เป็น private อยู่แล้ว และไม่สามารถทำให้เป็น public ได้

  • ไม่สามารถใช้การ Overloading กับ Local Function ได้

  • มี Local Function หลายตัวได้

  • ไม่สามารถใช้ Attribute กับ Local Function รวมทั้งพารามิเตอร์และประเภทพารามิเตอร์ของมัน

C# Local Function Syntax

<modifiers> <return-type> <method-name> <parameter-list>

Example

// C# program to illustrate local function
using System;
 
public class Program {
 
    // Main method
    public static void Main()
    {
        // Local Function
        void AddValue(int a, int b)
        {
            Console.WriteLine("Value of a is: " + a);
            Console.WriteLine("Value of b is: " + b);
            Console.WriteLine("Sum of a and b is: {0}", a + b);
            Console.WriteLine();
        }
 
        // Calling Local function
        AddValue(20, 40);
        AddValue(40, 60);
    }
}

Output

Value of a is: 20
Value of b is: 40
Sum of a and b is: 60

Value of a is: 40
Value of b is: 60
Sum of a and b is: 100

เปรียบเทียบกับภาษา Java/C/Python

Java

ในภาษา Java จะไม่มี Local Function โดยตรงแต่จะสามารถทำเลียนแบบ Local Function ได้โดยใช้ inner classes, anonymous classes และ lambda expressions ในตัวอย่างที่นำมาเสนอจะเป็นการใช้ lambda expressions เพื่อหาค่าแฟกทอเรียล

C

ในภาษา C ก็ไม่มี Local Function เช่นเดียวกับภาษา Java แต่ก็สามารถใช้วิธีอื่นเพื่อมาทดแทน Local Function ได้ คือ static function, การใช้ Macros และ Function Pointers ตัวอย่างเป็นการใช้ Function Pointers เพื่อเป็นการจำลอง Local Function ส่วนนี่คือส่วนที่เป็น Local Function

int factorial(int x) {
        if (x == 0 || x == 1) {
            return 1;
        } else {
            return x * factorial(x - 1);
        }
    }

Python

ในภาษา Python มี Local Function ให้ใช้งานเหมือนกับ C# แต่จะเป็น Function คืนค่า dictionary ที่มีข้อมูลชื่อและค่าของตัวแปรที่อยู่ในขอบเขตของ Function หลัก โดยมี Syntax คือ

locals()

และ Local Function ใน Python ไม่ต้องมีการรับพารามิเตอร์ใดๆ

ในตัวอย่างจะมีการเรียกใช้ locals() เพื่อดึงค่าตัวแปร n ที่ส่งเข้ามาในพารามิเตอร์มาดำเนินการหาแฟกทอเรียลของ 5

import java.util.function.Function;

public class LambdaExample {
    public static void main(String[] args) {
        Function<Integer, Integer> nthFactorial = createFactorialFunction();

        // เรียกใช้ฟังก์ชันและแสดงผลลัพธ์
        System.out.println(nthFactorial.apply(5));  // Output: 120
    }

    // สร้างฟังก์ชันแฟกทอเรียลแบบ lambda expression
    private static Function<Integer, Integer> createFactorialFunction() {
        return new Function<Integer, Integer>() {
            @Override
            public Integer apply(Integer n) {
                return n < 2 ? 1 : n * this.apply(n - 1);
            }
        };
    }
}

120

VDO & Slide

อ้างอิง

GeeksforGeeks. (n.d.). Local function in C#. GeeksforGeeks. Retrieved October 15, 2024, from https://www.geeksforgeeks.org/local-function-in-c-sharp/

  • ตัวอย่างและเนื้อหา

Microsoft. (n.d.). Local functions. In C# programming guide. Retrieved October 15, 2024, from https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/local-functions

  • ตัวอย่างและเนื้อหา

  • C# Local Function Syntax

Toppr. (n.d.). Python locals. Retrieved October 15, 2024, from https://www.toppr.com/guides/python-guide/references/methods-and-functions/methods/built-in/locals/python-locals/

  • Local Function ใน Python

Last updated