Jak nazwać funkcję podmieniającą całość na podzbiór?

3

Czyli

a = a.findAny()

?

1!@#$%^&*() języki dynamiczne

0
KamilAdam napisał(a):

Czyli

a = a.findAny()

?

1!@#$%^&*() języki dynamiczne

No nie, patrz:

class PudełkoNaPłyty {
  CD cd;
}

Funkcja findAny(pudełko) to byłoby to samo co pudełko.cd, czyli po prostu wzięcie atrybutu. Ja chcę mieć funkcje która wyciąga coś (np extract, findAny, get, subset) a potem jeszcze podmienia całą zawartość na to co wyciągnęła.

Najbliżej chyba byl ktoś kto zasugerował (@jurek1980) replaceWithExtracted() - ale ja to potrzebuję w jednym słowie.

0

chcesz miec to co w pudełku?
no to flatMap()

0
nowyworek napisał(a):

chcesz miec to co w pudełku?
no to flatMap()

flatMap() się woła na kolekcji, a ja to potrzebuję wywołać na jedynm elemencie. Konkretnie tym który chce zmienić, pozostałe mają zostać nieruszone. Poza tym flatMap() sugeruje dowolną transformację, np mógłbym wyciągnąć z pudełka nie tylko płytkę,ale też instrukcje, paragon, etc.

Ja chcę coś w stylu

replaceByExtracted(pudełko, Cd.class);

Tylko że jednym słowem.

2

Ok. Czyli chcesz mieć

array[1] = array[1].getValue

Dalej uważam że języki dynamiczne są !@#$%^&*()

0

take() zwraca coś zabranego z jakiejś kolekcji, array itd. jednocześnie pomniejsza o zabrany element.
Ewentualnie takeElement()

1

representant()

0
KamilAdam napisał(a):

Ok. Czyli chcesz mieć

array[1] = array[1].getValue

No w sumie tak, tylko że to nie musi być array, ani nawet kolekcja. To mogą też np być foldery w systemie plików. Albo cyfry inta, obrazek, etc.

0
nowyworek napisał(a):

Kilka propozycji:
retain()

@nowyworek Noooooooooooo retain() mi się mega podoba pod tym względem. Robisz pudełko.retain(cd), i zostaje tylko cd :D

0

Dla mnie retain nie jest intuicyjne.
Sam wiele razy podkreślałeś, że zależy CI na zmianie elementu. Za to słowniki podają, że retain oznacza:

utrzymać zatrzymać utrzymywać pozostawić zostawić zachować gromadzić

Więc chyba ta nazwa jednak nie oddaje tego, co chcesz osiągnąć/zrobić.

0
cerrato napisał(a):

Dla mnie retain nie jest intuicyjne.
Sam wiele razy podkreślałeś, że zależy CI na zmianie elementu. Za to słowniki podają, że retain oznacza:

utrzymać zatrzymać utrzymywać pozostawić zostawić zachować gromadzić

Więc chyba ta nazwa jednak nie oddaje tego, co chcesz osiągnąć/zrobić.

No ja to rozumiałem że jak zrobisz retain() na CD, to on wyrzuci wszystko, a "zachowa" tylko to CD.

Ale może masz rację.

2

@TomRiddle: Nie zazdroszczę Twoim kolegom z zespołu podczas code review :D

0
TomRiddle napisał(a):

Pomoc wizualna #2:

funkcja.cd.jpg

  • Są 4y obiekty (pudełka na płytki)
  • Wywołuję funkcje na trzecim obiekcie
  • Trzeci obiekt (pudełko) jest podmienione jego zawartością (cd)
  • Wywołuję funkcję na drugim obiekcie
  • Drugi obiekt jest podmieniony przez swoją zwartośc (cd)

extractOne, lub bardziej ogólnie mapOne, transformOne? A może użyjesz jakiejś istniejącej konstrukcji (map, filter) i dodasz na ilu/jakich elementach ma się wykonać (mapIf, mapN)?

0
iksde napisał(a):

extractOne, lub bardziej ogólnie mapOne, transformOne? A może użyjesz jakiejś istniejącej konstrukcji (map, filter) i dodasz na ilu/jakich elementach ma się wykonać (mapIf, mapN)?

extractOne() brzmi jak wyciąganie, ale nie jak podmiana całości na wyciągnięty.

mapOne(), transformOne(), map() są zbyt ogólne bo sugerują że można:

  • Zamienić całość na coś zupełnie innego
  • Zamienić podelement na coś zupełnie innego

filter() nie pasuje, bo funkcja ma nie dotknąć innych elementów, tylko jeden.

3

Może takeOnMe()?
Przynajmniej melodyjne, zwłaszcza w dobrym wykonaniu:

1

unload i ogolnie to pytanie nie ma sensu bo chodzi o niszowe zastosowanie "generycznej" nazwy. W takich sytuacjach dopisujesz kontekst i jedziesz.
Kontekst moze byc albo tylko w glowie, albo w slowniku nazewnictwa dla projektu albo w nazwie: "unloadKartonAndThrowAwayIfEmpty".

0
vpiotr napisał(a):

unload

Load brzmi jak operacje na zasobach, np socketach, plikach, etc. A ta operacja ma być raczej szybką operacją in-memory :D Także load albo fetch mi nie pasuje.

i ogolnie to pytanie nie ma sensu bo chodzi o niszowe zastosowanie "generycznej" nazwy. W takich sytuacjach dopisujesz kontekst i jedziesz.
Kontekst moze byc albo tylko w glowie, albo w slowniku nazewnictwa dla projektu albo w nazwie: "unloadKartonAndThrowAwayIfEmpty".

Nie mogę tego zrobić bo:

  1. Ta funkcja ma mieć wiele zastosowań, i być wyższą formą abstrakcji nad taką zwykłą podmiankę.
  2. Chcę zrobić coś takiego
interface Dupable {}

class A implements Dupable {
  Dupable b;
}
class B implements Dupable {}

i zrobić

Dupable x = dupuj(new A(b)); 
x == b; // wyciągnięto "b" z "a".

Co w sumie wygląda jak odwrotny kompozyt, co wyjaśnia czemu @cerrato zaproponował decompose().

@vpiotr I zanim mi powiesz że to zjebany pomysł, bo nie widzisz szerszego kontekstu i nie widziałeś aplikacji którą piszę, proszę zaufaj mi że implementacja jest ok, bo ją akurat przemyślałem wiele razy. Potrzebuję to nazwać tylko dobrze :)

0

Dalej myślę o drzewach (trzypoziomowe drzewo to dalej drzewo) więc replaceByChild lub replaceByElement

3

a może doWhatTomRiddleWant() :D

0
KamilAdam napisał(a):

Dalej myślę o drzewach (trzypoziomowe drzewo to dalej drzewo)

A dwupoziomowe? Rozumiem że class A { B field } to też drzwo?

więc replaceByChild lub replaceByElement

Szukam jednego słowa najlepiej.

0
Pinek napisał(a):

a może doWhatTomRiddleWant() :D

No tak, spodziewałem się że zadawanie pytań o trudną nazwę doprowadzi w końcu do wyśmiewania pomysłu.

Szukam funkcji która (jak ktoś już zaproponował) działa jak flatMap(), ale nie na wszystkich elementach tylko na jednym, i nie pozwala na mappowanie elementu na inną arbitralną wartość.

3
TomRiddle napisał(a):

Szukam funkcji która (jak ktoś już zaproponował) działa jak flatMap(), ale nie na wszystkich elementach tylko na jednym, i nie pozwala na mappowanie elementu na inną arbitralną wartość.

No z tego opisu, to mi wyszło notFlatMap().

0
somekind napisał(a):
TomRiddle napisał(a):

Szukam funkcji która (jak ktoś już zaproponował) działa jak flatMap(), ale nie na wszystkich elementach tylko na jednym, i nie pozwala na mappowanie elementu na inną arbitralną wartość.

No z tego opisu, to mi wyszło notFlatMap().

flatElement lub flatFindFirst

1

Mi się wydaje, że ten retain to jest to :) Spodobał Ci się.

KamilAdam napisał(a):
somekind napisał(a):
TomRiddle napisał(a):

Szukam funkcji która (jak ktoś już zaproponował) działa jak flatMap(), ale nie na wszystkich elementach tylko na jednym, i nie pozwala na mappowanie elementu na inną arbitralną wartość.

No z tego opisu, to mi wyszło notFlatMap().

flatElement lub flatFindFirst

MOże jak nie flat, to bustyElement()?

4

A czemu nie możesz po ludzku zrobić to w funkcyjnym stylu i zamiast podmieniać stan obiektu zwrócić nowy?
Dla kolegi pytam.

0
scibi92 napisał(a):

A czemu nie możesz po ludzku zrobić to w funkcyjnym stylu i zamiast podmieniać stan obiektu zwrócić nowy?
Dla kolegi pytam.

Tak robię, one są immutable.

2

Nie do końca rozumiem czym jest 'podzbiór' i dlaczego mając do wyboru dwa, preferujesz określony.
np. xxx("dir1/dir2/plik") // jakie ma być zachowanie dla struktury:

dir1/plik1,plik2,plik3
dir1/dir2/plik4,plik5,plik6 

Mam wrażenie, że masz drzewo obiektów, wołasz metodę i zwraca Ci węzeł z takiego drzewa wg jakichś bliżej nieokreślonych warunków (accessAny ? ).

1

@TomRiddle: i jak ją nazwałeś? :D

0
scibi92 napisał(a):

@TomRiddle: i jak ją nazwałeś? :D

Jeszcze jej nie wdrożyłem, więc nie ma ustalonej nazwy. Zastanawiam się nad tym retain() albo isolated().

4

Widzę, że fani serialu ciągle czekają na kolejne odcinki. ;)

@TomRiddle - tylko zastanów się, czy ktoś widzący kod po raz pierwszy na oczy, domyśli się po nazwie retain albo isolated co dana funkcja robi. Bo jak dla mnie, to te nazwy są równie wiele mówiące, co notHotDog. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1