Project

General

Profile

Actions

Feature #19859

closed

Start & Finish, Begin & End

Added by thoran (thoran not blank) about 1 year ago. Updated about 1 year ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:114610]

Description

In English "start" is paired with "finish" and "begin" is paired with "end". While "start" and "begin", and "finish" and "end" have similar meanings they are not the same.

Hence it should be:
String#begin_with? & String#end_with?
or maybe
String#start_with? & String#finish_with?
or both; but not certainly not
String#start_with? & String#end_with?
as it is presently.

Further, I would argue that it should be only
String#begin_with? & String#end_with?
because "start" and "finish" imply temporality and strings don't have that connotation.

Hence the solution here for me would be to:
/String#start_with?/String#begin_with?/.

If however there is a desire to retain interface compatibility and to adhere to TMTOWTDI, then introduce both:
String#begin_with? and String#finish_with?

Actions #1

Updated by nobu (Nobuyoshi Nakada) about 1 year ago

  • Tracker changed from Bug to Feature
  • Description updated (diff)
  • Backport deleted (3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN)

Updated by rubyFeedback (robert heiler) about 1 year ago

Note that python chose startswith(); Java chose string_object_here.startsWith().

In regards to "retain interface compatibility": I do not think matz wants to
deprecate/remove .start_with?() and .end_with?(), so the only possibility
would be to add aliases. I am not sure such aliases should be added, but I
do not quite mind either way; personally I'll just keep on using .start_with?
and .end_with?.

I believe part of the issue here - aka "not proper / correct english" may
arise from thinking that ruby is necessarily adhering to the english language (only),
1:1, which I do not think is the case.

There is also expressiveness in a programming language (see python choosing "def foobar():"
aka def too).

This also reminds me a bit of the older File.exist?() versus File.exists?() discussion,
by the way. People may reason from an OOP point of view ("object, do you exist?") or a
Shakespeare point of view ("oh thou pretty world, in where this object does exist?" or
more succinctly "if object exists? do call this method"; these style-questions sometimes
come up, e. g. users who use "if condition then"; they seem to prefer seeing the "then"
visually, which I always found odd. I never got into the habit of using "then".)

Updated by sawa (Tsuyoshi Sawada) about 1 year ago

In English "start" is paired with "finish" and "begin" is paired with "end".

I do not think that holds. The combination of "start" and "end" is frequently used, e.g, https://word.tips/wordscapes-answers/ https://worddetector.com/

Further, I would argue that it should be only
String#begin_with? & String#end_with?
because "start" and "finish" imply temporality and strings don't have that connotation.

I don't think there is anything wrong with saying "a string starts with ...". Such expression is widely used, and even Sesame Street regularly uses this famous phrase "word starts with letter", e.g., https://www.youtube.com/watch?v=EtdnmhASYbA&t=42s (also at 17s).

However, Ruby has several methods that use "begin" for enumerable things, as well as the block comment syntax =begin ... =end, and String#start_with? is certainly not consistent with that.

Enumerator::ArithmeticSequence#begin
MatchData#begin
Range#begin
StringScanner#beginning_of_line?
Reline::LineEditor#beginning_of_line

Updated by matz (Yukihiro Matsumoto) about 1 year ago

  • Status changed from Open to Closed

We have picked that pair (inspired by Java). Adding infinite number of variation seems not to be a good idea.

Matz.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0