![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 162 Pomógł: 29 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio zagłębiłem się w temat iteratorów, jednak nie jestem do końca pewien czy dobrze zrozumiałem. Wszędzie są typy iteratorów, a nigdzie nie mogę znaleźć klarownego wytłumaczenia co to w ogóle jest i do czego służy.
Z tego co zrozumiałem to iterator to: obiekt który ma dostęp do innego obiektu i... Właśnie co on robi? Jak przeglądałem różne typy to wywnioskowałem że pojawia się zawsze przy jakiś listach, np. listy plików, lista danych pobranych z bazy itp. (wszystko co robi się z pomocą pętli) Czy te całe iteratoy to właśnie to pobieranie różnych elementów z obiektu do którego ma dostęp iterator i wyświetlanie jako lista? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Iterator jest najczęśćiej używany w pętlach. Jest to taka... forma tablica przechowującej dane, z taką różnicą, że możesz kontrolować dane jakie wrzucasz do tego iteratora. Możesz wykonywać parę innych operacji. Świetnym przykładem jest tutja DirectoryIterator, który zobaczysz w manualu php.
Zobacz jak on działa, jak się używa i spróbuj wymyśleć jak mógłbyś to zrealizować na samych tablicach i czy byłoby to łatwiejsze w użyciu. -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Iteratory stanowią specjalny typ, który umożliwia (jak sama nazwa wskazuje) iterację (przechodzenie) po elementach kolekcji. W przypadku PHP iteratory są stworzone nieco na wyrost, jednak w językach, w których nie można od tak przekroczyć rozmiaru np listy, umożliwiają przejście przez całą kolekcję bez obawy o przekroczenie zakresu.
Podczas korzystania z iteratora nie obchodzi nas struktura danych, po których iterujemy, ponieważ to na iteratorze właśnie spoczywa obowiązek zapewnienia bezpiecznej pracy. -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
To ja odpowiem może w sposób możliwie najbadziej lopatologiczny. Wiesz co to jest licznik, wskaźnik? Iterator to taka bardziej rozbudowana forma tego rozwiązania
![]() ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 162 Pomógł: 29 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Coś mi świtało i chyba już rozumiem. Dzięki. Jednak wydaje mi się że te iteratory są trochę na wyrost tak jak wspomniano wcześniej
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Oczywiście wszystko zależy do czego ich używasz. Podałem przykład kiedy warto go użyć. Na szczęscię do większości przypadków wystarczą tablice.
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Wookieb ma rację. Do większości przypadków tablice wystarczą. Iteratory mają niestety tę wadę, że to klasy dość uniwersalne, a co za tym idzie, wolniejsze. Zawierają one bowiem wiele dodatkowego kodu, własności, które w większości przypadków nie są wcale wykorzystywane. Są fajne w użyciu, skracają kod, ale niestety kosztem wydajności. To samo rozwiażanie oparte na iteratorach może byc kilkukrotnie wolniejsze niż to samo oparte na tablicy, choć nie można ukryć, że iteratory są bezpieczniejsze i dobrze przemyślane.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 162 Pomógł: 29 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Stworzyłem prosty kod obliczający silnie jako przykład iteratorów i mam pytanie czy dobrze to napisałem?
|
|
|
![]()
Post
#9
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Stworzyłem prosty kod obliczający silnie jako przykład iteratorów i mam pytanie czy dobrze to napisałem? Bez czytania dalszej treści już Ci mogę powiedzieć, że źle.Iterator to wzorzec zachowania polegający na sekwencyjnym dostępie do kolekcji. A u Ciebie żadnej kolekcji nie ma, jest to złe użycie wzorca. Równie dobrze możesz końcówką młotka wkręcać wkręty. Też się może uda. Ale nie zdziw się jak ktoś popuka Ci się w głowę ![]() |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
ok ok
![]() Równie dobrze możesz końcówką młotka wkręcać wkręty. Też się może uda. Ale nie zdziw się jak ktoś popuka Ci się w głowę ![]() i tu nie mogę się powstrzymać - skoro używacie takich powiedzeń to ja z życia wzięty przykład - akurat na budowie do wkręcania wkrętów do kołków rozporowych 99% osób używa młotków a nie wkrętarek ![]() ![]() -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Zegarek... A potem się dziwić, czemu kołki wypadają. Sam gdybym tak robił to haki w futrynie by mi wypadły dzień po "wkręceniu". Zwłaszcza, że przebiwszy się przez metal wiertarką kląłem na budowlańców. Jest pusta przestrzeń i nie idzie normalnego kołka osadzić - cały "lata". Pacnięcie młotkiem = zapomnij o tym, że osłonkę kołka jeszcze ujrzysz
![]() ![]() ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#12
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 162 Pomógł: 29 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ok, ale na przykład użycie iteratorów przy klasie pobierającej wartości z bazy Mysql ma już sens ? Np. gdy jest wiele wyników SELECT'a to wtedy ma sekwencyjny dostęp. Czy nadal źle ?
![]() |
|
|
![]()
Post
#14
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Zamiast kombinować, sprawdź dostępne iteratory. Przeanalizuj ich budowę, sprawdź do czego służą, a potem zabierz się za pisanie swoich rozwiązań.
-------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 23.02.2009 Skąd: Jelenia Góra Ostrzeżenie: (0%) ![]() ![]() |
Przykładowo jeśli Twoja klasa do obslugi bazy zwraca dane "opakowane" w klase implementującą iterator wtedy to ma sens.
-------------------- Freelancer Symfony/PHP poszukuje ciekawych zleceń
Warsztat: Slackware-current, NetBeans 6.8, Symfony-1.4.x, jQuery, 960gs |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli masz jakąś kolekcję obiektów (utworzonych na podstawie danych z bazy) to jak najbardziej możesz sobie użyć Iteratora do poruszania się po niej.
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Nie, to akurat bardzo pożyteczne rozwiązanie, ale też nie zawsze.
-------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Zegarek... A potem się dziwić, czemu kołki wypadają. Sam gdybym tak robił to haki w futrynie by mi wypadły dzień po "wkręceniu". Zwłaszcza, że przebiwszy się przez metal wiertarką kląłem na budowlańców. Jest pusta przestrzeń i nie idzie normalnego kołka osadzić - cały "lata".... założę się, że pustaki ceramiczne ;p - z pustkami powietrznymi - ceramiczne są dosyć kruche - "dziurę" wierci sie na głębokość kołka a i na szerokość - więc kołek nie ma gdzie wpaść ;p - wbijając wkręta rozszerzasz ten kołek rozporowy - wkręta już nie wyciągniesz chyba, że z kołkiem jeśli kołek był za mały lub dziura za bardzo rozwiercona (trzeba szerszy kolek) - ale ceramiczne pustaki to gdzie się nie ruszysz może się cały pokruszyć (ale niby cieplejsze i lepsze od żużlowych)... -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 02:12 |