SimpleIO in JEP draft 8323335
Brian Goetz
brian.goetz at oracle.com
Sun Feb 18 22:08:04 UTC 2024
OK, so is this really just that that you are bikeshedding the name?
Renaming `input` to `readLine`?
This is a perfectly reasonable naming choice, of course, but also, not
what you suggested the first time around:
> ... "a third API" ...
> ... "there are two feasible directions" ...
So what exactly are you suggesting?
On 2/18/2024 5:03 PM, Cay Horstmann wrote:
> Like I said, either the scanner methods or the console methods are fine.
>
> I am of course aware of the utility/complexity of Scanner, and can
> understand the motivation to have a simpler/feebler behavior in
> SimpleIO. Like the one in Console.
>
> You don't have to "get a console". A SimpleIO.readLine method can just
> invoke readLine on the system console.
>
> My objection is to add yet another "input" method into the mix.
> "input" is weak. Does it read a token or the entire line? Does it
> consume the newline? And if it does just what readLine does, why
> another method name? Because "input" is three characters fewer? Let's
> not count characters.
>
> On 18/02/2024 22.43, Brian Goetz wrote:
>> I think you are counting characters and not counting concepts.
>>
>> Scanner has a ton of complexity in it that can easily trip up
>> beginners. The main sin (though there are others) is that input and
>> parsing are complected (e.g., nextInt), which only causes more
>> problems (e.g., end of line issues.) Reading from the console is
>> clearly a () -> String operation. The input() method does one thing,
>> which is get a line of text. That's simple.
>>
>> Integer.parseInt (or, soon, patterns that match against string and
>> bind an int) also does one thing: convert a string from int. It may
>> seem verbose to have to do both explicitly, but it allows each of
>> these operations to be simple, and it is perfectly obvious what is
>> going on. On the other hand, Scanner is a world of complexity on its
>> own.
>>
>> Console::readLine is nice, but first you have to get a Console. ("Why
>> can I print something without having to get some magic helper object,
>> but I can't do the same for reading?") What we're optimizing for
>> here is conceptual simplicity; the simplest possible input method is
>> the inverse of println. The fact that input has to be validated is a
>> fact of life; we can treat validation separately from IO (and we
>> should), and it gets simpler when you do.
>>
>> On 2/18/2024 4:12 PM, Cay Horstmann wrote:
>>> I would like to comment on the simplicity of
>>> https://openjdk.org/jeps/8323335 for beginning students.
>>>
>>> I am the author of college texts for introductory programming. Like
>>> other authors, I introduce the Scanner class (and not Console) for
>>> reading user input. Given that students already know about
>>> System.out, it is simpler to call
>>>
>>> System.out.print("How old are you? ");
>>> int x = in.nextInt(); // in is a Scanner
>>>
>>> than
>>>
>>> int x = Integer.parseInt(console.readLine("How old are you? "));
>>>
>>> or with the JEP draft:
>>>
>>> int x = Integer.parseInt(input("How old are you? "));
>>>
>>> Then again, having a prompt string is nice too, so I could imagine
>>> using the Console API with Integer.parseInt and Double.parseDouble,
>>> instead of Scanner.nextInt/nextDouble.
>>>
>>> But why have a third API, i.e. "input"?
>>>
>>> I think there are two feasible directions. Either embrace the
>>> Scanner API and next/nextInt/nextDouble/nextLine, or the Console API
>>> and readLine. Adding "input" into the mix is just clutter, and
>>> ambiguous clutter at that. At least readLine makes it clear that the
>>> entire line is consumed.
>>>
>>> Cheers,
>>>
>>> Cay
>>>
>>> --
>>>
>>> Cay S. Horstmann |
>>> https://urldefense.com/v3/__http://horstmann.com__;!!ACWV5N9M2RV99hQ!IuXZk_tqIH8rEw1bD3uYb8UcIZF-nnoeFT3UG17pMO5EVXIYVRaAKi7XCq_T02HwnAek1wuV8Wed08w$
>>> | mailto:cay at horstmann.com
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20240218/0fedd1b9/attachment-0001.htm>
More information about the amber-dev
mailing list