Nóta
Aðgangur að þessari síðu krefst heimildar. Þú getur prófað aðskrá þig inn eða breyta skráasöfnum.
Aðgangur að þessari síðu krefst heimildar. Þú getur prófað að breyta skráasöfnum.
Athugið
Hagsmunahópar samfélagsins hafa nú færst frá Yammer yfir í Microsoft Viva Engage. Til að ganga í Viva Engage samfélag og taka þátt í nýjustu umræðum skaltu fylla út eyðublaðið Biðja um aðgang að Finance and Operations Viva Engage Community og velja samfélagið sem þú vilt ganga í.
Þessi grein lýsir virknitáknunum sem studdir eru í X++.
Virkjar úthlutunar
Úthlutun breytir gildi breytu eða svæðis. Eftirfarandi tafla sýnir X++ úthlutunarvirkjana. Það er enginn munur á forskeyti og postfix virkjum.
| Stjórnandi | lýsing |
|---|---|
= |
Úthluta segðinni hægra megin við jöfnunarmerkið á breytuna vinstra megin. |
+= |
Úthluta gildi núverandi breytu auk segðarinnar hægra megin á breytuna vinstra megin. |
++ |
Hækkaðu breytuna um 1. |
-= |
Úthluta gildi núverandi breytu að frádregnum segðinni hægra megin á breytuna vinstra megin. |
-- |
Lækkaðu breytuna um 1. |
Dæmi um kóða fyrir úthlutunarvirki
// An example of assignment operators and their output.
static void Example1()
{
int i = 1;
// Using the = operator. i is assigned the value of i, plus 1. i = 2.
i = i + 1;
info(strFmt("Example 1: The result is "), i); // The result is 2.
}
static void Example2()
{
int i = 1;
// Using the += operator. i is assigned the value of i, plus 1.
// i = 2 (i = i + 1).
i += 1;
info(strFmt("Example 2: The result is "), i); // The result is 2.
}
static void Example3()
{
int i = 1;
// Using the ++ operator. i is incremented by 1, and then
// by 1 again in the second statement. The final value of i is 3.
i++;
++i;
info(strFmt("Example 3: The result is "), i); // The result is 3.
}
static void Example4()
{
int i = 1;
// Using the -= operator. i is assigned the value of i minus 1.
// i = 0 (i = i - 1).
i -= 1;
info(strFmt("Example 4: The result is "), i); // The result is 0.
}
static void Example5()
{
int i = 1;
// Using the -- operator. i is decremented by 1, and then by
// 1 again in the second statement. The final value of i is -1.
i--;
--i;
info(strFmt("Example 5: The result is "), i); // The result is -1.
}
Reiknivirkjar
Reiknivirki eru notuð til að framkvæma tölulega útreikninga. Flestir rekstraraðilarnir eru tvöfaldir og taka tvo óperanda. Hins vegar er not (~) rekstraraðilinn einur og tekur aðeins einn óperanda. Setningafræði fyrir tvíundarvirkja: tjáning1ArithmeticOperator-tjáning2 Setningafræði fyrir einvirka virkja: ArithmeticOperator-tjáning1
| Stjórnandi | lýsing |
|---|---|
<< |
Vinstri vaktarvirkinn framkvæmir tjáning2 vinstri vakt (margföldun með 2) á tjáningu1. |
>> |
Hægri vaktarvirkinn framkvæmir tjáning2 hægri skiptingu (deiling með 2) á tjáningu1. |
* |
Margföldunarvirkinn margfaldar tjáning1 með tjáningu2. |
/ |
Deilivirkinn deilir tjáning1 með tjáningu2. |
DIV |
Rekstraraðili heiltöludeilingar framkvæmir heiltöluskiptingu á tjáningu1 með tjáningu2. |
MOD |
Rekstraraðili heiltöluafgangsins skilar afganginum af heiltöluskiptingu tjáningar1 með tjáningu2. |
~ |
Ekki rekstraraðili, eða unary rekstraraðili, framkvæmir tvíundaraðgerð ekki. |
& |
Tvöfaldur AND virkinn framkvæmir tvíundaraðgerð á tjáningu1 og tjáningu2. |
^ |
Tvöfaldur XOR virkinn framkvæmir tvöfalda XOR-aðgerð á tjáningu1 og tjáningu2. |
| |
Tvöfaldur OR virki framkvæmir tvíundar- eða aðgerð á tjáning1 og tjáning2. |
+ |
Plús virkinn bætir segði1 við segð2. |
- |
Mínusvirkinn dregur tjáning2 frá tjáningu1. |
? |
Þrískiptur virki tekur þrjár tjáningar: tjáning1 ? tjáning2 : tjáning3. Ef tjáning1 er sönn er tjáning2 skilað. Annars er tjáning3 skilað. |
Dæmi um kóða fyrir reiknivirki
int a = 1 << 4; // Perform four left shifts on 1 (1*2*2*2*2). a=16.
int b = 16 >> 4; // Perform four right shifts on 16 (16/2/2/2/2). b=1.
int c = 4 * 5; // Multiply 4 by 5. c=20.
int d = 20 / 5; // Divide 20 by 5. d=4.
int e = 100 div 21; // Return the integer division of 100 by 21. e=4 (4*21 = 84, remainder 16).
int f = 100 mod 21; // Return the remainder of the integer division of 100 by 21. f=16.
int g = ~1; // Binary negate 1 (all bits are reversed). g=-2.
int h = 1 & 3; // Binary AND. Return the bits that are in common in the two integers. h=1.
int i = 1 | 3; // Binary OR. Return the bits that are set in either 1 or 3. i=3.
int j = 1 ^ 3; // Binary XOR. Return the bits that are set in 1 and NOT set in 3, and vice versa. j=2.
int k = 1 + 3; // Add 1 and 3. k=4.
int l = 3 - 1; // Subtract 1 from 3. l=2.
int m = (400 > 4) ? 1 : 5; // If 400>4, 1 is returned. Otherwise, 5 is returned. Because 400>4, 1 is returned. m=1.
Tjáð virknitákn
Og segðarvirkin asis stjórna niðursveifluúthlutunum. Downcast verkefni fela í sér bekkjar- eða borðarfleifð. Úthlutunaryfirlýsingar sem draga óbeint úr geta valdið villum sem erfitt er að spá fyrir um og greina. Þú getur notað lykilorðið as til að gera niðursveiflur þínar skýrar. Þú getur notað lykilorðið is til að prófa hvort niðursveifla sé gild á keyrslutíma.
Sem leitarorð
Notaðu lykilorðið as fyrir verkefni sem lækka úr grunnklasabreytu í afleidda klasabreytu. Lykilorðið as segir öðrum forriturum og þýðandanum að þú teljir að niðursveiflan verði gild á keyrslutíma.
- Þýðandinn tilkynnir um villu fyrir niðurdregnar úthlutunaryfirlýsingar sem skortir lykilorðið
as. - Á keyrslutíma veldur lykilorðið
asþví að niðursláttarúthlutunaryfirlýsingunni er úthlutaðnullef niðurlagið er ekki gilt. - Þetta
isleitarorð er oft notað til að prófa á öruggan hátt hvort leitarorðið virkias.
Kóðadæmi fyrir sem leitarorð
Í eftirfarandi kóðadæmi framlengir DerivedClass klasinn BaseClass . Kóðadæmið inniheldur tvær gildar úthlutanir á milli basec og afleiddra breytna. Upcast úthlutunin til basec krefst ekki leitarorðsins as , en downcast úthlutunin til afleidds krefst leitarorðsins as . Eftirfarandi kóði mun safnast saman og keyra án villna.
static void AsKeywordExample()
{
// DerivedClass extends BaseClass.
BaseClass basec;
DerivedClass derivedc;
// BottomClass extends DerivedClass.
BottomClass bottomc;
derivedc = new DerivedClass();
// AS is not required for an upcast assignment like this.
basec = derivedc;
// AS is required for a downcast assignment like this.
derivedc = basec as DerivedClass;
bottomc = new BottomClass();
// AS causes this invalid downcast to assign null.
bottomc = basec as DerivedClass;
}
Lykilorðið er
Lykilorðið is sannreynir hvort hlutur sé undirtegund tiltekins flokks. Segðin is skilar true ef hluturinn er undirgerð klasans eða ef hluturinn er af sömu gerð og klasinn. Þýðandinn tilkynnir um villu ef is segð leitarorða ber saman tvær gerðir, en hvorug gerðin er undirgerð hinnar og þær eru ekki af sömu gerð. Þýðandinn tilkynnir svipaða villu fyrir allar einfaldar úthlutunaryfirlýsingar milli tveggja gerða, þar sem hvorug tegundin er undirgerð hinnar, og þær eru ekki af sömu gerð. Á keyrslutíma skiptir tegund breytunnar sem vísar til undirliggjandi hlutar ekki máli fyrir leitarorðið is . Lykilorðið is veldur því að kerfið staðfestir hlutinn sem breytan vísar til, ekki uppgefna gerð breytunnar sem vísar í hlutinn.
Dæmi um kóða fyrir er leitarorð
Eftirfarandi kóðadæmi sýna skilyrðin sem stjórna því hvort is segð skilar satt eða ósatt. Kóðadæmin eru háð því að Form flokkurinn og Query bekkurinn framlengja báðir TreeNode flokkinn.
// The compiler issues an error for the following code.
// The compiler ascertains that the Form class and the Query class are not
// part of the same inheritance hierarchy. Both the Form class and the Query class
// extend the TreeNode class, but neither Form nor Query is a subtype of the other.
Form myForm = new Form();
info(strFmt("%1", (myForm is Query)));
// The Infolog displays 0 during run time, where 0 means false. No supertype
// object can be considered to also be of its subtype class.
TreeNode myTreeNode = new TreeNode();
info(strFmt("%1", (myTreeNode is Form)));
// The Infolog displays 0 during run time, where 0 means false. A null
// reference causes the is expression to return false.
Form myForm;
info(strFmt("%1", (myForm is Form)));
// The Infolog displays 1 during run time, where 1 means true.
// An object is an instance of its own class type.
Form myForm = new Form();
info(strFmt("%1", (myForm is Form)));
// The Infolog displays 1 during run time, where 1 means true.
// Every subtype is also of its supertype.
Form myForm = new Form();
info(strFmt("%1", (myForm is TreeNode)));
// The Infolog displays 1 during run time, where 1 means true.
// The type of the underlying object matters in the is expression,
// not the type of the variable that references the object.
Form myForm = new Form();
TreeNode myTreeNode;
myTreeNode = myForm; // Upcast.
info(strFmt("%1", (myTreeNode is Form)));
Kóðadæmi fyrir er og sem leitarorð
Eftirfarandi kóðadæmi inniheldur dæmigerða notkun á leitarorðinu is . Leitarorðið as er notað eftir is að leitarorðið hefur staðfest að leitarorðið nái fram að ganga as . Í þessu dæmi eru leitarorðin og is hástafir as til að gera þau sýnilegri.
static void IsKeywordExample()
{
DerivedClass derivedc;
BaseClass basec;
basec = new DerivedClass(); // An upcast.
if (basec IS DerivedClass)
{
info("Test 1: (basec IS DerivedClass) is true. Good.");
derivedc = basec AS DerivedClass;
}
basec = new BaseClass();
if (!(basec IS DerivedClass))
{
info("Test 2: !(basec IS DerivedClass) is true. Good.");
}
}
//Output to the Infolog
Test 1: (basec IS DerivedClass) is true. Good.
Test 2: (!(basec IS DerivedClass)) is true. Good.
Hlutaflokkur sem sértilvik
Object flokkurinn getur birst sem sérstakt tilvik í erfðsvirkni. Þýðandinn sleppir tegundaathugun fyrir úthlutanir til og frá breytum sem eru sagðar vera af gerðinni Object. Sumir flokkar erfa frá Object flokknum, sumir flokkar erfa frá öðrum flokki og sumir flokkar erfa ekki frá neinum flokki. Þó að Dialog klasinn erfi ekki frá neinum klasa, virka úthlutunar- og kallayfirlýsingar í eftirfarandi kóðadæmi. Hins vegar, ef verkefnið er bank4 = dlog3;, mun það mistakast á samsetningartíma, vegna þess að Bank og Dialog flokkarnir hafa engin erfðatengsl sín á milli. Þýðandinn framkvæmir aðeins eina litla staðfestingu á úthlutunum á breytu sem er sögð vera af Object flokknum. Þýðandinn staðfestir að hluturinn sem verið er að úthluta á Object breytuna sé tilvik af flokki. Þýðandinn leyfir ekki að tilviki af töflubiðminni sé úthlutað á Object breytuna. Að auki leyfir þýðandinn ekki að frumstæðum gagnagerðum, svo sem int eða str, sé úthlutað á Object breytuna.
static void ObjectExample()
{
Bank bank4;
Object obj2;
Dialog dlog3 = new Dialog("Test 4.");
obj2 = dlog3; // The assignment does work.
obj2.run(false); // The call causes the dialog to appear.
info("Test 4a is finished.");
}
Töflur
Allar töflur erfa beint frá töflunni Common system, nema þær erfi sérstaklega frá annarri töflu. Ekki er hægt að setja Common töfluna í gang. Það er ekki til í undirliggjandi líkamlegum gagnagrunni. Common taflan erfir frá xRecord flokknum, en á sérstakan hátt sem er ekki viðeigandi fyrir is leitarorðið eða leitarorðið as . Þegar as leitarorðið er notað til að framkvæma ógilda niðurlagningu á milli taflna vísar markbreytan í ónothæfa einingu sem ekki er núll. Allar tilraunir til að afvísa markbreytunni munu valda villu sem stöðvar forritið.
Er og sem leitarorð og útvíkkaðar gagnategundir
Hver útvíkkuð gagnagerð hefur eiginleikann Útvíkkar . Arfleifðarstíllinn sem þessi eiginleiki stjórnar er frábrugðinn erfðastílnum sem leitarorðin isas og eru hönnuð fyrir.
Venslaðir rekstraraðilar
Eftirfarandi tafla sýnir tengslavirkin sem hægt er að nota í X++. Flestir rekstraraðilarnir eru tvöfaldir og taka tvo óperanda. Hins vegar er not (!) rekstraraðilinn einur og tekur aðeins einn óperanda. Setningafræði fyrir tvíundarvirkja: expression1relationalOperatorexpression2 Setningafræði fyrir einvirka virkja: relationalOperatorexpression1
| Stjórnandi | lýsing |
|---|---|
like |
Eins venslavirkinn skilar true ef expression1 er eins og expression2. |
== |
Jöfn tengslavirki skilar satt ef báðar tjáningarnar eru jafnar. |
>= |
Stærra en eða jafnt og venslavirki skilar satt ef tjáning1 er meiri en eða jöfn tjáning2. |
<= |
Minna en eða jafnt og venslavirki skilar sönn ef tjáning1 er minna en eða jafnt og tjáning2. |
> |
Stærra en venslavirkinn skilar satt ef tjáning1 er meiri en tjáning2. |
< |
Minna en venslavirkinn skilar true ef tjáning1 er minna en tjáning2. |
!= |
Ekki jafnt venslavirkinn skilar true ef tjáning1 er frábrugðin (þ.e. ef hún er ekki jöfn) tjáning2. |
&& |
Rekstraraðilinn og venslan skilar satt ef bæði tjáning1 og tjáning2 eru sönn. |
|| |
Venslavirkinn eða skilar satt ef tjáning1 eða tjáning2 er sönn, eða ef bæði eru sönn. |
! |
Not- eða einvenslavirkinn afneitar tjáningunni. Það skilar satt ef tjáningin er ósönn og ósönn ef tjáningin er sönn. |
Svipaður rekstraraðili
Rekstraraðilinn like getur notað * sem algildisstaf fyrir núll eða fleiri stafi og ? sem algildisstaf fyrir einn staf. Hámarkslengd óperandsins er 1.000 stafir. Virknifyrirtækið like er metið af undirliggjandi SQL, þannig að niðurstaðan gæti verið mismunandi eftir mismunandi uppsetningum. Ef segðirnar sem verið er að bera saman innihalda skráarslóð verður að hafa fjögur baksett skástrik á milli hverrar einingar, eins og sýnt er í eftirfarandi dæmi.
select * from xRefpaths
where xRefPaths.Path like "\\\\Classes\\\\AddressSelectForm"
Jafn (==) rekstraraðili
Þegar þú notar jafnan (==) virkjann til að bera saman hluti eru hluttilvísanirnar bornar saman, ekki hlutirnir sjálfir. Þessi hegðun gæti valdið vandræðum ef þú berð saman tvo hluti, annar þeirra er staðsettur á þjóninum og hinn er staðsettur á biðlaranum. Í þessum tilfellum ættir þú að nota jöfnu aðferðina í Object flokknum. Þú getur hnekkt þessari aðferð til að tilgreina hvað það þýðir að tveir hlutir séu jafnir. Ef þú hnekkir ekki jöfnu aðferðinni er samanburðurinn eins og samanburðurinn sem er gerður af jöfnu (==) virkninni.
Kóðadæmi fyrir venslavirki
"Jones" like "Jo?es" // Returns true, because the ? is equal to any single character.
"Fabrikam, Inc." like "Fa*" // Returns true, because the * is equal to zero or more characters.
(( 42 * 2) == 84) // Returns true, because 42*2 is equal to 84.
today() >= 1\1\1980 // Returns true, because today is later than January 1, 1980.
((11 div 10) >= 1) // Returns true, because 11 div 10 is 1 (therefore, >= 1 is true).
(11<= 12) // Returns true, because 11 is less than 12.
((11 div 10) > 1) // Returns false, because 11 div 10 is 1.
(11 div 10) < 1) // Returns false, because 11 div 10 is 1.
(11 != 12) // Returns true, because 11 is not equal to 12.
(1 == 1) && (3 > 1) // Returns true, because both expressions are true.
Forgangur rekstraraðila
Röðin sem samsett segð er metin í getur verið mikilvæg. Gefur til dæmis (x + y / 100) aðra niðurstöðu, eftir því hvort samlagningin eða skiptingin er gerð fyrst. Þú getur notað sviga (()) til að segja þýðandanum sérstaklega hvernig hann ætti að meta tjáningu. Til dæmis er hægt að tilgreina (x + y) / 100. Ef þú segir þýðandanum ekki sérstaklega röðina sem þú vilt að aðgerðir séu gerðar í, er röðin byggð á forgangi sem er úthlutað til virkja. Til dæmis hefur skiptingarvirkinn hærra forgang en samlagningarvirkinn. Þess vegna, fyrir tjáninguna x + y / 100, metur y / 100 þýðandinn fyrst. Með öðrum orðum, x + y / 100 jafngildir x + (y / 100). Til að gera kóðann þinn auðlesinn og viðhaldið skaltu vera skýr. Notaðu sviga til að gefa til kynna hvaða rekstraraðila ætti að meta fyrst. Í eftirfarandi töflu er listi yfir virknitáknin í forgangsröð. Því hærra sem rekstraraðili birtist í töflunni, því hærra fordæmi hans. Virkniaðilar sem hafa hærri forgang eru metnir á undan rekstraraðilum sem hafa lægri forgang. Athugaðu að forgangur virkjaforgangs X++ er ekki sá sami og forgangur virkjaforgangs annarra tungumála, eins og C# og Java.
| Hópar rekstraraðila, í forgangsröð | Virknitákn |
|---|---|
| Einært | - ~ ! |
| Margföldun, tilfærsla, bitalega OG, bitalega eingöngu OR | * / % DIV << >> & ^ |
| Aukefni, bitalega innifalið OR | + - | |
| Tengsl, jafnrétti | < <= == != > >= like as is |
| Rökrétt (OG,EÐA) |
&&
||
|
| Skildagatíð | ? : |
Rekstraraðilar á sömu línu hafa jafnan forgang. Ef segð inniheldur fleiri en einn af þessum virknitáknum er hún metin frá vinstri til hægri, nema úthlutunarvirknitákn séu notuð. (Verkefnavirkjar eru metnir frá hægri til vinstri.) Til dæmis && hafa (rökrétt AND) og || (rökrétt OR) sama forgang og eru metin frá vinstri til hægri. Þess vegna:
-
0 && 0 || 1er jafnt og1 -
1 || 0 && 0er jafnt og0.