HÀM

1.     Khai báo

Hàm hay th tc là mt kiu d liu cho phép thc thi mt hay nhiu câu lnh mt cách riêng bit bng cách gi đến và truyn tham s. Th tc này đưc sinh ra nhm mang tính tái s dng li mt đon code có sn giúp lp trình viên tiết kim thi gian mà không phi code đi code li nhiu ln.

Ngoài ra, hàm hay th tc ch đưc mang mt chc năng và ch đưc mang đúng mt chc năng đó mà thôi.

Cú pháp:

1

2

3

4

5

<Quyền truy cập> <Kiểu trả về> Tên hàm (<Tham số>) 

      // Thân hàm

      // Giá trị trả về;

}

Trong đó:

·       Tên hàm: Nó là mt tên duy nht đưc s dng đ gi hàm. Ví d: getValue(), Add(int a, int b)...

·       Kiu tr v: Nó đưc s dng đ ch rõ kiu d liu ca hàm đưc tr v.

·       Thân hàm: Nó là khi lnh s đưc thc thi khi hàm đưc gi.

·       Quyn truy cp: Nó đưc s dng đ xác đnh kh năng truy cp hàm trong ng dng.

·       Tham s: Nó là mt danh sách các tham s mà chúng ta truyn vào khi gi hàm

Lưu ý: Kiu tr v, quyn truy cp và tham s là không bt bucphi có khi đnh nghĩa hàm.

2.     Ví dụ về hàm

Hàm không có tham số và kiểu trả về

Ví d

using System; 

namespace ConsoleApp2

{

    class Program

    {

        void print()

        {

            Console.WriteLine("------muc dich ham chi in chu ra man hinh khong can tham so va kieu tra ve-----");

        }

        static void Main(string[] args)

        {

            Console.WriteLine("Goi ham print:");

            Program p = new Program();

            p.print();

            Console.ReadKey();

        }

    }

}

Và kết qu sau khi thc thi đon code kết:

csharp function ex1 PNG

Hình 1.11. Kết quả gọi hàm

Hàm có tham số nhưng không có kiểu trả về

Ví d

using System;

namespace ConsoleApp2

{

    class Program

    {

        void print(string name)

        {

            Console.WriteLine("---------------Xin chao: " + name + "---------------------");

        }

        static void Main(string[] args)

        {

            Console.WriteLine("Goi ham print:");

            Program p = new Program();

            p.print("Viet Tut");

            Console.ReadKey();

        }

    }

}

Và kết qu sau khi thc thi đon code trên:

csharp function ex2 PNG

Hàm có tham số và có kiểu trả về

Ví d

using System;

namespace ConsoleApp2

{

    class Program

    {

        string print(string name)

        {

            return "-----------Xin chao: " + name + "------------";

        }

        static void Main(string[] args)

        {

            Console.WriteLine("Goi ham print:");

            Program p = new Program();

            string name = p.print("Viet Tut");

            Console.WriteLine(name);

            Console.ReadKey();

        }

    }

}

Và kết qu sau khi thc thi đon code trên:

csharp function ex3 PNG

Như vy là chúng ta đã cùng tìm hiu v hàm là gì, ví d mt s loi hàm. Phn tiếp theo mình cùng tìm hiu mt phn quan trong đó là cách gi hàm có tham s.

3.     Cách gọi hàm có tham số

Trong c# có 3 cách gi hàm đó là gi bng giá tr (call by value), gi bng tham chiếu (call by Reference) và dùng tham s out.

Gọi bằng giá trị (call by value)

Trong C#, gi bng giá tr tc là tham s truyn vào là bn sao ca giá tr gc, vì vy dù cho bên trong thân hàm có thay đi giá tr ca tham s truyn vào thì sau khi kết thúc gi hàm thì giá tr gc vn không thay đi.

Trong ví d sau, chúng ta truyn tham s giá tr khi gi hàm:

Ví d

using System;

namespace ConsoleApp2

{

    class Program

    {

        public void Print(int val)

        {

            val += val; 

            Console.WriteLine("Gia tri ben trong ham: " + val); 

        }

 

        static void Main(string[] args)

        {

            int val = 100;

            Program p = new Program();

            Console.WriteLine("Gia tri truoc khi goi ham: " + val);

            p.Print(val);           

            Console.WriteLine("Gia tri sau khi goi ham: " + val);

            Console.ReadKey();

        }

    }

}

Và kết qu sau khi thc thi đon code trên:

csharp function ex4 PNG

Hình 1.12. Minh họa gọi hàm bằng giá trị

Gọi bằng tham chiếu (call by Reference)

C # cung cp mt t khóa ref đ truyn đi si dng tham chiếu. Tc là tham s truyn vào bng đa ch ô nh ca biến gc vì vy bên trong thân hàm thay đi giá tr tham s truyn vào thì giá tr gc cũng thay đi theo..

Ví d

using System;

namespace ConsoleApp2

{

    class Program

    {

        public void Print(ref int val)

        {

            val += val; 

            Console.WriteLine("Gia tri ben trong ham: " + val); 

        }

 

        static void Main(string[] args)

        {

            int val = 100;

            Program p = new Program();

            Console.WriteLine("Gia tri truoc khi goi ham: " + val);

            p.Print(ref val);           

            Console.WriteLine("Gia tri sau khi goi ham: " + val);

            Console.ReadKey();

        }

    }

}

Và kết qu sau khi thc thi đon code trên:

csharp function ex5 PNG

Hình 1.13. Minh họa gọi hàm bằng tham chiếu

Tham số out

Tham s out ging như kiu tham chiếu, ngoi tr vic nó không yêu cu biến khi to trưc khi truyn.

Ví d

using System;

namespace ConsoleApp2

{

    class Program

    {

        public void Print(out int val)

        {

            int val1 = 100;

            val = val1; 

            Console.WriteLine("Gia tri ben trong ham: " + val); 

        }

 

        static void Main(string[] args)

        {

            int val = 20; ;

            Program p = new Program();

            Console.WriteLine("Gia tri truoc khi goi ham: " + val);

            p.Print(out val);           

            Console.WriteLine("Gia tri sau khi goi ham: " + val);

            Console.ReadKey();

        }

    }

}

Và kết qu sau khi thc thi đon code trên:

csharp function ex6 PNG

Hình 1.14. Minh họa gọi hàm bằng tham số out

Như vy mình ch cn phân bit ref và out như sau:

ref:

·       Giá tr phi đưc khi to trưc

·       Bên trong thân hàm có th đc vào thay đi giá tr

out:

·       Giá tr không đưc khi to trưc và bên trong thân hàm không đc đưc nó cho đến khi nó đưc gán giá tr

·       Hàm phi gán giá tr cho biến out trưc khi tr giá tr v