[#363639] Parsing geonames — 12 34 <rubyforum@...>

A Ruby newbie having trouble getting results back from geonames

16 messages 2010/06/02
[#363641] Re: Parsing geonames — Michael Fellinger <m.fellinger@...> 2010/06/02

On Wed, Jun 2, 2010 at 2:57 PM, 12 34 <rubyforum@web.knobby.ws> wrote:

[#363642] Re: Parsing geonames — 12 34 <rubyforum@...> 2010/06/02

Michael Fellinger wrote:

[#363646] installation issue with Ruby gems on Ubuntu 8.04 — Santosh Dvn <santoshdvn@...>

Hi I am installing ruby gems on ubuntu 8.04 .. while installing i got

14 messages 2010/06/02

[#363662] having a class method called only one time ? — unbewusst.sein@... (Une B騅ue)

I'd like having a class method called only one time ?

12 messages 2010/06/02

[#363756] comparing objects — Anderson Leite <andersonlfl@...>

How can I compare two objects and get true if some of his atributes are

48 messages 2010/06/03
[#364122] Re: comparing objects — Rein Henrichs <reinh@...> 2010/06/10

On 2010-06-10 06:59:40 -0700, Robert Dober said:

[#363764] Documenting Ruby 1.9: Ebook or Wiki? — Run Paint Run Run <runrun@...>

I'm writing a free ebook about Ruby 1.9 at http://ruby.runpaint.org/ .

17 messages 2010/06/04
[#363765] Re: Documenting Ruby 1.9: Ebook or Wiki? — Mohit Sindhwani <mo_mail@...> 2010/06/04

On 4/6/2010 11:30 AM, Run Paint Run Run wrote:

[#363775] Looking for ORM for 'legacy' database. — Dave Howell <groups.2009a@...>

I feel I should start with some pre-emptive apologies. I used to =

28 messages 2010/06/04
[#363895] Re: Looking for ORM for 'legacy' database. — Phrogz <phrogz@...> 2010/06/06

On Jun 4, 3:29=A0am, Dave Howell <groups.20...@grandfenwick.net> wrote:

[#363975] Re: Looking for ORM for 'legacy' database. — Dave Howell <groups.2009a@...> 2010/06/07

[#363883] inject method of Array class — RichardSchollar <richardgschollar@...>

I have only just started using Ruby (and am a total noob, in case this

14 messages 2010/06/06

[#363944] Complex numbers contradiction? — Andrew Duncan <andrew.duncan@...>

This looks correct:

13 messages 2010/06/07
[#363951] Re: Complex numbers contradiction? — Robert Dober <robert.dober@...> 2010/06/07

On Mon, Jun 7, 2010 at 9:01 PM, Andrew Duncan <andrew.duncan@sonos.com> wrote:

[#364010] Rubyzip - `dup': can't dup NilClass (TypeError) — Luka Stolyarov <lukich@...>

Hello. I've trying to figure out rubyzip. Here's the code I had:

11 messages 2010/06/08

[#364101] Why private #binding? — Intransition <transfire@...>

Why is #binding a private method? I end up doing a lot of this:

13 messages 2010/06/10

[#364268] State of the union for Ruby CLI libraries? — John Feminella <johnf@...>

I am starting construction on a somewhat complicated internal

18 messages 2010/06/13

[#364273] Loading a module without polluting my namespace — Hagbard Celine <sin3141592@...>

Hey folks!

20 messages 2010/06/13

[#364330] shorthand — Roger Pack <rogerpack2005@...>

I read this once:

14 messages 2010/06/14

[#364342] Placement of require() and missing symbols — Eric MSP Veith <eveith@...>

-----BEGIN PGP SIGNED MESSAGE-----

16 messages 2010/06/15
[#364365] Re: Placement of require() and missing symbols — Kirk Haines <wyhaines@...> 2010/06/15

On Mon, Jun 14, 2010 at 7:18 PM, Eric MSP Veith

[#364371] datamapper blues — Martin DeMello <martindemello@...>

I'm investigating the use of DataMapper to convert an old project with

14 messages 2010/06/15

[#364402] Getting rid of self — Ralph Shnelvar <ralphs@...32.com>

22 messages 2010/06/16
[#364440] Re: Getting rid of self — Josh Cheek <josh.cheek@...> 2010/06/16

On Wed, Jun 16, 2010 at 4:31 AM, Ralph Shnelvar <ralphs@dos32.com> wrote:

[#364415] Android apps using ruby — Lakshmanan Muthukrishnan <lakshmanan@...>

Hi,

16 messages 2010/06/16
[#364439] Re: Android apps using ruby — Andrew Kaspick <akaspick@...> 2010/06/16

Lakshmanan Muthukrishnan wrote:

[#364479] Re: Android apps using ruby — Lakshmanan Muthukrishnan <lakshmanan@...> 2010/06/17

Andrew Kaspick wrote:

[#364496] nothing new in ruby_core for four days ? — Michel Demazure <michel@...>

The Ruby Core forum has no new entry since four days ago.

15 messages 2010/06/17
[#364498] Re: nothing new in ruby_core for four days ? — Brian Candler <b.candler@...> 2010/06/17

Michel Demazure wrote:

[#364529] Dear gem: still no zlib. — Dave Howell <groups.2009a@...>

I really really regret ever installing SnowLeopard.=20

16 messages 2010/06/17

[#364580] String comparison. Why does Ruby consider this true? — Abder-rahman Ali <abder.rahman.ali@...>

When I try for example to compare the following strings in Ruby, I get

13 messages 2010/06/18
[#364584] Re: String comparison. Why does Ruby consider this true? — Josh Cheek <josh.cheek@...> 2010/06/18

On Fri, Jun 18, 2010 at 12:46 PM, Abder-rahman Ali <

[#364628] Random Points within a Circle (#234) — Daniel Moore <yahivin@...>

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

21 messages 2010/06/19
[#364696] Re: [QUIZ] Random Points within a Circle (#234) — Caleb Clausen <vikkous@...> 2010/06/21

On 6/19/10, Daniel Moore <yahivin@gmail.com> wrote:

[#364641] Namespacing a class — Eric MSP Veith <eveith@...>

-----BEGIN PGP SIGNED MESSAGE-----

18 messages 2010/06/20

[#364815] Count substrings in string, scan too slow — Danny Challis <dannychallis@...>

Hello everyone,

18 messages 2010/06/24
[#364817] Re: Count substrings in string, scan too slow — Jes俍 Gabriel y Gal疣 <jgabrielygalan@...> 2010/06/24

On Thu, Jun 24, 2010 at 5:04 PM, Danny Challis <dannychallis@gmail.com> wro=

[#364825] Re: Count substrings in string, scan too slow — Robert Klemme <shortcutter@...> 2010/06/24

2010/6/24 Jes=FAs Gabriel y Gal=E1n <jgabrielygalan@gmail.com>:

[#364850] Happy Intransition Day! — Ryan Davis <ryand-ruby@...>

Happy Intransition Day!

23 messages 2010/06/24

[#364930] Ruby in JavaScript, all projects are dead? — Alexey Petrushin <axyd80@...>

Hello, recently I've examined some of the projects that trying to bring

18 messages 2010/06/27

[#364988] Reading String Data as a File — Doug Jolley <ddjolley@...>

I use Net::HTTP to collect some data as a string. I now need to pass

25 messages 2010/06/29
[#364989] Re: Reading String Data as a File — Ryan Davis <ryand-ruby@...> 2010/06/29

[#364996] Re: Reading String Data as a File — Brian Candler <b.candler@...> 2010/06/29

Ryan Davis wrote:

[#365016] Re: Reading String Data as a File — Doug Jolley <ddjolley@...> 2010/06/29

> If it takes only a pathname argument, then you're

[#365024] Re: Reading String Data as a File — Tony Arcieri <tony.arcieri@...> 2010/06/29

On Tue, Jun 29, 2010 at 11:50 AM, Doug Jolley <ddjolley@gmail.com> wrote:

[#365036] Re: Reading String Data as a File — Robert Klemme <shortcutter@...> 2010/06/30

2010/6/29 Tony Arcieri <tony.arcieri@medioh.com>:

[#365049] Re: Reading String Data as a File — Brian Candler <b.candler@...> 2010/06/30

Robert Klemme wrote:

[#365039] pathname.rb:270: warning: `*' interpreted as argument prefix — "R.. Kumar 1.9.1 OSX" <sentinel1879@...>

/opt/local/lib/ruby1.9/1.9.1/pathname.rb:270: warning: `*' interpreted

12 messages 2010/06/30
[#365048] Re: pathname.rb:270: warning: `*' interpreted as argument prefix — Josh Cheek <josh.cheek@...> 2010/06/30

On Wed, Jun 30, 2010 at 6:11 AM, R.. Kumar 1.9.1 OSX <sentinel1879@gmail.com

Re: Processing (potentially) nil method without using nested if

From: Robert Klemme <shortcutter@...>
Date: 2010-06-07 17:35:06 UTC
List: ruby-talk #363943
On 07.06.2010 18:55, Rein Henrichs wrote:
> On 2010-06-07 02:24:26 -0700, Robert Klemme said:
>
>> 2010/6/5 Brian Candler <b.candler@pobox.com>:
>>> Ben Vishny wrote:
>>>> Ideally I'd like to do:
>>>>
>>>> if parent.respond_to? "children" && parent.children.size != 0
>>>>    puts "Has Children"
>>>> end
>>>>
>>>> But I get an error if parent.children is undefined. Isn't there a
>>>> way of
>>>> stopping if the first condition is false?
>>>
>>> Yes, but you're being bitten by the ambiguity of what you've written,
>>> which is resolved by precedence rules. I'm not sure exactly how your
>>> code was being parsed, but I guess something like
>>>
>>> if parent.respond_to?("children" && (parent.children.size != 0))
>>>
>>> The rule is, if in doubt, add your own parentheses.
>>>
>>> The following all work as you expect:
>>>
>>> if (parent.respond_to? "children") && (parent.children.size != 0)
>>>  puts "Has Children"
>>> end
>>>
>>> if parent.respond_to?("children") && parent.children.size != 0
>>>  puts "Has Children"
>>> end
>>>
>>> if parent.respond_to? "children" and parent.children.size != 0
>>>  puts "Has Children"
>>> end
>>>
>>> The last of these works because 'and' has very low precedence, but I'd
>>> say it's much better to be explicit with parentheses than clever with
>>> your knowledge of precedence rules.
>>>
>>> Incidentally, it's more idiomatic to use a symbol rather than a string
>>> for respond_to?
>>>
>>> if parent.respond_to?(:children) ...
>>
>> It's even more idiomatic to invoke a method and deal with the
>> exception. Checking with #respond_to? does not guarantee that the
>> method can actually be executed.
>>
>> In this case you could do
>>
>> puts "Has Children" unless parent.children.empty? rescue nil
>>
>> Or for a more targeted catch:
>>
>> begin
>> puts "Has Children" unless parent.children.empty?
>> rescue NoMethodError
>> # OK, no output
>> end

> Robert, you are correct in that "It's even more idiomatic to invoke a
> method and deal with the exception" but rescue nil is a code smell that
> I would rather see avoided. A begin/rescue block also seems unnecessary.
>
> Instead of solving a potential non-problem, I think it would be better
> to ask questions like... Why would this parent object not have a
> children method? Does this imply a design inconsistency? If parent can
> be nil, see the following.
>
> In order to avoid NoMethodError on nil bugs, it's most common to use &&,
> which short-circuits, as such:
>
> parent.children && parent.children.size != 0
>
> I may be assuming too much about your domain, but this seems more concise:
>
> parent.children && !parent.children.empty?
>
> Furthermore, it may be useful to ask: Why would children ever be nil?
> The empty array is a semantically correct way to say "no children". If
> children were initialized to [], you could always ask children.empty?
> and skip the check for nil. For instance:
>
> class Parent
> attr_reader :children
> def initialize(children=[])
> @children = children
> end
> end

Absolutely agree.  At least the query for respond_to? should be avoided 
since if the object does not have this method something more serious is 
wrong and an exception would be the proper result.

Often nil is used as initial value for efficiency reasons or reasons for 
simplicity (nil is the default for all values).  So it may be 
appropriate to use it for empty collection of children as well.   Other 
schemes could be devised as well, e.g. lazy initialization like

def children
   @children ||= []
end

My main point when writing the earlier posting was that it is generally 
a bad idiom to check whether something can be done before doing it.  The 
check gives only a false impression of safety since the operation can 
fail even if the check succeeds.  So it's generally better to just do it 
and deal with exceptions because even with a check you have to deal with 
the exception anyway.  The check is basically just overhead.

Cheers

	robert


-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

In This Thread

Prev Next