![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
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 (IMG:style_emoticons/default/smile.gif) O ile licznik normalnie jest typu liczbowego by skakać w pętli, a wskaźnik jest adresem określonego miejsca w tablicy tak iterator jest jakby udoskonaloną wersją wskaźnika i rozszerzony o kilka dodatkowych włsaności, z których część wymienili moi poprzednicy (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
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.
|
|
|
![]()
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ę (IMG:style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
ok ok (IMG:style_emoticons/default/winksmiley.jpg) , ale jak na początek...
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ę (IMG:style_emoticons/default/tongue.gif) 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 (IMG:style_emoticons/default/winksmiley.jpg) - jeden raz pac i wkręt wkręcony (IMG:style_emoticons/default/winksmiley.jpg) (tu się nikt nie "bawi" a kołek trzyma mocno)... taka analogia ale jak na samo pierwsze użycie moim zdaniem powyższe może być... znając podstawową zasadę powinien szybko załapać jak chodzić po tablicach, odpowiednio dając warunki po obiektach czy "nietypowo" po drzewie DOM itp. itd.... |
|
|
![]()
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 (IMG:style_emoticons/default/winksmiley.jpg) Będę musiał użyć jakiegoś wypełniacza, by puste przestrzenie wypełnić. A pianki montażowej boję się użyć bo patrząc na solidność ścian, gdy ona napęcznieje to mi ściany w tym miejscu popękają lub je rozerwie. Bo nie wiem jak duże są luki wewnątrz i ile pianki wtrysnąć. W każdym razie kołek o długości 15cm + lekko nakręcona osłonka (czyli dodatkowe około 10cm) wchodzi cały i nie czuć oporu. W efekcie przy obciążeniu kołek nie ma się jak zaklinować na osłonie i "wypada" (IMG:style_emoticons/default/smile.gif) Młotka można użyć najwyżej do wbicia osłonki. Nie samego wkręta bo gwint osłony rozwalisz. Ale to Polska. Tu prowizorka wytrzyma dłużej niż planowane tygodniami rozwiązania (IMG:style_emoticons/default/winksmiley.jpg)
|
|
|
![]()
Post
#12
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
ok ok (IMG:style_emoticons/default/winksmiley.jpg) , ale jak na początek... Jest źle przede wszystkim dlatego, że to początek!Nie namawiaj judzi do partactwa bo się przyzwyczają. |
|
|
![]()
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 ?(IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
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ń.
|
|
|
![]()
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.
|
|
|
![]()
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.
|
|
|
![]()
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)... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 06:03 |