Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy używanie funkcji przyśpiesza działanie skryptów ?
Forum PHP.pl > Forum > PHP
Oldo
Cześć

Mam wątpliwość

Wiem, ponieważ sam się o tym przekonałem, że można napisać dość zaawansowany skrypt bez użycia żadnej funkcji (własnej).
Czy używanie funkcji przyśpiesza działanie skryptów ?

Pozdr
Oldo
kwiateek
Używanie funkcji spowalnia działanie skryptów.

Pozdrawiam.
kufel
Cytat
Używanie funkcji spowalnia działanie skryptów.

Pozdrawiam.


A picie mleka powoduje raka... biggrin.gif

Możesz jakoś uzasadnić to co napisałeś, bo mnie jakoś nie udało ci się przekonać.
kwiateek
Cytat
Możesz jakoś uzasadnić to co napisałeś, bo mnie jakoś nie udało ci się przekonać.

Łapatolgicznie rzecz biorąc przedstawiam dwie możlwiości, (nie rozpisuje się na ten temat gdyż w tej chwili nie mam wiele czasu):
1. Kod z użyciem funkcji
[php:1:0a3f3ec86f]<?php
function pokazTekst() {
echo 'tekst';
}
pokazTekst();
?>[/php:1:0a3f3ec86f]
2. Kod bez użycia funkcji
[php:1:0a3f3ec86f]<?php
echo 'tekst';
?>[/php:1:0a3f3ec86f]
Proponuję zrobić testy pomiaru generowania skryptu i porównać wyniki. Oczywiście dla powyższych przykładów różnice będą znikome.
Przy użyciu funkcji interpreter php'a jest bardziej obciążony co jest chyba oczywiste.
Przy czym przy wiekszych projektach w celu optymalizacji kodu używamy funkcji / klas a w efekcie nie powtarzamy się z tymi samymi fragmentami kodu.
Cytat
A picie mleka powoduje raka... biggrin.gif

Możesz uzasadnić swoją wypowiedź? rolleyes.gif

Pozdrawiam.
adwol
Cytat
A picie mleka powoduje raka... biggrin.gif

Być może...
Cytat
Możesz jakoś uzasadnić to co napisałeś, bo mnie jakoś nie udało ci się przekonać.

Wykonanie funkcji wiąże się z dodatkowymi operacjami takimi jak wyszukanie w słowniku funkcji tej właściwej, zmiana kontekstu zmiennych (globalne zmienne przestają być widoczne), czy wstępna inicjalizacja. To zawsze zabiera niezerowy czas. Spoglądając jednak z szerszej perspektywy to po pierwsze te operacje przy mocy obliczeniowej współczesnych komputerów wykonują się niezauważalnie krótko, a po drugie wygoda i porządek w kodzie w przypadku używania funkcji rekompensują całkowicie takie opóźnienia.
Oldo
Czyli zdania są podzielone :-)

W takim razie odpuszczę sobie pisanie funkcji ponieważ doskonale sobie radzę bez nich. Natomiast porządek w skryptach można bez problemu utrzymać stasując inne metody :

- komentarze
- stosowanie includowania w instrukcjach war.
- i jeszcze raz komentarze

Pozdr.
Oldo
DeyV
niestety - gdyby tak było, nikt nie marnowałby czasu na wymyslanie funkcji, a potem całej zabawy z projektowaniem obiektowym. A jednak była potrzeba, by to zrobić, i większość programistó w dzisiejszycz czasach własnie tak pracuje (również piszących w php).

Prawda jest niestety również taka, że nie sposób stworzyć większego kodu, nie dzieląc go najpier na funkcje potem również na klasy, któy by zapewniał minimum stabilności i bezpieczeństwa po którejś z rzędu przeróbce i poprawce. Chyba że ktoś ma głowę omnibsa, ale ... i taki pewnie małby problem, (nie mówiąc już o ilości zmarnowanego czasu).
Dlatego jestem przekoanany, że nnacznie lepiej jest poświęcić minimalną ilość czasu na naukę pisania w oparciu o funkcje, tak samo jak juz może nieco więcej czasu, któy jest potrzebny na opanowanie programowania obiektowego, ale to i tak bedzie drobnostka w porównianiu z czasem który będzie potrzebny na przerabianie swojego, już pewnie całkiem rozbudowanego projektu, a niewątpliwie kiedyś nadejdzie taka konieczność.
Oldo
Cytat
niestety - gdyby tak było, nikt nie marnowałby czasu na wymyslanie funkcji, a potem całej zabawy z projektowaniem obiektowym. A jednak była potrzeba, by to zrobić, i większość programistó w dzisiejszycz czasach własnie tak pracuje (również piszących w php).


Czyli chodzi o trendy :-)
Jednak mnie nie przekonałeś, ponieważ cały czas uważam, że jest to kwestia dobrej organizacji i utrzymania porządku w kodzie.
Każdy pisze jak uważa i o ile jego skrypty działają i są czytelne (łatwe do modyfikacji) to uważam, że jego metoda jest dobra.

http://gadulec.pl

W tym nie jest użyta ani jedna funkcja a wszystkie skrypty były przerabiane wiele razy.

Nie jestem przeciwnikiem pisania funkcji ale chciałbym znaleźć sensowny powód, dla którego miałbym zacząć z nich korzystać (przyjęte zasady nie wystarczą) - poruszyłem ten temat ponieważ zauważyłem, że wiele osób pisze funkcje dla banalnie prostych operacji.

Pozdr.
Oldo
KaMeLeOn
Cytat
[...] poruszyłem ten temat ponieważ zauważyłem, że wiele osób pisze funkcje dla banalnie prostych operacji.

Idea tworzenia funkcji nie miała na celu stosowania ich do "banalnie prostych operacji".
Raczej mają na celu ułatwiać prace poprzez wykorzystanie tej samej funkcji w różnych mechanizmach.
Jeśli masz cierpliwość przepisywać ten sam fragment kodu kilka razy w skrypcie... no cóż.
Każdy pisze tak jak mu wygodniej. :wink:
Oldo
Nie klepie tego samego kodu kilka razy - includuje go jeśli jest mi potrzebny.
Zepco
A co robisz w przypadku, gdy kod w kilku miejscach się powtarza, ew. zmieniają się pewne zmienne?

P.S. (OT)
Na stronie gadulec można ujrzeć ten oto tekst:
Cytat
Lista forów

Bez komentarza. :-)
Zepco
Zresztą, co ja bedę kijem Wisłę zawracał. Zobaczysz jak Twoje projekty będą się rozrastały. Wtedy wspomnisz swoje słowa i przyznasz, że ludzie, którzy "ulegają trendom" mieli rację. biggrin.gif
A tak na marginesie, próbowałeś obiektówki?
Kiedyś o tym sposobie programowania myślałem podobnie jak Ty o funkcjach, że można się bez nich (klas) obyć. Teraz nie wyobrażam sobie życia bez nich.
A zdanie moje uległo zmianie, jak moje programy (skrypty) zaczęły się rozrastać do takich rozmiarów, że nie panowałem nad tym, szczególnie gdy przyszło mi poprawiać mały błąd po kilku miesiącach od napisania.
scanner
Cytat
Nie klepie tego samego kodu kilka razy - includuje go jeśli jest mi potrzebny.
To tylko prywitywniejsza forma funkcji.
Seth
Wzasadzie to podchodzac do problemu w kategoriach mody mozna by zaprzestac pisania w php i skupic sie na asemblerze i cgi.

Pamietam, ze w Pascalu np. aby stworzyc wieksza aplikacje uzywanie funkcji bylo wrecz przymusowe gdyz ograniczenia w pamieci sprawialy, ze wystepowaly bledy.

Istota funkcji jest uproszczenie procesu tworzenia aplikacji, jej przenosnosc i latwosc wykorzystania elementow przez innych uzytkownikow.
Mysle, ze nie mozna mowic o funkcjach jako trendy gdyz powszechne stosowanie tego przez programistow jest zwiazane z tym, ze jest to przydatne i potrzebne.
Poza tym gdyby np. programisci nie uzywali funckji nie mogl bys korzystac chociazby z prostego polaczenia do mysql'a uzywajac funkcji mysql_connect() musial bys includowac plik i robic inne magiczne rzeczy :/

Natomiast w OOP funkcje (metody) sa nierozerwalne z koncepcja obiektowki i bez ich uzywania nie ma mowy o stoswaniu tej tehniki, ktora mimo, ze jest na topie sprawdza sie w wielu zastosowaniach upraszczajac i przyspieszajac proces budowania aplikacji.

Jezeli nie uzywasz funkcji Twoje skrypty moga byc ciezkie do zrozumienia dla osoby, ktora uzywa funkcji.


P.S. Zastanawiam sie jak bys napisal np taki kod nie uzywajac funckcji:
[php:1:466832da08]
$a = WykonajDzialanie( 20, 2, 4 );
$b = WykonajDzialanie( 2, 22, 14 );
$c = WykonajDzialanie( 72, 2, 7 );
$d = WykonajDzialanie( $a, $b, $c );


function WykonajDzialanie( $a, $b, $c )
{
return ( ( $a + $b ) * $c ) - $b;
}[/php:1:466832da08]
zalew
prosty przyklad... baaardzo prosty....

[php:1:55055ccf38]<?php
// generowanie ilustracji produktow z folderu
function loadPic($folda) {
$folder= "./prod_img/".$folda;
if ($handle = @opendir($folder)) {
while (false !== ($file = @readdir($handle))) {
if ($file != "." && $file != "..") {
$thePic = "
<img src="".$folder."/".$file."" class="img" vspace=2 hspace=0 border=0>";
}
}
closedir($handle);
}
return $thePic;
}

// formatowanie naglowka
function formTitle($text, $ifList) {
if ($ifList) {
$col = "#F01309";
$ftext_base = ucfirst($text);
} else {
$col = "#000000";
$pol_1 = array("ą", "ć", "ę", "ł", "ń", "ś", "ż", "ź", "ó");
$pol_big_1 = array("Ą", "Ć", "Ę", "Ł", "Ń", "Ś", "Ż", "Ź", "Ó");
$pol_2 = array("ą", "ć", "ę", "ł", "ń", "ś", "ż", "ź", "ó");
$pol_big_2 = array("Ą", "Ć", "Ę", "Ł", "Ń", "Ś", "Ż", "Ź", "Ó");
$pol_3 = array ("±", "ć", "ę", "ł", "ń", "¶", "ż", "Ľ", "ó");
$pol_big_3 = array("Ą", "Ć", "Ę", "Ł", "Ń", "Ś", "Ż", "Ź", "Ó");
$ftext_base = strtoupper($text);
}
$ftext = "<b style="color: ".$col."; text-decoration: none">";
$ftext .= str_replace($pol_1, $pol_big_1, $ftext_base);
$ftext = str_replace($pol_2, $pol_big_2, $ftext);
$ftext = str_replace($pol_3, $pol_big_3, $ftext);

$ftext .= "</b>";
return $ftext;
}

// formatowanie opisu, $cut to obcinanie przy skroconych opisach
function formText($text, $cut) {
if ($cut != 0) {
$ftext = substr($text, 0, $cut);
$ftext .= "...";
} else {
$ftext = $text;
}
return $ftext;

}
?>[/php:1:55055ccf38]


uzycie przy wyswietlaniu opisow w jednym z n miejsc


[php:1:55055ccf38]<?php
$tmp_link = $PHP_SELF."?dzial=".$HTTP_GET_VARS[dzial]."&&marka=".$HTTP_GET_VARS[marka].
"&&kat=".$kat[id];
$link = makeLink($tmp_link, "więcej...");

$zaw .= "<tr><td>";
$zaw .= makeLink($tmp_link, loadPic($kat[folder]));
$zaw .= "&nbsp;</td><td class="txt_prod">";
$zaw .= formTitle($kat[nazwa],0)."<br>".formText($kat[txt], 200)."<br>".$link;
$zaw .= "&nbsp;</td></tr>";
?>[/php:1:55055ccf38]


Cytat
W takim razie odpuszczę sobie pisanie funkcji ponieważ doskonale sobie radzę bez nich.[..]
Pozdr.
Oldo

mozesz mi przedstawic swoja wersje powyszego bez funkcji?
dooshek
Cytat
Czyli chodzi o trendy :-)
Jednak mnie nie przekonałeś, ponieważ cały czas uważam, że jest to kwestia dobrej organizacji i utrzymania porządku w kodzie.
Każdy pisze jak uważa i o ile jego skrypty działają i są czytelne (łatwe do modyfikacji) to uważam, że jego metoda jest dobra.

W tym nie jest użyta ani jedna funkcja a wszystkie skrypty były przerabiane wiele razy.

Nie jestem przeciwnikiem pisania funkcji ale chciałbym znaleźć sensowny powód, dla którego miałbym zacząć z nich korzystać (przyjęte zasady nie wystarczą) - poruszyłem ten temat ponieważ zauważyłem, że wiele osób pisze funkcje dla banalnie prostych operacji.


Proste, wystarczy, ze jakis kawalek kodu wykonujesz drugi raz i juz potrzebna jest funkcja, zeby nie robic tego parenascie razy w wielu miejscach. Takim przykladem ktory mi przychodzi na mysl, jest np. funkcja sprawdzajaca poprawnosc maila. Czy jesli na stronie masz kilka razy sprawdzanego maila to za kazdym razem piszesz taki sam kawalek kodu? Bo ja nie.

Banalne operacje? Nie. To jest przewidywanie - cos czego brakuje wiekszosci poczatkujacych programistow. Trzeba umiec przewidziec, ze taka funkcja bedzie mi jeszcze moze gdzies potrzebna i wtedy nie bede musial jej pisac, szukac - bede juz ja mial. Przewidywanie nie zawsze sie sprawdza ale w wiekszosci tak (to zalezy tez od doswiadczenia).

Swoja droga ostatnio natknalem sie na jakis archaiczny programik w php ktory byl napisany w jednym pliku z inkludami i ja (pomimo komentarzy) nie za bardzo lapalem o co tam chodzi.

Chodzi mi o to, ze Tobie sie wydaje, ze twoj kod jest czytelny bo go znasz - pokaz go innym i zobacz czy oni cos z tego rozumieja - wtedy sie dowiesz jaki jest Twoj kod...

Ogolnie - zastanow sie dobrze zanim zaczniesz pisac swoj kod - zastanow sie nad jego przyszloscia i pomysl gdzie moznaby zastosowac funkcje a gdzie one nie sa potrzebne.
Oldo
Cytat
A co robisz w przypadku, gdy kod w kilku miejscach się powtarza, ew. zmieniają się pewne zmienne?

P.S. (OT)
Na stronie gadulec można ujrzeć ten oto tekst:
Cytat
Lista forów

Bez komentarza. :-)


Odmień to jak trzeba :-)
Od kiedy forum przestało być czymś pojedynczym jest problem i każda forma jest poprawna.
Gdzie niegdzie piszą for :-) czy to jest poprawne ?
menic
Cytat
Gdzie niegdzie piszą for :-) czy to jest poprawne ?

tak.
BTW. Witam po malej przerwie ponownie smile.gif
zuku
Dzieki funkcja kod staje sie krotszy a przeciez o to chodzi w skrypcie.

Zreszta nawet include("nazwa_pliku") to funkcja w ktorej podajesz zmienna ze sciezka do pliku, gdzie ma sie wykonywac to co jest w tym pliku, po wykonaniu wraca do dalszej czesci skryptu.

Zapraszam tutaj [manual:dbe4132b5e]manual/pl/function.include.php[/manual:dbe4132b5e].
brandon
Cytat
Dzieki funkcja kod staje sie krotszy a przeciez o to chodzi w skrypcie.

Popieram w całości!
Piszę właśnie "słup ogłoszeniowy" i wybieranie ogłoszeń zależnych od różnych parametrów za pomocą "if" czy "switch" wymaga sporo kodu, przeważnie powtarzalnego, a stosując:
[php:1:4a4099851b]
...
// funkcja sprawdzająca kategorię
function o_kat($nr)
{
if ($nr == '')
{
$wynik = ('');
} else {
$wynik = ("kategoria = "$nr" ");
}
return $wynik;
}

// funkcja sprawdzająca podkategorię (np. markę)
function o_pkat($nr, $nr2)
{
if ($nr == '')
{
$wynik = ('');
} else {
if ($nr2 == -1)
{
$wynik = ("AND pk2 = "0" ");
} else
{
$wynik = ("AND pk2 = "$nr" ");
}
}
return $wynik;
}

// funkcja sprawdzająca rodzaj transakcji (kupno/sprzedaż)
function o_trans($nr)
{
if ($nr == 1)
{
$wynik = ("AND transakcja = "k" ");
} elseif ($nr == 2)
{
$wynik = ("AND transakcja = "s" ");
} else
{
$wynik = ('');
}
return $wynik;
}

...
[/php:1:4a4099851b]
(tak na marginesie, wszystkie te funkcje są zawarte w klasie "ogloszenie")

wywołuję funkcje i:
[php:1:4a4099851b]
...
$ogl = new ogloszenie;
$o_kat = $ogl->o_kat($par[1]);
$o_pkat = $ogl->o_pkat($par[3]);
$o_trans = $ogl->o_trans($par[5]);

$sql = "SELECT * FROM tabela WHERE ".$o_kat.$o_pkat.$o_trans;
...
?>[/php:1:4a4099851b]

i jednym wywołaniem przeszukiwania bazy wyświetlam to, co trzeba, zależnie od wybranych parametrów.
i o to przecież chodzi smile.gif
Bartol
http://webcity.pl/webcity/artykuly.php/t/20

tutaj masz to opisane ladnie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.