Skip to content

jusleg/looop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Looop ♻ Gem Version tests badge loop badge license badge

Gone are the days where you convert your entire project to Java just to get the nice for loop. You can now build similar looking loops that run much slower than your average loop.

Get started

gem install looop

require 'looop'

How to use Looop

Looop was built with simplicity as its core value. For this reason, we only offer one method: Looop.for.

Let's say you are DJ Khaled, a typical Java developer, and you wish to craft a tweet with your signature catchphrase "Another one." repeated 5 times

# tweet.rb
require 'looop'

CATCHPHRASE = 'ANOTHER ONE.'
tweet = ''
Looop.for(index = 1, ->{index <= 5}, ->{index += 1}) do
  tweet.concat(CATCHPHRASE)
end

puts tweet

#=> ANOTHER ONE.ANOTHER ONE.ANOTHER ONE.ANOTHER ONE.ANOTHER ONE.

I'm intrigued, what are these ->{} things?

I'm glad you asked, those are Procs. We'll call these procs while running the loop. This is one of the main reasons that make looop a tad bit slower.

Do U even Big-O ?!1

I guess, you can run nested loops if that's what you are asking.

height = 5
Looop.for(i = 1, ->{ i <= height }, -> {i += 1}) do
  Looop.for(h = height - i, -> {h > 0 }, -> {h -= 1}) do
    print " "
  end
  Looop.for(j = 1, -> {j <= i}, -> {j += 1}) do
    print "* "
  end
  print "\n"
end

will print:

    * 
   * * 
  * * * 
 * * * * 
* * * * * 

Is this leetcode ready? Can I pass a technical interview with this?

Is this leetcode ready?

It depends, you might be able to solve the base case, but I'd be surprised if you didn't time out during the evaluation of the secret cases.

Can I pass a technical interview with this?

Meh, as long as they don't ask for it to be optimized for performance.

TL;DR: don't.

Is it fast

no

Looop.for(i=0, -> {i<1000}, -> {i+=1}) do
  Looop.for(j=0, -> {j<1000}, -> {j+=1}) do
    #noop
  end
end

was 6 times slower than

i = 0
while i<1000 do
  j = 0
  while j<1000 do
    #noop
    j += 1
  end
  i += 1
end

I don't want to setup a small script to test it but I'm really interested to try it, can you make a repl.it?

Sure. here.

Copyright and License

Copyright (c) 2020, Famingo Inc.

This project is licensed under the MIT License.

Do you have a soundcloud I can follow?

No, but you can follow me on twitter. I'll announce it there if I end up creating one.

About

A slower way to generate for loops in Ruby with a funky java-like syntax

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages