[#395238] rubygem: ispunity (unite all your internet connections) — Arun Tomar <tomar.arun@...>

Dear friends,

12 messages 2012/05/01

[#395250] Overwriting one Ruby array or arrays with another — Craig Law <lists@...>

Hi

14 messages 2012/05/02

[#395258] array of strings - finding letter combinations — "Sebastjan H." <lists@...>

Hi All,

16 messages 2012/05/02

[#395357] Why Enumerator#next does not return more than one value? — Földes László <lists@...>

If I have an Enumerator which yields elements of a mathematical series

10 messages 2012/05/07

[#395373] How to use Data_Wrap_Struct to assign the DATA VALUE to an exsiting Ruby object? — Iñaki Baz Castillo <ibc@...>

Hi, my code receives an arbitrary klass name (provided by the user)

8 messages 2012/05/07

[#395429] passing via instance variable or regular () — sam jam <lists@...>

def first

10 messages 2012/05/10

[#395463] I'm looking for a Metaprogramming Project — Phil Stone <lists@...>

Hello,

19 messages 2012/05/11

[#395548] A million reasons why Encoding was a mistake — Marc Heiler <lists@...>

Newcomer wants to try Ruby.

15 messages 2012/05/15
[#395561] Re: A million reasons why Encoding was a mistake — Ryan Davis <ryand-ruby@...> 2012/05/15

[#395595] Re: A million reasons why Encoding was a mistake — Brian Candler <lists@...> 2012/05/16

I will add that the OP is not entirely alone in his opinion.

[#395551] How to ensure that a block runs entirely after other threads? (Thread.exclusive does not "work") — Iñaki Baz Castillo <ibc@...>

Hi, I expected that in the following example code, thread t1 would not

8 messages 2012/05/15

[#395575] GUI with ruby on windows — David Acosta <lists@...>

hello friends, i am a begginer and i have a litlle question, how can i

17 messages 2012/05/16

[#395604] what is going wrong here? — roob noob <lists@...>

Notice the initialization of both classes in each of the examples, if

20 messages 2012/05/16

[#395646] rb_gc_register_address() or rb_gc_mark()? — Iñaki Baz Castillo <ibc@...>

Hi, I've bad experiences with rb_gc_register_address(), it does never

16 messages 2012/05/17

[#395686] reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...>

Hi,

19 messages 2012/05/18
[#395694] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Hello,

[#395697] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061272:

[#395698] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Sebastjan H. wrote in post #1061276:

[#395699] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061277:

[#395750] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Hi,

[#395754] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Sebastjan H. wrote in post #1061483:

[#395740] ? Ruby through CGI and Rails — Shaun Lloyd <list@...>

Hi everybody,

22 messages 2012/05/21
[#395764] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/21

Shaun Lloyd wrote in post #1061455:

[#395786] Re: Ruby through CGI and Rails — Shaun Lloyd <list@...> 2012/05/22

On 22/05/12 03:37, Brian Candler wrote:

[#395838] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/23

Shaun Lloyd wrote in post #1061602:

[#395787] Changing self class from inside a method?? — David Madison <lists@...>

Let's start off with the assumption I want a method that allows an

10 messages 2012/05/22

[#395841] Memory-efficient set of Fixnums — George Dupre <lists@...>

Hi,

25 messages 2012/05/23

[#395883] looking for a ruby idiom : r=foo; return r if r — botp <botpena@...>

Hi All,

11 messages 2012/05/24

[#395966] Am I justified to use a global variable if it must be used in all scopes? — Phil Stone <lists@...>

Hello,

12 messages 2012/05/27

[#396010] does this leak more than the size of the string via timing side channels — rooby shoez <lists@...>

string1 = "string"

16 messages 2012/05/29

[#396038] Is it possible to avoid longjmp in exceptions, Thread#kill, exit(), signals? — Iñaki Baz Castillo <ibc@...>

Hi, my Ruby C extension runs a C loop (libuv) without GVL. At some

8 messages 2012/05/29

Re: passing via instance variable or regular ()

From: Robert Klemme <shortcutter@...>
Date: 2012-05-11 08:33:05 UTC
List: ruby-talk #395455
On Fri, May 11, 2012 at 9:20 AM, sam jam <lists@ruby-forum.com> wrote:
> Using @ does have advantages as well though. Using () to pass variables
> internally within the class leads to less readable code I think. For one
> you need to pass variables down the chain even if you are not using them
> at each point down the chain. That makes for very ugly code versus using
> @ to leap frog methods.

First of all that code is _explicit_ - that's not necessarily "ugly".
Using instance variables to avoid having to pass arguments to method
calls has another disadvantage apart from the ones I mentioned
earlier: it is not obvious what's happening here because information
is not passed explicitly.  If you notice you have to pass too many
variables down a call chain then this is an indication that you have
not chosen proper abstractions of your state.  Could be that all these
variables can go into a single class (even if it's just a one liner
Struct) and then you only need to pass an instance of this class.
Benefit of this is that you get another entity which you can attach
documentation to and it can be given a telling name.  By passing state
"behind the scenes" readers of the code will have a harder time to
understand what's going on and the code is less modular because for a
method there exists an additional precondition (i.e. that some
instance variables are set in a particular way).  By using unobvious
ways to pass state you gain a bit laziness at the time of writing but
pay with increased effort during reading and understanding later.
This is especially important for maintenance.  Compilers can deal with
arbitrary convoluted code, but it must be readable in order to be
maintainable.

> I could call last from some other class or method. But in some cases I
> see no advantage here. Sometimes when I make classes they are for very
> specific tasks,

_All_ classes should be for very specific tasks!  That's the whole
point of software engineering: you have a certain amount of
functionality that must be delivered by a program and it is our task
to distribute that functionality across program artifacts (methods,
classes, modules) in a way that the result fulfills some requirements

 - desired functionality must be guaranteed
 - a certain level of performance must be achieved
 - maintainability, which consists of
   - readability
   - modularity
   - test coverage

Not necessarily with priorities in this order.

> a bunch of methods that make up a larger system. The
> steps for that system always need to be called in order. I suppose if I
> wanted to reuse the steps in other places it would be best to use ().

You would typically start out with a public method which calls private
methods in that defined order.  If you find later that you could use
those private methods on their own you can still make them public.
Basically the rule of thumb here is: make as few things public as
possible and needed for the task and pay special attention to the
interface because that is set in stone (not really but the cost of
changing a public interface is usually extremely high).  It's must
easier to make something private public later than to change a public
interface!

> I also noticed Robert mentioning that he would avoid using the name
> variable as it is only used once. This brings me to a second question.
> Sometimes I find that using variables in this way can improve code
> readability as well. Perhaps I am writing a Feistel cipher and it makes
> sense to name parts @l and @r during the encryption rounds. The
> resulting cipher or plaintext is then @l + @r. I then need to remove the
> padding from the resulting plaintext, so even though I pass @l and @r
> only once to the remove padding method, it makes sense to say
>
> ciphertext = @l + @r
> remove_padding(ciphertext)
>
> or is this needlessly cluttering my code with variables?

It depends.  If you want to document then you can also do things like these:

remove_padding(@l + @r) # ciphertext
remove_padding_from_ciphertext(@l + @r)

> I see a lot of
> times in my code I use an = sign like this, to make it read more
> clearly, but sometimes I also find myself doing it needlessly. How do
> you feel about this?

Your feeling is probably right. :-)

> Also in my code I did this instead
>
> @ciphertext = @l + @r
> remove_padding(@ciphertext)
>
> I find that using instance variables helped me make the following code
> look nicer

Please don't do that.  It comes at a price (see my earlier statements).

Kind regards

robert

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

In This Thread