[ruby-core:114610] [Ruby master Bug#19859] Start & Finish, Begin & End

Issue #19859 has been reported by thoran (thoran not blank). ---------------------------------------- Bug #19859: Start & Finish, Begin & End https://bugs.ruby-lang.org/issues/19859 * Author: thoran (thoran not blank) * Status: Open * Priority: Normal * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- 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? -- https://bugs.ruby-lang.org/

Issue #19859 has been updated by rubyFeedback (robert heiler). 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".) ---------------------------------------- Feature #19859: Start & Finish, Begin & End https://bugs.ruby-lang.org/issues/19859#change-104443 * Author: thoran (thoran not blank) * Status: Open * Priority: Normal ---------------------------------------- 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?` -- https://bugs.ruby-lang.org/

Issue #19859 has been updated by sawa (Tsuyoshi Sawada).
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, 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 ``` ---------------------------------------- Feature #19859: Start & Finish, Begin & End https://bugs.ruby-lang.org/issues/19859#change-104444 * Author: thoran (thoran not blank) * Status: Open * Priority: Normal ---------------------------------------- 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?` -- https://bugs.ruby-lang.org/

Issue #19859 has been updated by matz (Yukihiro Matsumoto). 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. ---------------------------------------- Feature #19859: Start & Finish, Begin & End https://bugs.ruby-lang.org/issues/19859#change-104577 * Author: thoran (thoran not blank) * Status: Closed * Priority: Normal ---------------------------------------- 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?` -- https://bugs.ruby-lang.org/

Issue #19859 has been updated by mame (Yusuke Endoh). I confirmed that, at least, Java, Python, JavaScript, Rust, .NET, PHP, and OCaml uses starts_with/ends_with or similar. https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/lang/Strin...) https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/lang/Strin...) https://docs.python.org/3/library/stdtypes.html#str.startswith https://docs.python.org/3/library/stdtypes.html#str.endswith https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obj... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obj... https://doc.rust-lang.org/std/string/struct.String.html#method.starts_with https://doc.rust-lang.org/std/string/struct.String.html#method.ends_with https://learn.microsoft.com/en-us/dotnet/api/system.string.startswith?view=n... https://learn.microsoft.com/en-us/dotnet/api/system.string.endswith?view=net... https://www.php.net/manual/en/function.str-starts-with.php https://www.php.net/manual/en/function.str-ends-with.php https://v2.ocaml.org/api/String.html#VALstarts_with https://v2.ocaml.org/api/String.html#VALends_with ---------------------------------------- Feature #19859: Start & Finish, Begin & End https://bugs.ruby-lang.org/issues/19859#change-104591 * Author: thoran (thoran not blank) * Status: Closed * Priority: Normal ---------------------------------------- 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?` -- https://bugs.ruby-lang.org/
participants (5)
-
mame (Yusuke Endoh)
-
matz (Yukihiro Matsumoto)
-
rubyFeedback (robert heiler)
-
sawa (Tsuyoshi Sawada)
-
thoran (thoran not blank)