DEV Community

loading...

Discussion on: What's the Craziest Question You Ever Asked on Stack Overflow?

Collapse
joshhadik profile image
Josh Hadik Author

Here's mine. It's from way back in October, 2014.

What really stood out to me about this wasn't so much the question itself, but the code I wrote for the Playlist class:

class Playlist
  def initialize(*songs)
    @playlist = []
    songs.each{|key|
      add(key)
    }
  end
  def add(*songs)
    songs.each {|key|
      @playlist << key
    }
  end 
end

Putting aside the use of curly braces on a multi-line block, two things really stand out to me about this:

  1. I'm looping over an array to add the elements to another array when I could easily just set @playlist to the songs array.
  2. Not only am I looping over the elements in initialize, but I'm calling a second method that also loops over an array with each individual element before adding them to the @playlist array.

Thankfully someone on Stack was able to show me the light and help me realize I could easily refactor the class to the following:

class Playlist
  def initialize(*songs)
    @playlist = songs 
  end

  def add(*songs)
    @playlist.concat(songs) 
  end
end
Collapse
molly profile image
Molly Struve (she/her)

Totally could see my past jr dev self doing this!

Collapse
fluffy profile image
fluffy

For what it's worth, there is some merit in making a copy of the list, if you don't want to mutate the list that's been passed in at a later time for some reason. I'm not versed in ruby and I assume it does have a list copy operator of some sort, but there's at least merit in what you were doing, if not the mechanism. :)