Nagyszerű kérdések, nagyszerű válaszok! Látjátok feleim?
1. Mi a külömbség a static és a new között/melyiket mikor érdemesebb használni?Azon kívül, amit Dooz kolléga is leírt, hozzátenném, hogy a new dinamikus, míg a static a nevében is benne van, statikus, nem változó, egy meghatározott értéket szokás tárolni benne, amit utána nem módosítunk.
2. Ha két lehetőségünk van, érdemesebb if-et vagy switch-et használni? Ha az if érdemesebb, hány lehetőségtől preferálandó a switch?Itt sajnos nem érthetek egyet Doozzal. Nem feltétlenül darabszám kérdése a felhasználás módja. A vizsgálandó elem értékétől is függ, illetve hogy olvasható legyen a kód. Közelítsük meg érték szerint a témát, mivel ez a lényege. Case feltételt akkor szokás használni, ha pontosan tudjuk, mit kell vizsgálnunk.
Kód:
switch(var) {
case 0, 1: vagy 0, vagy 1; break;
case 2: biztosan 2; break;
default: minden más esetben, ha a fenti esetek nem igazak;
}
Ez if-fel is megoldható persze:
Kód:
if(var == 0 || var == 1)
vagy 0, vagy 1;
else if (var == 2)
biztosan 2;
else
minden más esetben, ha a fenti feltételek nem igazak;
Melyik a rövidebb, melyik a gyorsabb?
Na látod.
Azonban nem mindig érdemes esetvizsgálatot végrehajtani, főleg akkor nem, amikor több esetben is ugyan azt akarjuk csinálni.
Itt van még egy példa. Az értékeket pontosan tudjuk.
Kód:
switch(var) {
case 0: TODO1; break;
case 1: TODO1; break;
case 2: TODO2; break;
case 3: TODO2; break;
case 4: TODO2; break;
case 5: TODO3; break;
default: NOT_TO_DO;
}
Kód:
if(var == 0 || var == 1) /*vagy ha tartományban akarunk gondolkodni, akkor*/ if(0 <= var <= 1)
TODO1;
else if (var == 2 || var == 3 || var == 4) /* vagy */ if(2 <= var <= 4)
TODO2;
else if (var == 5)
TODO3;
else
NOT_TO_DO;
Melyik a szebb, könnyebben olvashatóbb? Na látod. Szerintem is a második.
Szóval ez a kérdés nagyban függ a megoldandó feladattól. Nincs konkrét szabály, mikor mit kell használni. Mikor mit érdemes viszont van.
Az utolsó példánál maradjunk.
Mit csinál a switch?
Kód:
Az érték 0? Nem. Tovább.
Az érték 1? Nem. Tovább.
Az érték 2? Nem. Tovább.
Az érték 3? Igen. Végrehajtás. Stop, ne vizsgálja tovább.
Mit csinál az if?
Kód:
Az érték 0 vagy 1? Nem. Tovább. VAGY, amit írtam. Az érték 0-val nagyobb vagy egyenlő és 1-nél kisebb vagy egyenlő? Nem. Tovább.
Az érték 2 vagy 3 vagy 4? Igen. VAGY, amit írtam. Az érték 2-nél nagyobb vagy egyenlő és 4-nél kisebb vagy egyenlő? Igen. Végrehajtás. Kilépés a feltételből.
Melyik használ több erőforrást? Szerintem is az első. Ez rossz. Törekedjünk a minél gyorsabb megvalósításra.
Remélem így már átlátod és te is tudsz dönteni.
3. Mi egyenlő a halmazoknál lévő "elem" kifejezéssel? Tehát, tegyük fel, hogy van egy halmazunk, benne 5 szám, akkor hogy írjuk meg, hogy ha x eleme annak a halmaznak akkor történjen valami?Dooooooooooooooooooz. Keresés progtétel. While ciklus és ellenőrzés.
Kód:
new i = 0; // Definiáljuk a ciklusváltozót.
while (i < halmaz mérete && halmaz[i] != 5) // Ha a ciklusváltozó kisebb, mint a keresett halmaz mérete és ha a halmaz i. eleme nem egyenlő 5-tel
i++; // Nem talááált. Keresünk tovább.
// Ha a ciklus valamelyik feltétele igaz lesz, a program ki fog lépni a ciklusból. A ciklusváltozó fogja megmondani az eredményt.
if(i < 5) // Ha a ciklusváltozó kisebb maradt, mint a halmaz mérete, azaz nem ért végig, a feltétel nem teljesült és találtunk egy olyan elemet, aminek értéke 5.
Benne van a keresett szám a halmazban;
else // A program végig ért a cikluson, azaz nincs olyan elem, aminek értéke 5.
Nincs benne a keresett szám a halmazban;
Azonban ha listát, array-t használunk, arra van függvény:
ArrayFindValue vagy
ArrayFindStringKód:
ArrayFindValue(Array:which, any:item);
which - Array handle - azaz melyik array-ben
item - Value to search for - melyik érték veszi fel az értéket
Return - Array index on success, -1 if the value can't be found. A visszatérési érték az elem indexe lesz, ellenkező esetben, ha nem talált, -1.
Ennek felhasználására egy példa:
Kód:
new i = ArrayFindValue(Array, 5);
if (i != -1)
FOUND!;
else
NOT_FOUND;
Remélem ez is hasznodra válik. Progtételt tessék megtanulni!
4. Ügye van a switch-nél egy felsorolás, ( pl. case 1..9: ) alkalmazható ez, vagy bármi hasonló máshol, a for/while leszámításával? Elsősorban nekem az index jutott eszembe, ( [1..9] ez nem egy működő dolog ügyebár ) de akár ez halmazoknál működhet valamilyen módon? ( if(x */ide jönne az elem kifejezés*/ (1..9)) )While-ban nem használhatsz esetvizsgálatra ciklust. Ezért jobb tartományban gondolkodni, amit fentebb is leírtam, lásd 2. kérdést.
5. Mikor érdemes public-ot rakni és miért? Sokszor volt, hogy nem használtam egy-két helyen, de érdekelne, hogy mi a külömbség.Helyes Dooz válasza. Habár a CPU használat ennél az esetnél elhanyagolható. Kivéve ha egy másik plugin végtelen ciklusban hivatkozik a függvényre. Az para.
6. Érdemesebb sok, kicsi, incekkel összekötött plugint csinálni vagy egy nagyot, ami akár elérheti az 5-6ezer sort? Az, hogy ilyen módon kötöm össze a pluginokat nem növeli a ram/memória használatot?Sok kicsi sokra megy.
Jobban átláthatóbb a kód, te is jobban eligazodsz egy rendesen felépített struktúrán, mint egy tízezer soros kódon.
Az erőforrás használata attól függ, hogy írják meg a kódot.