ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:103310] [Ruby master Feature#17786] Proposal: new "ends" keyword
@ 2021-04-08 16:38 jzakiya
  2021-04-08 16:55 ` [ruby-core:103311] " chris
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: jzakiya @ 2021-04-08 16:38 UTC (permalink / raw)
  To: ruby-core

Issue #17786 has been reported by jzakiya (Jabari Zakiya).

----------------------------------------
Feature #17786: Proposal: new  "ends" keyword
https://bugs.ruby-lang.org/issues/17786

* Author: jzakiya (Jabari Zakiya)
* Status: Open
* Priority: Normal
----------------------------------------
I'm submitting this in the same spirit that ``endless methods`` was, to promote and produce more concise and easier to write|read code.

**Proposal**
This is a proposal to introduce a new keyword ``ends`` (or ``endall``) as a terminal point to resolve the end of nested ``loops|conditionals``.

**Why**
It's a common code occurrence to have multiple levels of loops and/or conditionals, which require separate ``end`` keywords to designate their
termination points. The ``end`` statements themselves are merely for syntactic purposes.

It would be a benefit to programmers, and code readers, to be able to produce|read more concise code, by reducing the ``code noise`` of these
nested multiple ``end`` keywords with a shorter|cleaner syntax.

Thus, I propose creating the keyword ``ends`` as a shorter|cleaner syntax to replace having to write multiple ``end`` keywords.

**Example**

Below is an example of real code which performs nested loops. With "standard`` format it looks like this.

```
def render(scene, image, screenWidth, screenHeight)
  screenHeight.times do |y|
    screenWidth.times do |x|
      color = self.traceRay(....)
      r, g, b = Color.toDrawingColor(color)
      image.set(x, y, StumpyCore::RGBA.from_rgb(r, g, b))
    end 
  end 
end
```

However, from the point of view of the parser, these are all legal|equivalent.

```
def render(scene, image, screenWidth, screenHeight)
  screenHeight.times do |y|
    screenWidth.times do |x|
      color = self.traceRay(....)
      r, g, b = Color.toDrawingColor(color)
      image.set(x, y, StumpyCore::RGBA.from_rgb(r, g, b))
    end     end         end     end end end
  end         end       end
end             end     end
```

This proposal would allow this type of code to be writtn as:

```
def render(scene, image, screenWidth, screenHeight)
  screenHeight.times do |y|
    screenWidth.times do |x|
      color = self.traceRay(....)
      r, g, b = Color.toDrawingColor(color)
      image.set(x, y, StumpyCore::RGBA.from_rgb(r, g, b))
ends
```
**Pros**
1) code conciseness
2) better readability
3) no whitespace dependencies
4) no conflict with legacy code
5) attractice to people coming from Python|Nim, et al

**Cons**
No technical implementation restrictions I can think of.
Maybe alternative name (endall)?

Thanks for consideration.




-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2021-04-11  1:40 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-08 16:38 [ruby-core:103310] [Ruby master Feature#17786] Proposal: new "ends" keyword jzakiya
2021-04-08 16:55 ` [ruby-core:103311] " chris
2021-04-08 17:03 ` [ruby-core:103313] " merch-redmine
2021-04-08 20:09 ` [ruby-core:103315] " jzakiya
2021-04-08 21:43 ` [ruby-core:103318] " marcandre-ruby-core
2021-04-08 23:36 ` [ruby-core:103324] " duerst
2021-04-09  2:43 ` [ruby-core:103328] " mame
2021-04-09  3:52 ` [ruby-core:103330] " shevegen
2021-04-09  6:25 ` [ruby-core:103333] " duerst
2021-04-09  7:12 ` [ruby-core:103334] " nobu
2021-04-10 15:43 ` [ruby-core:103374] " jzakiya
2021-04-10 15:55 ` [ruby-core:103375] " chris
2021-04-11  1:40 ` [ruby-core:103383] " duerst

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).