CSC/ECE 517 Summer 2008/wiki1 2 acmoore2: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
Insert non-formatted text here</nowiki>Ruby, like Java, has iterators to facilitate doing operations on each member of a set. Python has generators as well. Describe how generators differ from iterators, and find examples of code sequences using generators that would be awkward with iterators.
''Ruby, like Java, has iterators to facilitate doing operations on each member of a set. Python has generators as well. Describe how generators differ from iterators, and find examples of code sequences using generators that would be awkward with iterators.''
 


----
----
Line 7: Line 6:
Iterators Defined
Iterators Defined


    Any computer programmer with experience has realized the power of an iterator. As defined by Wikipedia.com an iterator is "an object which allows a programmer to traverse through all the elements of a collection, regardless of its specific implementation." <1>
Any computer programmer with experience has realized the power of an iterator. As defined by Wikipedia.com an iterator is "an object which allows a programmer to traverse through all the elements of a collection, regardless of its specific implementation." <1>  
   
For example, the programming language Java, has defined an iterator interface in their Java Collections Framework in java.util. <4> There are three methods included in the interface as defined below:
 
boolean hasNext() :  Returns true if the iteration has more elements.
Object next() : Returns the next element in the iteration.
void remove() : Removes from the underlying collection the last element returned by the iterator (optional operation  <4>
 
We can further explore the operations of these methods in iterator functions in the following section.


Generators Defined
Iterator Examples


    As we have seen with iterators, the ability to traverse through a set or collection is basic need of any programming language. As described in the wiki question,  Python uses a variation on the iterator and uses generators. Wikipedia.com defines generators as "a special routine that can be used to control the iteration behaviour of a loop." <2>
In the following example in Java an array arrayList has been defined and populated. The iterator is defined, itr, for arrayList and then the contents can easily be printed out by using an iterator.
    A generator has many characteristics of that of a function that returns an array. A generator can have parameters, it can be called, and in return it returns a sequence of values. <2> The differnce from a generator and any other function that returns an array is that the generator is used to return the results one at a time, allowing it to act as an iterator.
    Python.com cites several benefits behind a generator. One improved area is the efficiency of memory use. The generator requires less memory by not having to store and send an entire collection or array rather passing one value at a time. <3>
    Another benefit cited by Python.com is high performance. Like an iterator, a generator returns one value at a time allowing for a process to start accessing the data earlier and faster than it would if it had to wait for the entire array to return. <3>


//get an Iterator object for ArrayList using iterator() method.
Iterator itr = arrayList.iterator();


//use hasNext() and next() methods of Iterator to iterate through the elements
    System.out.println("Iterating through ArrayList elements...");
    while(itr.hasNext())
      System.out.println(itr.next()); <5>


Ruby, like Java allows for iterators and provides a mechinism for iteration. It allows for iteration over enumerations and arrays using blocks. Here is an example of a mixed bag array and then iterating over the array to print out the contents


array = [1, 'hi', 3.14]
array.each { |item| puts item }
# => 1
# => 'hi'
# => 3.14 <6>


Generators Defined


As we have seen with iterators, the ability to traverse through a set or collection is basic need of any programming language. Just as in Java, Ruby has a means of iterator by using a generator. As described in the wiki question,  Python uses a variation on the iterator and uses generators. Wikipedia.com defines generators as "a special routine that can be used to control the iteration behaviour of a loop." <2>
   
A generator has many characteristics of that of a function that returns an array. A generator can have parameters, it can be called, and in return it returns a sequence of values. <2> The differnce from a generator and any other function that returns an array is that the generator is used to return the results one at a time, allowing it to act as an iterator.
   
Python.com cites several benefits behind a generator. One improved area is the efficiency of memory use. The generator requires less memory by not having to store and send an entire collection or array rather passing one value at a time. <3>
   
Another benefit cited by Python.com is high performance. Like an iterator, a generator returns one value at a time allowing for a process to start accessing the data earlier and faster than it would if it had to wait for the entire array to return. <3>


Generator Examples


Our first example can be drawn from Python. This generator will produce prime number indefinitely as seen in the code below.


# Another generator, which produces prime numbers indefinitely as needed.
def primes():
    n = 2
    p = []
    while True:
        if not any( n % f == 0 for f in p ):
            yield n
            p.append( n )
        n += 1
>>> f = primes()
>>> f.next()
2
>>> f.next()
3
>>> f.next()
5
>>> f.next()
7 <2>




Generators That Would Be Awkward with Iterators




Line 33: Line 82:


<3> http://www.python.org/dev/peps/pep-0289
<3> http://www.python.org/dev/peps/pep-0289
<4> http://java.sun.com/j2se/1.4.2/docs/api/java/util/Iterator.html
<5> http://www.java-examples.com/iterate-through-elements-java-arraylist-using-iterator-example
<6> http://en.wikipedia.org/wiki/Ruby_programming_language

Revision as of 23:45, 30 May 2008

Ruby, like Java, has iterators to facilitate doing operations on each member of a set. Python has generators as well. Describe how generators differ from iterators, and find examples of code sequences using generators that would be awkward with iterators.



Iterators Defined

Any computer programmer with experience has realized the power of an iterator. As defined by Wikipedia.com an iterator is "an object which allows a programmer to traverse through all the elements of a collection, regardless of its specific implementation." <1>

For example, the programming language Java, has defined an iterator interface in their Java Collections Framework in java.util. <4> There are three methods included in the interface as defined below:

boolean hasNext() : Returns true if the iteration has more elements.

Object next() : Returns the next element in the iteration.

void remove() : Removes from the underlying collection the last element returned by the iterator (optional operation <4>

We can further explore the operations of these methods in iterator functions in the following section.

Iterator Examples

In the following example in Java an array arrayList has been defined and populated. The iterator is defined, itr, for arrayList and then the contents can easily be printed out by using an iterator.

//get an Iterator object for ArrayList using iterator() method. Iterator itr = arrayList.iterator();

//use hasNext() and next() methods of Iterator to iterate through the elements

   System.out.println("Iterating through ArrayList elements...");
   while(itr.hasNext())
     System.out.println(itr.next()); <5>

Ruby, like Java allows for iterators and provides a mechinism for iteration. It allows for iteration over enumerations and arrays using blocks. Here is an example of a mixed bag array and then iterating over the array to print out the contents

array = [1, 'hi', 3.14] array.each { |item| puts item }

  1. => 1
  2. => 'hi'
  3. => 3.14 <6>

Generators Defined

As we have seen with iterators, the ability to traverse through a set or collection is basic need of any programming language. Just as in Java, Ruby has a means of iterator by using a generator. As described in the wiki question, Python uses a variation on the iterator and uses generators. Wikipedia.com defines generators as "a special routine that can be used to control the iteration behaviour of a loop." <2>

A generator has many characteristics of that of a function that returns an array. A generator can have parameters, it can be called, and in return it returns a sequence of values. <2> The differnce from a generator and any other function that returns an array is that the generator is used to return the results one at a time, allowing it to act as an iterator.

Python.com cites several benefits behind a generator. One improved area is the efficiency of memory use. The generator requires less memory by not having to store and send an entire collection or array rather passing one value at a time. <3>

Another benefit cited by Python.com is high performance. Like an iterator, a generator returns one value at a time allowing for a process to start accessing the data earlier and faster than it would if it had to wait for the entire array to return. <3>

Generator Examples

Our first example can be drawn from Python. This generator will produce prime number indefinitely as seen in the code below.

  1. Another generator, which produces prime numbers indefinitely as needed.

def primes():

   n = 2
   p = []
   while True:
       if not any( n % f == 0 for f in p ):
           yield n
           p.append( n )
       n += 1

>>> f = primes() >>> f.next() 2 >>> f.next() 3 >>> f.next() 5 >>> f.next() 7 <2>


Generators That Would Be Awkward with Iterators


<1> http://en.wikipedia.org/wiki/Iterator#Iterators_in_different_programming_languages

<2> http://en.wikipedia.org/wiki/Generator_%28computer_science%29

<3> http://www.python.org/dev/peps/pep-0289

<4> http://java.sun.com/j2se/1.4.2/docs/api/java/util/Iterator.html

<5> http://www.java-examples.com/iterate-through-elements-java-arraylist-using-iterator-example

<6> http://en.wikipedia.org/wiki/Ruby_programming_language