# Question about if-statements

**URL:** <https://www.ruby-forum.com/t/question-about-if-statements/64973>\
**Category:** Ruby\
**Created:** [August 15, 2006, 2:21pm UTC](https://www.ruby-forum.com/t/question-about-if-statements/64973 "2006-08-15T14:21:04Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![fabsy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/5daacb/32.png) [@fabsy](https://www.ruby-forum.com/u/fabsy)\
**Post date:** [August 15, 2006, 2:21pm UTC](https://www.ruby-forum.com/t/question-about-if-statements/64973/1 "2006-08-15T14:21:04Z")

</div>

Im a newbie to ruby (hehe).  
I have a question.  
Is there any better way to do this? :

* * *

puts “Enter Username”  
usr = gets  
puts “Enter Password”  
usr\_pass = gets  
User = “user”  
Pass = “pass”

if usr \> User  
if usr\_pass \> Pass  
puts “Correct user and pass”  
else  
puts “Correct user”  
puts “Wrong pass”  
end  
else  
if usr\_pass \> Pass  
puts “Correct pass”  
else  
puts “Wrong pass”  
end  
puts “Wrong user”  
end

## ------------------------This is the same but in VB--------- if usr = User and usr\_pass = Pass then print “correct user and password” else if usr = User and usr\_pass \<\> Pass then print “correct user and wrong password” else if usr \<\> User and usr\_pass = Pass then print “correct password and wrong user” else if usr \<\> User and usr\_pass \<\> Pass then print “wrong password and wrong user” end if end if end if end if

-------And how do i do this in ruby? ------  
If usr = User and usr\_pass = Pass then  
print “Correct User and Pass”  
else  
print “Wrong User or Pass”  
endif

---

<div class="post-metadata">

**Author:** ![fabsy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/5daacb/32.png) [@fabsy](https://www.ruby-forum.com/u/fabsy)\
**Post date:** [August 15, 2006, 3:01pm UTC](https://www.ruby-forum.com/t/question-about-if-statements/64973/2 "2006-08-15T15:01:22Z")

</div>

On 15.08.2006 13:44, fabsy wrote:

> Pass = “pass”  
> puts “Correct pass”  
> else  
> puts “Wrong pass”  
> end  
> puts “Wrong user”  
> end

puts “Enter Username”  
usr = gets  
puts “Enter Password”  
usr\_pass = gets

if usr \> “user” && usr\_pass \> “pass”  
puts “Login ok”  
else  
puts “Wrong credentials”  
end

Note: typically you do not report whether the user name or the password  
was invalid to give attackers as few information as possible.

Btw, why do you compare with greater than and a string?

Kind regards

```
robert
```

---

<div class="post-metadata">

**Author:** ![fabsy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/5daacb/32.png) [@fabsy](https://www.ruby-forum.com/u/fabsy)\
**Post date:** [August 15, 2006, 3:55pm UTC](https://www.ruby-forum.com/t/question-about-if-statements/64973/3 "2006-08-15T15:55:58Z")

</div>

On Aug 15, 2006, at 14:40, fabsy wrote:

> Thanks!
> 
> > Btw, why do you compare with greater than and a string?  
> > I didn’t know how to compare so I just guessed it would be greater  
> > than.  
> > How would you do if you where to do a program like mine? The way you  
> > wrote or any other way?

Well, you’re testing for equality, so greater than wouldn’t catch a  
lot of cases. I’d suggest these:

if X != Y # X not equal to Y

unless X == Y # X equal to Y

You can pick the one that’s more linguistically appealing to you,  
though I have a hunch that ‘if’ is more popular than ‘unless’.

matthew smillie.

---

<div class="post-metadata">

**Author:** ![fabsy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/5daacb/32.png) [@fabsy](https://www.ruby-forum.com/u/fabsy)\
**Post date:** [August 15, 2006, 4:07pm UTC](https://www.ruby-forum.com/t/question-about-if-statements/64973/4 "2006-08-15T16:07:59Z")

</div>

Matthew S. wrote:

> if X != Y # X not equal to Y
> 
> unless X == Y # X equal to Y
> 
> You can pick the one that’s more linguistically appealing to you, though  
> I have a hunch that ‘if’ is more popular than ‘unless’.

I only think that’s because most other languages don’t have `unless’ 🙂

Cheers,  
Daniel

---

<div class="post-metadata">

**Author:** ![fabsy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/5daacb/32.png) [@fabsy](https://www.ruby-forum.com/u/fabsy)\
**Post date:** [August 15, 2006, 3:49pm UTC](https://www.ruby-forum.com/t/question-about-if-statements/64973/5 "2006-08-15T15:49:57Z")

</div>

Thanks!

> Btw, why do you compare with greater than and a string?  
> I didn’t know how to compare so I just guessed it would be greater  
> than.  
> How would you do if you where to do a program like mine? The way you  
> wrote or any other way?

---

<div class="post-metadata">

**Author:** ![fabsy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/5daacb/32.png) [@fabsy](https://www.ruby-forum.com/u/fabsy)\
**Post date:** [August 15, 2006, 5:38pm UTC](https://www.ruby-forum.com/t/question-about-if-statements/64973/6 "2006-08-15T17:38:54Z")

</div>

On Aug 15, 2006, at 15:05, Daniel S. wrote:

> Matthew S. wrote:
> 
> > if X != Y # X not equal to Y  
> > unless X == Y # X equal to Y  
> > You can pick the one that’s more linguistically appealing to you,  
> > though I have a hunch that ‘if’ is more popular than ‘unless’.
> 
> I only think that’s because most other languages don’t have  
> `unless’ 🙂

That was my first intuition too, and I’m certain that’s part of it,  
but upon further reflection I think there’s more to it as well. To  
make an if and unless statement equivalent, you have to negate the  
condition, leading to this basic schema:

(1) if X != Y ↔ unless X == Y  
(2) if X == Y ↔ unless X != Y

Logically, everything’s kosher, but linguistically there’s a crucial  
difference: the ‘unless’ form of (2) is a double negative. I’m sure  
people are generally familiar with the admonition to avoid double  
negatives in their writing, and it’s for a good reason: people have a  
hard time understanding multiple negations; to be fair, two is  
usually not a problem, especially in familiar forms such as “not  
unlike X”, but in general it’s not an easy task to not do  
incorrectly. (see?)

So, if you assume that given the choice people won’t use  
linguistically-uncomfortable code, then there are two basic  
comfortable ‘if’ forms, but only one comfortable ‘unless’ form.  
Given the lovely, literary nature of Ruby code, this seems like a  
reasonable assumption to make; so even if everyone were perfectly  
familiar with ‘unless’ as a language construct, you’d still expect  
‘if’ to outnumber ‘unless’.

Not that I think this has much bearing on the language, just a neat  
observation.

matthew smillie

[1] For an entertaining example, see the Language Log talking about a  
Penny Arcade comic strip here:  
[http://itre.cis.upenn.edu/~myl/languagelog/archives/003437.html](http://itre.cis.upenn.edu/~myl/languagelog/archives/003437.html)

---

<div class="post-metadata">

**Author:** ![fabsy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/5daacb/32.png) [@fabsy](https://www.ruby-forum.com/u/fabsy)\
**Post date:** [August 15, 2006, 7:42pm UTC](https://www.ruby-forum.com/t/question-about-if-statements/64973/7 "2006-08-15T19:42:13Z")

</div>

Matthew S. wrote:

> That was my first intuition too, and I’m certain that’s part of it, but  
> negatives in their writing, and it’s for a good reason: people have a
> 
> Not that I think this has much bearing on the language, just a neat  
> observation.

Interesting thoughts (and cool example). I do however tend to use short,  
one-liner conditional statements the most, in which I think `unless' fits much nicer than`if not’.

Cheers,  
Daniel

---

<div class="post-metadata">

**Author:** ![fabsy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/5daacb/32.png) [@fabsy](https://www.ruby-forum.com/u/fabsy)\
**Post date:** [September 4, 2006, 2:45pm UTC](https://www.ruby-forum.com/t/question-about-if-statements/64973/8 "2006-09-04T14:45:43Z")

</div>

fabsy wrote:

> ## Pass = “pass” puts “Correct pass” if usr = User and usr\_pass \<\> Pass then end if
> 
> -------And how do i do this in ruby? ------  
> If usr = User and usr\_pass = Pass then  
> print “Correct User and Pass”  
> else  
> print “Wrong User or Pass”  
> endif

Question 1:

print "enter username: "  
username = gets.chomp # chomp removes the last newline

print "enter password: "  
password = gets.chomp

# using constants may not be the best approach…

Username = “foo”  
Password = “bar”

raise “incorrect username” unless username == Username  
raise “incorrect password” unless password == Password

# the user is now authenticated

Question 2:

if username == Username and password == Password  
# correct  
else  
# incorrect  
end

Cheers,  
Daniel
