Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9186039
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 17, 20262026-06-17T19:25:34+00:00 2026-06-17T19:25:34+00:00

I have an if/else condition, and the if and else sections are identical, save

  • 0

I have an if/else condition, and the if and else sections are identical, save for the operator used. In one case <, and in the other >. Is there a way to conditionally set that operator, to DRY out the code?

if count_year < end_year
    while count_year <= end_year
        if count_year % 4 == 0
            if count_year % 100 != 0
                all_years << count_year unless (count_year % 400 == 0)
            end
        end
        count_year += 1
    end
    puts all_years
elsif count_year > end_year
    while count_year >= end_year
        if count_year % 4 == 0
            if count_year % 100 != 0
                all_years << count_year unless (count_year % 400 == 0)
            end
        end
        count_year -= 1
    end
    puts all_years.reverse
end

This is part of a program for printing out leap years between two given years. I feel like there must be a way to not have to repeat the loop twice. Something like: count_year < end_year ? operator = "<" : operator = ">" – Then using that variable to substitute the operator into a code block or something? Any ideas?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-17T19:25:36+00:00Added an answer on June 17, 2026 at 7:25 pm

    For one small improvement, you can extract really identical parts into a method. Then duplication stops being so massive.

    # I'm too lazy to come up with a proper name for it.
    def foo count_year, all_years
      if count_year % 4 == 0
        if count_year % 100 != 0
          all_years << count_year unless (count_year % 400 == 0)
        end
      end
    end
    
    
    # later...
    
    if count_year < end_year
      while count_year <= end_year
        foo count_year, all_years
        count_year += 1
      end
      puts all_years
    elsif count_year > end_year
      while count_year >= end_year
        foo count_year, all_years
        count_year -= 1
      end
      puts all_years.reverse
    end
    

    But, the operator substitution…

    Yes, there is a way to dynamically choose an operator for evaluation. You see, operators in ruby are just method calls, nothing more. These two lines are equivalent:

    7 > 5
    7.>(5)
    

    And here’s a snippet that chooses random operator for comparison. I leave it up to you to adapt it for your problem (if you want, that is. I advise you against this).

    def is_7_greater_than_5
      operator = [:<, :>].sample # pick random operator
      7.send(operator, 5)
    end
    
    is_7_greater_than_5 # => false
    is_7_greater_than_5 # => false
    is_7_greater_than_5 # => true
    is_7_greater_than_5 # => true
    is_7_greater_than_5 # => true
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have used an if else condition to show if the version of the
I have if else condition in one function in oracle i need to convert
i have inherited a database application from someone else and there are a few
I was wondering, if we have if-else condition, then what is computationally more efficient
Could it be possible to have if else condition with a for loop E.g.
i have button click handler event in which i am using if-else condition.How can
in my project ,Somewhere I have to use if n else condition to check
I have a basic conditional statement that has a chaining function. After the else
How can I identify the datas that have anything else than a number in
I'm getting Reaching end of non-void function warning, but don't have anything else to

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.