Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #16873

Re: Programming style question

Message-ID <4756074.nmYHGREfxK@PointedEars.de> (permalink)
From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Organization PointedEars Software (PES)
Date 2012-10-25 23:18 +0200
Subject Re: Programming style question
Newsgroups comp.lang.javascript
References (10 earlier) <722e889us0ep0mra233907giq2nnolqhge@4ax.com> <XnsA0F6619B1C3Ceejj99@194.109.133.133> <k69fb6$530$1@news.albasani.net> <3335047.320Uf1SXUN@PointedEars.de> <k69sis$vc$1@news.albasani.net>
Followup-To comp.lang.javascript

Followups directed to: comp.lang.javascript

Show all headers | View raw


Stefan Weiss wrote:

> I've been waiting for this... It seems that every time I post code to
> this group, I get a reply filled with pedantic nitpicks and irrelevant
> criticism from you. I do enjoy constructive feedback, but all this
> disagreeing for the sake of disagreeing is a waste of everyone's time.
> Especially when you intentionally misinterpret short code examples as
> something they were never meant to be.

I did not want to comment on that nonsense anymore, but I am finding now 
that it needs to be said for once:

What kind of sorry luser are you that you think I would care about the name 
on any posting (short of pseudonyms, which is another issue), that I would 
actually care to use the little free time I have to target your (or 
anyone's) postings specifically?  You need to be strong now: You are not 
that important (to me).

You have to face the fact that so far you happen to have been posting mostly 
bad code.  It does not matter if that code was just an example.  A bad 
example is a bad example.  It is misleading at best.

So it boils down to this: If you do not want your code to be commented on, 
do not post it.  If you want more favorable comments from me on your code 
(which is entirely possible), post better code.  As for examples, you should 
post better examples.

And I encourage you and everyone else to discuss *my* code with me, in 
public if you want.  Many have found that rewarding already, and so do I.  
But you better bring good arguments.
 
> On 2012-10-24 21:57, Thomas 'PointedEars' Lahn wrote:
>>>   // DOM0 event handler
>>>   document.onclick = function (evt) {
>>>       var e = evt || window.event;
>>>       ...
>>>   };
>> 
>> This is error-prone if `evt' refers to a host object, and unnecessarily
>> inefficient.  And document.onclick?
> 
> This is a simple example of one very common usage of the || operator,
> not an endorsement of DOM0-style event handling, so yes, document.onclick.
> 
> As for error-prone, that's a huge exaggeration.

I do not see how "error-prone" can be exaggerated.  This code is prone to 
errors by the very nature of host objects; IOW, it is error-prone.

> It's true that the event object is a host object,

So you noticed.

> but this particular form of checking for an event object as the first
> argument has been widely used without problems since the mid 90s.
> Defensive programming is a good habit, but it can be carried to far.

It is not logical to use an approach that is prone to more errors than 
another approach, especially when that other approach is simpler, too.

> And "inefficient"?

Yes, *unnecessarily* inefficient *by comparison*.

> In a click handler?

Yes, especially in event _listeners_.

> This statement will be evaluated (at most) once every time the user
> clicks.

If that was true, what do you need the _listener_ for, then?

> I'm quite certain that any difference in performance between this example
> and whatever you would offer as an alternative cannot even be measured
> under these circumstances.

Your logic is flawed.  The performance benefit of `||' is negligible, too.
 
>>>   // initialize a "namespace" object without overwriting it
>>>   var myLib = myLib || {};
>> 
>> This is unnecessarily complicated.  An `if' statement will do better and
>> will be slightly more efficient.
> 
> So you would prefer one of these?
> 
> if (!myLib) {
>     var myLib = {};
> }
> 
> if (typeof myLib == "undefined") {
>     var myLib = {};
> }

I am preferring the second one in JSX.
 
> What I wrote looks less complicated to me,

YMMV.  I think it is easier to explain with the `if' statement – especially 
to a beginner – why the variable may have the `undefined' value before 
assignment, and why the assignment would not take place when it has not.

> but in the end it's just a matter of personal taste.

No, because your approach, and the first alternative to that which you 
offered, performs implicit type conversion, and cannot be easily adapted to 
other properties; mine does not, and can be, respectively.

> As with the first example, the efficiency of this statement is completely
> irrelevant in the typical case (i.e., at the beginning of an included
> file). Your version may save a single assignment, and only if myLib
> already exists. Why worry about such details?

Your logic is flawed.  Why worry about using `||' to begin with?  Because it 
looks cool?

>>>   myLib.myFunc = function () { ... };
>>> 
>>>   // call a method on an optional argument
>>>   function findParagraphs (parentEle) {
>>>       return (parentEle || document).getElementsByTagName("p");
>>>   }
>> 
>> This can be error-prone.  In particular, there is a problem when
>> expression in the `||' operation is a reference to a Function instance. 
>> Some functions can only be called as methods of an (specific) object.
> 
> You're imagining things, my overly critical friend.

No, and I am not your friend.

> As you can guess from the code, this function is intended to be called
> with an element node, or no arguments. Pass an unsupported argument and
> you will get an error. If that's your definition of error-prone, you will
> need to check each end every argument in every single function. Sure,
> that's possible, but if you do that, stop complaining about inefficient
> code.

Your function will fail if the element object in question does not implement 
the getElementsByTagName() method, and it will do so in a way that is hard 
to debug.

>>>   // combining && and ||
>>>   function textOfFirst (parentEle, eleName) {
>>>       var ele = parentEle.getElementsByTagName(eleName)[0];
>>>       return ele && ele.firstChild && ele.firstChild.data || "";
>>>   }
>> 
>> This is error-prone as the return type would vary (one of Null, Element
>> or descendant, Text, or String) depending on runtime conditions that one
>> has virtually no control over.  (In fact, the first line is error-prone
>> already as null has no properties).  To be avoided.
> 
> Please explain how this function can possibly return anything other than
> a string (under non-pathological* circumstances).

Yes, I was mistaken.  In fact, calling the function can only have the 
following outcomes under those constraints:

- A `TypeError' exception is thrown because a value that refers to
  or can be converted to an object was not passed for `parentEle';

- A `TypeError' exception is thrown because the object referred to by
  `parentEle' does not implement the getElementsByTagName() method;

- A `TypeError' exception is thrown because the getElementsByTagName()
  method returns `null';

- A non-empty value of type String is returned, which may or may not be
  the full text content of the first child text node, if any;

- "" of type String is returned.

> Again, if you insist on passing unsupported arguments to a function, you
> deserve what you get.

Obviously you have not thought this through sufficiently.
 

PointedEars
-- 
Danny Goodman's books are out of date and teach practices that are
positively harmful for cross-browser scripting.
  -- Richard Cornford, cljs, <cife6q$253$1$8300dec7@news.demon.co.uk> (2004)

Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-18 08:32 +0100
  Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-18 10:23 +0200
    Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-18 13:42 +0100
      Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-18 17:59 +0200
        Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-10-18 09:56 -0700
          Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-19 00:49 +0200
            Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-10-19 11:04 -0700
              Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-20 11:52 +0200
            Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-19 12:06 -0700
              Re: Programming style question Tim Streater <timstreater@greenbee.net> - 2012-10-19 23:12 +0100
                Re: Programming style question "Mel Smith" <med_cutout_syntel@aol.com> - 2012-10-19 21:56 -0600
              Re: Programming style question Bart Van der Donck <bart@nijlen.com> - 2012-10-20 02:21 -0700
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-20 12:03 +0200
                Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-20 06:31 -0700
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-20 18:30 +0200
                Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-20 10:32 -0700
                Re: Programming style question Tim Streater <timstreater@greenbee.net> - 2012-10-20 22:34 +0100
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-21 10:12 +0200
                Re: Programming style question Tim Streater <timstreater@greenbee.net> - 2012-10-21 09:34 +0100
                Re: Programming style question Dr J R Stockton <reply1242@merlyn.demon.co.uk.invalid> - 2012-10-21 17:59 +0100
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-22 09:55 +0200
                Re: Programming style question Tim Streater <timstreater@greenbee.net> - 2012-10-22 09:50 +0100
                Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-22 04:49 -0700
                Re: Programming style question Tim Streater <timstreater@greenbee.net> - 2012-10-22 14:04 +0100
                Re: Programming style question Hans-Georg Michna <hans-georgNoEmailPlease@michna.com> - 2012-10-22 16:07 +0200
                Re: Programming style question Dr J R Stockton <reply1243@merlyn.demon.co.uk.invalid> - 2012-10-23 18:22 +0100
                Re: Programming style question Hans-Georg Michna <hans-georgNoEmailPlease@michna.com> - 2012-10-22 16:01 +0200
                Re: Programming style question Jim T. <x@y.z> - 2012-10-22 12:16 -0400
                Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-22 11:40 -0700
                Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-10-22 14:01 -0700
                Re: Programming style question Hans-Georg Michna <hans-georgNoEmailPlease@michna.com> - 2012-10-23 10:07 +0200
                Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-10-23 09:43 -0700
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-23 11:49 +0200
                Re: Programming style question Jim T. <x@y.z> - 2012-10-23 15:52 -0400
                Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-23 13:07 -0700
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-23 22:45 +0200
                Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-10-23 14:14 -0700
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-24 09:35 +0200
                Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-10-24 10:17 -0700
                Re: Programming style question Dr J R Stockton <reply1243@merlyn.demon.co.uk.invalid> - 2012-10-25 18:41 +0100
                Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-25 17:03 -0700
                Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-10-25 20:14 -0700
                Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-25 20:46 -0700
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-26 09:55 +0200
                Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-26 06:18 -0700
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-26 17:43 +0200
                Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-10-26 09:57 -0700
                Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-26 10:24 -0700
                Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-10-26 14:18 -0700
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-27 10:45 +0200
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-27 12:58 +0200
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-27 16:18 +0200
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-27 18:08 +0200
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-27 18:26 +0200
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-27 19:43 +0200
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-27 21:09 +0200
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-27 22:53 +0200
                Re: Programming style question John G Harris <john@nospam.demon.co.uk> - 2012-10-28 11:37 +0000
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-28 12:50 +0100
                Re: Programming style question Martin Leese <please@see.Web.for.e-mail.INVALID> - 2012-10-28 13:43 -0600
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-28 23:58 +0100
                Re: Programming style question John G Harris <john@nospam.demon.co.uk> - 2012-10-29 11:18 +0000
                Re: Programming style question Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2012-10-27 23:58 +0200
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-28 12:43 +0100
                Re: Programming style question Dr J R Stockton <reply1243@merlyn.demon.co.uk.invalid> - 2012-10-27 19:44 +0100
                Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-24 12:06 -0700
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-24 21:27 +0200
                Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-10-24 15:12 -0700
                Re: Programming style question Tim Streater <timstreater@greenbee.net> - 2012-10-25 01:29 +0100
                Re: Programming style question Stefan Weiss <krewecherl@gmail.com> - 2012-10-24 21:25 +0200
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-24 21:57 +0200
                Re: Programming style question Stefan Weiss <krewecherl@gmail.com> - 2012-10-25 01:11 +0200
                Re: Programming style question Christoph Becker <cmbecker69@gmx.de> - 2012-10-25 02:00 +0200
                Re: Programming style question Scott Sauyet <scott.sauyet@gmail.com> - 2012-10-24 20:27 -0700
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-25 08:44 +0200
                Re: Programming style question Adam Silver <adambsilver@gmail.com> - 2012-10-25 04:28 -0700
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-25 23:18 +0200
                Re: Programming style question Scott Sauyet <scott.sauyet@gmail.com> - 2012-10-26 08:24 -0700
                Re: Programming style question Stefan Weiss <krewecherl@gmail.com> - 2012-11-07 22:13 +0100
                Re: Programming style question Tim Streater <timstreater@greenbee.net> - 2012-11-07 21:51 +0000
                Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-11-07 23:47 +0100
                Re: Programming style question Stefan Weiss <krewecherl@gmail.com> - 2012-11-08 01:14 +0100
                Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-11-07 16:51 -0800
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-11-08 16:45 +0100
                Re: Programming style question Scott Sauyet <scott.sauyet@gmail.com> - 2012-11-08 08:02 -0800
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-11-08 17:39 +0100
                Re: Programming style question Gene Wirchenko <genew@ocis.net> - 2012-11-08 11:25 -0800
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-11-08 22:25 +0100
                Re: Programming style question John G Harris <john@nospam.demon.co.uk> - 2012-11-09 10:19 +0000
                Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-11-09 17:41 +0100
                Re: Programming style question Dr J R Stockton <reply1245@merlyn.demon.co.uk.invalid> - 2012-11-10 22:38 +0000
                Re: Programming style question Scott Sauyet <scott.sauyet@gmail.com> - 2012-10-22 12:32 -0700
                Re: Programming style question Hans-Georg Michna <hans-georgNoEmailPlease@michna.com> - 2012-10-23 10:05 +0200
                Re: Programming style question Christoph Becker <cmbecker69@gmx.de> - 2012-10-22 22:11 +0200
                Re: Programming style question Stefan Weiss <krewecherl@gmail.com> - 2012-10-23 02:42 +0200
                Re: Programming style question Hans-Georg Michna <hans-georgNoEmailPlease@michna.com> - 2012-10-23 10:08 +0200
              Re: Programming style question "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-10-20 18:34 +0200
  Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-18 11:57 +0200
    Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-18 13:06 +0100
      Re: Programming style question "Jukka K. Korpela" <jkorpela@cs.tut.fi> - 2012-10-18 15:32 +0300
        Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-18 13:37 +0100
          Re: Programming style question "Jukka K. Korpela" <jkorpela@cs.tut.fi> - 2012-10-18 15:55 +0300
          Re: Programming style question John G Harris <john@nospam.demon.co.uk> - 2012-10-19 10:12 +0100
            Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-19 07:24 -0700
              Re: Programming style question John G Harris <john@nospam.demon.co.uk> - 2012-10-20 17:47 +0100
          Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-24 01:15 +0100
            Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-24 01:31 +0100
            Re: Programming style question "Jukka K. Korpela" <jkorpela@cs.tut.fi> - 2012-10-24 07:34 +0300
              Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-24 19:57 +0200
                Re: Programming style question "Jukka K. Korpela" <jkorpela@cs.tut.fi> - 2012-10-24 21:02 +0300
        Re: Programming style question Patricia Shanahan <pats@acm.org> - 2012-10-18 20:15 -0700
      Re: Programming style question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-10-24 01:21 +0100
  Re: Programming style question Scott Sauyet <scott.sauyet@gmail.com> - 2012-10-21 17:57 -0700

csiph-web