Jaunais vilnis - Labās ziņas parametros

Aplūkojot sīkāk jaunās valodas versijas iespējas uzdūros ļoti labai ziņai par metodes parametriem. Heljsberga kungs šo programmēšanas valodas jauno iespēju nosauca par nemitīgu lietotāju jeb patērētāju spiediena rezultātu :)

Tātad visu pēc kārtas. Notiekti ka esiet rakstījuši bāzes metodi, piemēram, ar 3 parametriem:

 

static void MethodWithParameters(Guid id, string name, int type)
{
    Console.WriteLine(string.Format("id={0}, name={1}, type={2}", id, name, type));
}

 

un attiecīgi savas metodes patērētājiem piedāvājuši dažādus saīsinošos ceļus, lai izmantotu šo metodi:

 

static void MethodWithParameters(Guid id)
{
    MethodWithParameters(id, null, 1);
}

 

static void MethodWithParameters(Guid id, string name)
{
    MethodWithParameters(id, name, 1);
}

 

Šoreiz C# 4.0 versijā ir labi jaunumi - neobligātie parametri!

Metode ar neobligātajiem parametriem jaunajā valodas versijā izskatās šādi:

 

static void MethodWithOptionalParameters(Guid id,
                                         string name = null,
                                         int type = 1)
{
    Console.WriteLine(string.Format("id={0}, name={1}, type={2}", id, name, type));
}

 

Vienkārši jau metodes definēšanas laikā nosaka paramtru vērtības (gluži kā SQL).

Otra pozitīvais jaunums ir, ka līdz ar neobligātajiem parametriem, nāk klāt arī named parameters jeb parametru vērtību nodošana mainīgā secībā. Piemēram, neobligāto parametru vērtību norādīšanai nav svarīga secībā, kādā tie tiek norādīti metodes izsaukumā:

 

static void Main(string[] args)
{
    MethodWithOptionalParameters(Guid.Empty);
    MethodWithOptionalParameters(Guid.NewGuid(), type: 2);
    MethodWithOptionalParameters(Guid.Empty, type: 2, name: "This is a name");
}

 

Nododamā parametra vērtība tiek atzīmēta ar parametra nosaukumu, kam seko kols (":") un parametra vērtība.

Runājot, ka šim visam nav nekāda run-time overkilla un attiecīgās metodes izsaukums tiek noteiks jau kopilācijas laikā. Lai par to pārliecinātos, aplūkošim šīs Main metodes kompilēto versiju ar .Net Reflector rīka palīdzību:

 

private static void Main(string[] args)
{
    MethodWithOptionalParameters(Guid.Empty, null, 1);
    int CS$0$0000 = 2;
    MethodWithOptionalParameters(Guid.NewGuid(), null, CS$0$0000);
    CS$0$0000 = 2;
    string CS$0$0001 = "This is a name";
    MethodWithOptionalParameters(Guid.Empty, CS$0$0001, CS$0$0000);
}


 

Kā redzams, tad parametri vērtības tiek noteiktas jau kompilācijas laikā.

Šīs ir diezgan labas ziņas, manuprāt :)

Jāpiemin gan, ka dažās funkcionālajās programmēšanas valodās vārdā neminot, šī iespēja jau bija paredzēja manuprāt pirmajās versijās :))

 

CL-USER 1 > (defun keyword-example (a b c &key d (e 22)) (list a b c d e))
KEYWORD-EXAMPLE

CL-USER 2 > (keyword-example 1 2 3 :d 4)
(1 2 3 4 22)

CL-USER 3 > (keyword-example 1 2 3)
(1 2 3 NIL 22)

CL-USER 4 > (keyword-example 1 2 3 :e 4)
(1 2 3 NIL 4)

 

 

 

Cerams, ka noderēs!

____________________________________

Published Friday, November 07, 2008 8:31 AM by valdis.iljuconoks

Comments

# re: Jaunais vilnis - Labās ziņas parametros

Šī te ir ilgi gaidītā iespēja. Atvadāmies ar vienādu nosaukumu metodēm, kurām ir atšķirīgi argumenti.

Friday, November 07, 2008 10:21 AM by andrejs.mamontovs

# pOOaOaeJrK

ENhbm5 Say, you got a nice blog post. Much obliged.

Saturday, March 24, 2012 4:15 AM by google+ hangouts

Leave a Comment

(obligāts) 
(obligāts) 
(brīvizvēles)
(obligāts)