Dažnai eilinės kodo eilutės tampa per daug įgrisusiomis, o paprasti veiksmai iki kaulų smegenų pabodę ir žmogus nejučia pradeda ieškoti išeities.
Tikslas - sutrumpinti ranka įvedamo kodo kiekį. Per daug neišsiplėsiu, bet gal kažkas atras ir sau naudingų dalykų.

Daugialypės pritaikomos klasės ir funkcijos yra pagrindinė priemonė apsisaugoti nuo tų pačių sprendimų ieškojimų kelis kartus. Vieną kartą protingai pasirašome ir nebesukame galvos. Pavyzdžiui, susikūrėme vartotojų klasę. Kam darant kitą darbą, kur bus reikalingas vartotojų modulis, viską pradėti iš naujo? Tiesiog mąstydami apie ateitį atskiriame pagrindinę kodo dalį (galbūt ir užklausas į duomenų bazę) ir išsaugome atskirame faile. Laiko gal ir sugaišome, bet ateityje jis su kaupu atsipirks.

Kaip ir besistengiant naudoti jau anksčiau savo sukurtus modulius, taupant laiką derėtų atsižvelgti ir į kitų žmonių sukurtas sistemas/karkasus. Visgi kiekvieną kartą taupant laiką reikėtų pirma apsižiūrėti ar nesi to daręs pats, o tada žvilgtelėti, ką gali pasiūlyti kiti, nes savo darbą modifikuoti yra žymiai lengviau.

Siekiant sutrumpint kodo ilgį (tuo pačiu ir darbo laiką) praverčia tai, jog yra itin lanksti kalba ir tą patį sprendimo būdą dažnai galima įgyvendinti bent 2 būdais.

if($a==1){
$b=$a;
} else{
$a=$a+1;
$b=$a;
}

Keičiame štai šitokią eilute:

$b=$a==1?$a:++$a;

Viską galima išskaidyti į 2 dalis, tai “$b=” ir “$a==1?$a:++$a;”. pradeda nuo dešiniosios pusės. Tuomet antrąją skaidome į 3 dalis, “$a==1?”, “$a:”, “++$a;” - pirmoji tai if($a==1) atitikmuo, antroji $b=$a atitikmuo ($b pati pirma dalis), trečioji $a=$a+1; $b=$a; atitikmuo, padidina $a reikšmę tiesiogiai ir ją priskiria $b.

$arr=array("obuoliai ", "kriauses ", "vysnios");
$viso=count($arr);
$str=$'';
for($i=0;$i<$viso;$i++]){
$str.=$arr[$i];
}

Keičiame į:

$viso=count($arr=array("obuoliai ", "kriauses ", "vysnios"));
for($str='',$i=0;$i<$viso;$str.=$arr[$i++]);

for ciklas leidžia pateikti jam daugiau nei 1 argumentą atskiriant juos kableliu. Pirmas argumentas kartojamas 1 kartą, kiti 2 ties kiekvienu ciklo žingsniu. Taip pat mes galime nurodyti ir tuščią ciklą, tiesiog viskas vykdoma 3 parametre, aišku nepamirštant padidinti $i reikšmės.

$a=$a+1;
$b=$b+2;

Keičiame į:

$a++;
$b+=2;

Visa tai galioja ir kitiems operatoriams.

$b=1;
$a=$b+2;

Keičiam:

$a=($b=1)+2;

Kur tik įmanoma ir reikalinga stengiamės įsprausti vieną reikšmę į kitą.

for($i=0;$i<10;$i++){
if(($i%2)==2){
$sk=$i.' - lyginis';
} else{
$sk=$i.' - nelyginis';
}
echo $sk;
}

Keičiam:

for($i=0;$i<10;$sk=(++$i%2==0)?$i.' - lyginis':$i.' - nelyginis') echo $sk;

Mažiau rašomo kodo reiškia mažiau darbo, tačiau dažnai dėl to nukenčia skaitomumas. Sutrumpintus skriptus daug sunkiau analizuoti antrą kartą, tad vertėtų žinoti, kada viską reikia trumpinti, o kada ne. Kalbant apie karkasų naudojimą tai vienas realiausių būdų norint sutaupyti laiko, tačiau pagrindinis minusas - esame priklausomi nuo kažkieno kito klaidų.

Panašūs straipsniai


“Rašome glausčiau - taupome laiką” komentarų: 18

  1. asterisk

    Pritariu tavo išvadai - nukenčia skaitomumas. O tavo pateikti kai kurie pavyzdžiai ne labai įskaitomi, bet pati mintis gera :)
    Iš tikrųjų kai kuriais atvejais tas pats pakeitimas į ( .. ) ? .. : ..; yra tikrai geresnis sprendimas.

  2. nohobo

    :) Is dalies programuodamas tu visada pasidarai nedideli karkasa arba turi tikrai daug laiko ir rasai visiskai “plikai” :)
    Apie micro kontroleriu programavima nekalbu cia atskira tema.

  3. Giedrius

    imho typinimas yra maziausiai pastangu reikalaujantis reikalas programavime, juolab kad ide dazniausiai atlieka didziaja dali to typinimo ir taupyti klavisu paspaudimus aukojant skaitomuma tikrai nereiketu.

  4. Eimantas

    Briedas. Taip rašydami daug laiko tikrai nepritaupysime. Be to, kiek žinau $a= ($b=4)+2 taip pat bus trys, nes ($b=4) == 1 (t.y. true, nes priskyrimas pavyko).

  5. tamole

    Už tokį kodą pirštus nukapočiau.


  6. Taupydamaslaiką,pirštus,pelęirresursusbalsavau1balųirrašaubetarpų.

  7. Lukas Steiblys

    Patarimas, kurio geriau nepaklausyti.

  8. ziogas

    “Briedas. Taip rašydami daug laiko tikrai nepritaupysime. Be to, kiek žinau $a= ($b=4)+2 taip pat bus trys, nes ($b=4) == 1 (t.y. true, nes priskyrimas pavyko).”

    Asmeniskai man taip patogiau, o atsakymas 6.

    “Už tokį kodą pirštus nukapočiau.”

    Viskas yra ipratimo reikalas. Vienaip ar kitaip skaitomumas aisku sumazeja bet daznai praktiniai pavyzdziai toli grazu nera tokie neiskaitomi ir painus. Anyway, kiekvienas sprendzia kaip jam geriau kodinti, as uz tvarka, bet rasyt 6 eilutes kur imanoma 1 man atrodo kiek absurdiska

  9. Tadas

    Pritariu, kad ne visur reikia naudoti tokius dalykus.
    Dar vienas geras dalykas funkcijose butu toks:

    if($i = 20)
    return true
    else
    return false

    sita galima pakeisti i tiesiog:

    return $i == 20;

  10. Slave

    turbūt juokauji

  11. ziogas

    Dėkui už Sergej ‘ZaZa’ Kurakin sarkazmą, ar jis vietoj jam jau pačiam reiktų nuspresti, nors Lukas viską suprato teisingai. Kiekvienas renkasi pagal save ir konkrečią situaciją, jei jam tai nepriimtina tai nieko nereiškia. Niekad gyvenime dirbdamas su kitu žmogumi nespausiu for ciklo kišdamas viską į header’į, bet tai mielai padarysiu poros šimtų eilučių tik savo reikmėms skirtame scenarijuje kurį reikėjo pasirašyti “ant smūgio”, man taip greičiau, bet vėlgi, tai įpratimo reikalas.


  12. Ziogas, yra toks geras posakis: nėra nieko pastovesnio, nei laikinas sprendimas. Per savo trumpą programuotojo gyvenimą aš puikiai tuo įsitikinau. Aš sutinku naudoti (naudoju) trumpą kodą tik keičiant labai paprastus “if else” sakinius, kitu atveju visada rašau pilnus sakinius. O kai kurie seno kodo gabalai keliaują su tavo projektais per keletą metų ir tam tikrų laikų jos tikrai išvis kaž-kas, kam tai bus nevisai suprantama, be to, tokius sakinius, kai juose dar yra ir kokia nors sudėtingesnė logika labai sunkų debugint’i.

  13. arturaz

    Nu atsiprashau :)

    Ish tos mesmales tavo per 5 sekundes nieko neimanoma suprast. Pabandyk dirbt su kitais zmonemis ir grust toki koda. Paziuresim kaip pavyks :)

    $foo = (salyga) ? true_rez : false_rez galima naudot

    kaip ir tado mineta return $i == 20; (cia savaime aisku), bet tokius ciklus kaip for($i=0;$i

  14. ElbRus

    nematau prasmes rasyt glausciau

    pagal straipsnio pavadinima tureciau suprast, kad taip greiciau programuosis (galbut kai kuriais atvejais), taciau tikrai ilgiau skaitysis toks dalykas, tad neefektyvu

    man asmeniskai geriausias variantas yra laikytis ‘coding standarts’

  15. Motiejus Jakštys mta

    Kartais reikia tiesiog žinoti jau aprašytą funkciją :)

    $viso=count($arr=array(”obuoliai “, “kriauses “, “vysnios”));
    for($str=”,$i=0;$i

  16. NightVisio

    Net labai nepatariu skaityti šio straipsnio!
    Per daug nekomenuotsiu, absiribosiu keliomis išvadomis:
    1. Nemanau, kad tikrai sutaupysite laiką. Netgi sukelsite daugiau galvos skausmo ir būsite patys netvarkingiausi žmonės - ekspertai programuotojai (taip pat ir aš) net labai pataria kreipti dėmesį į stilių. Šiuo atveju pas Tave - “savartynas”.
    2. Sukelsite galvos skausmo ne tik sau, bet ir interpretatoriui - garantuoju, kad tokį kodą vykdys žymiai lėčiau.

    Iš pirmo pažiūrėjęs į šią eilutę: “$b=$a==1?$a:++$a;” pasijutau lyg būčiau žalias.
    O pažiūrėjus į tokią eilutę: $B = ($A == 1) ? $A : ++$A; - pasijuntu, kaip ekspertas (na, prašau, nesikabinėti, kad mėgstu pasigirti….)

    Labai “globokite” savo programavimo stilių! Tiems kam atrodo, kad $b=$a==1?$a:++$a; veiks greičiau, nei $B = ($A == 1) ? $A : ++$A; , turiu pasakyti labai klystate….

    Atsiprašau, kad taip ganėtinai griežtai išsireiškiau ir kažkam galbūt neįtikau, dėl savo nuomonės. Sėkmės!

  17. kran

    galime pataupyti laiko ir nemąstydami.. pvz kintamųjų vardų:
    ${0} = fwrite($h, ’some text’);
    if (!${0}) log(’Writing failed’);
    bet ar tikrai to reikia? gal geriau pirmą kartą sugaiškim daugiau laiko, sugalvokim prasmingus vardus, naudokime žmonėms įskaitomas konstrukcijas, pakomentuokime, ateityje tai atsipirks (patirtis).

    p.s. dar patarimų taupantiems:
    http://www.alexatnet.com/node/100
    :)

  18. Dolcas

    kokia programa čia rašoma..?

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.