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


Groups > comp.lang.java.programmer > #37281

Re: Where to put the return

From Cecil Westerhof <Cecil@decebal.nl>
Newsgroups comp.lang.java.programmer
Subject Re: Where to put the return
Date 2017-08-19 12:54 +0200
Organization Decebal Computing
Message-ID <87bmnbj09u.fsf@munus.decebal.nl> (permalink)
References <87zib6zeup.fsf@munus.decebal.nl> <omlidd$k9h$1@gioia.aioe.org> <ev9dm4Ff34aU1@mid.individual.net> <87y3qlnyvj.fsf@munus.decebal.nl> <evqdjvFbc1oU1@mid.individual.net>

Show all headers | View raw


Robert Klemme <shortcutter@googlemail.com> writes:

> On 15.08.2017 08:12, Cecil Westerhof wrote:
>> Robert Klemme <shortcutter@googlemail.com> writes:
>>
>>> Btw. I'd rather throw in catch than return a special value.  That is
>>> cleaner and does not break if the special value actually occurs in the
>>> database.
>>
>> I agree. But that is what the call to fatalError does: it cleans up
>> resources and exits the program. But I changed that to just let the
>> SQLException fire:
>>      private static String getOldestUsed() throws SQLException {
>>          String oldestUsed = "";
>>
>>          try (SQLResultSet rsOldest = sqlite3Conn.executeQuery(OLDEST_USED)) {
>>              if (rsOldest.next()) {
>>                  oldestUsed = rsOldest.getString("used");
>>              }
>>          }
>>          return oldestUsed;
>>      }
>
> I'd rather
>
> private static String getOldestUsed() throws SQLException {
>     try (final SQLResultSet rs = sqlite3Conn.executeQuery(OLDEST_USED)) {
>         if (rs.next()) {
>             return rs.getString("used");
>         }
>     }
>
>     return "";
> }
>
>
> But religious wars have been fought about additional returns inside
> methods.  To me this reads easier because you see the fallback return
> value immediately and you can recognize immediately what value is
> returned.  In this smallish example it probably does not make a
> difference though.

I will think about it.


> Btw. SQL statements when used like this tend to be specific to the
> method.  So by inserting the SQL directly in the method instead of in a
> constant the reader has more information at hand and can quicker
> understand the logic.  Constants make much more more sense if the SQL is
> actually reused in different locations.

I find it handy to have all the definitions in one place. But again:
it does not hurt to think about it.


>>> And another remark: we do not see the SQL but in this case I would make
>>> sure that OLDEST_USED actually returns exactly one column and access
>>> that via index instead of name.  IIRC this tends to be slightly quicker.
>>> But it may be just an old habit of mine.
>>
>> One of the things I do is make sure you cannot use index. I find that
>> a very bad habit.
>
> Why?

I have to often seen that a database definition changed and there was
a big problem with the code, because a lot of queries had to be
changed.

I agree that with the kind of programs my wrapper will be used it
probably is mot a big deal, but it does not hurt to make people learn
to use better practises.


>> Also when you give the wrong query, but it gives one
>> column back, you have a hard to find bug.
>
> If the value happens to be of the same type as the expected one, yes.
> But since I would insert the query text in the method (see above) that
> is less of an issue.

When using the query text, yes. When using a constant no. And getXXX
will be used add places where there is used a constant.


>> The SQL used:
>>      SELECT used
>>      FROM   usedProverbs
>>      LIMIT  1
>>
>> I defined usedProverbs as a sorted view (on proverbs), that is why
>> there is no SORT BY.
>
> Sorted view is another thing I would not do.  I am not sure that is even
> a supported features across most databases.  It does have issues - 
> technical and conceptual.

In this case it is on a SQLite3 database which does have it and I
think it very unlikely to change. But you are right: when I want the
code to be portable I should not use this, or add a comment to the
code.


> With the SQL given the reader does not have a chance to identify the
> full criteria that select the value "used" because you do not see the
> sorting criteria.  I would rather put the "ORDER BY" into the query. (Or
> make it a query with "MIN" depending on schema.)

At least prepending MIN_ would be a good idea.


> You can read a lot on
> the issues of sorting a view, for example here:
>
> https://dba.stackexchange.com/questions/21434/why-does-order-by-not-belong-in-a-view/

I will evaluate that.

-- 
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof

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


Thread

Where to put the return Cecil Westerhof <Cecil@decebal.nl> - 2017-08-11 10:30 +0200
  Re: Where to put the return Cecil Westerhof <Cecil@decebal.nl> - 2017-08-11 12:24 +0200
  Re: Where to put the return Eric Douglas <e.d.programmer@gmail.com> - 2017-08-11 08:31 -0700
  Re: Where to put the return Arne Vajhøj <arne@vajhoej.dk> - 2017-08-11 20:33 -0400
    Re: Where to put the return Robert Klemme <shortcutter@googlemail.com> - 2017-08-13 00:27 +0200
      Re: Where to put the return Arne Vajhøj <arne@vajhoej.dk> - 2017-08-12 21:41 -0400
        Re: Where to put the return Robert Klemme <shortcutter@googlemail.com> - 2017-08-13 13:15 +0200
      Re: Where to put the return Cecil Westerhof <Cecil@decebal.nl> - 2017-08-15 08:12 +0200
        Re: Where to put the return Robert Klemme <shortcutter@googlemail.com> - 2017-08-19 11:10 +0200
          Re: Where to put the return Cecil Westerhof <Cecil@decebal.nl> - 2017-08-19 12:54 +0200
            Re: Where to put the return Cecil Westerhof <Cecil@decebal.nl> - 2017-08-19 13:46 +0200
              Re: Where to put the return Cecil Westerhof <Cecil@decebal.nl> - 2017-08-19 14:10 +0200
              Re: Where to put the return Robert Klemme <shortcutter@googlemail.com> - 2017-08-19 15:35 +0200
                Re: Where to put the return Arne Vajhøj <arne@vajhoej.dk> - 2017-08-19 09:48 -0400
                Re: Where to put the return Robert Klemme <shortcutter@googlemail.com> - 2017-08-19 23:26 +0200
                Re: Where to put the return Arne Vajhøj <arne@vajhoej.dk> - 2017-08-19 20:01 -0400
                Re: Where to put the return Robert Klemme <shortcutter@googlemail.com> - 2017-08-20 19:30 +0200
                Re: Where to put the return Cecil Westerhof <Cecil@decebal.nl> - 2017-08-19 17:06 +0200
            Re: Where to put the return Robert Klemme <shortcutter@googlemail.com> - 2017-08-19 15:35 +0200
              Re: Where to put the return Arne Vajhøj <arne@vajhoej.dk> - 2017-08-19 09:43 -0400
              Re: Where to put the return Cecil Westerhof <Cecil@decebal.nl> - 2017-08-19 17:15 +0200
                Re: Where to put the return Robert Klemme <shortcutter@googlemail.com> - 2017-08-21 22:33 +0200
          Re: Where to put the return lewbloch@gmail.com - 2017-08-19 09:20 -0700
            Re: Where to put the return Robert Klemme <shortcutter@googlemail.com> - 2017-08-21 22:29 +0200
    Re: Where to put the return Eric Douglas <e.d.programmer@gmail.com> - 2017-08-14 05:11 -0700
  Re: Where to put the return Brixomatic <brixomatic@yahoo.com> - 2017-08-31 19:27 +0200

csiph-web