Discussion: Naming API method
Kevin Rushforth
kevin.rushforth at oracle.com
Mon Nov 21 23:03:01 UTC 2022
My initial reaction is that I like the name "activeWhen" at least as
well as any of the alternatives discussed so far. It's less wordy than
"observedWhen" (which I suggested), and probably easier to describe. I
don't really care for using the term "scope".
I also think "when" or "whenever" are acceptable, but I know some don't
like them.
I think the leading candidates are:
activeWhen
whenever
when
observedWhen
Unless someone can come up with a better name that can be easily
described, I recommend picking one of these.
-- Kevin
On 11/21/2022 2:36 PM, Michael Strauß wrote:
> Thanks for your clarifications.
> Maybe the actual problem is that we don't have a good name for "gets
> the current value, but doesn't subscribe to updates".
> We could call bindings "active" when changes of the source value are
> processed, and "inactive" if the binding exists, but doesn't process
> changes.
> With a documented definition of "active", the method could simply be
> named `activeWhen`.
>
>
> On Mon, Nov 21, 2022 at 10:57 PM John Hendrikx <john.hendrikx at gmail.com> wrote:
>> Hi Michael,
>>
>> Thanks for your suggestion.
>>
>> The effect is not quite what you describe however, as the initial value
>> when the operation is first invoked is retained. It's true however that
>> when the condition is always `false` that the value will be a constant,
>> and that when it is always `true` it effectively is just a duplicate of
>> the left hand observable. Let me illustrate:
>>
>> public static void main(String[] args) {
>> StringProperty sp = new SimpleStringProperty("foo");
>> BooleanProperty active = new SimpleBooleanProperty(false); //
>> inactive
>> ObservableValue<String> x = sp.when(active); // holds "foo"
>> despite being inactive
>>
>> System.out.println(x.getValue()); // prints "foo"
>>
>> sp.set("bar");
>>
>> System.out.println(x.getValue()); // still prints "foo"
>>
>> active.set(true);
>>
>> System.out.println(x.getValue()); // prints "bar"
>> }
>>
>> This behavior doesn't violate the rule that the new binding shouldn't
>> observe its source when the condition is false as no listener was
>> involved to get the initial value. The initial value is important as
>> all bindings must have some kind of value. The docs do describe this in
>> the first sentence:
>>
>> "Returns an {@code ObservableValue} that holds this value and is updated
>> only when {@code condition} holds {@code true}"
>>
>> I think `withScope` could work (or `scopedTo`) but not sure if "scope"
>> itself is a good description -- we'd need to update the description to
>> use the word scope in a way that makes clear what it does preferably
>> without having to resort to "updated only when" or "only observes when":
>> ie: "Returns an ObservableValue that is scoped to the given condition" ?
>>
>> --John
More information about the openjfx-dev
mailing list