-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Expose more detailed analysis of individual words #4
Conversation
5f81c33
to
366f507
Compare
366f507
to
a8119ad
Compare
} else { | ||
throw new IllegalStateException("Error in trimming hyphens"); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tää vaikuttaa vähän epäilyttävältä. Jos ei muuten, niin ainakin nimeämiseltään, koska jotenkin nimen perusteella olettaisi että toteutus olisi ekvivalentti toString().replace("-", "")
kanssa, mutta ilmeisesti näin ei ole.
Muutenkin, tuonne else-haaraanhan ei ole mahdollista mennä, mutta kääntäjä ei vain tajuta sitä koodin rakenteesta enkä minäkään ensin. Mitä jos toi olisikin:
if (s.isEmpty() || s.equals("-"))
return "";
int startOffset = startsWithChar(s, '-') ? 1 : 0;
int endOffset = endsWithChar(s, '-') ? 1 : 0;
return s.substring(startOffset, s.length() - endOffset);
Eikös tämä ole semantiikaltaan sama? Ainakin mulle kommunikoi paremmin mistä on kyse. Toi jopa on allokoinneiltaan identtinen, koska String.substring sisältää optimoinnin:
if (beginIndex == 0 && endIndex == length) {
return this;
}
Muutenkin mietin tarvitseeko tuon olla rajapinnassa default-toteutuksena. Ei kai kellään rajapinnan toteuttajalla ole tarvetta overridetä sitä? Harkitsisin ihan vain jotain removeLeadingAndTrailing(s, '-')
-funktiota. Tuollaisella funktiolle olisi helpompi kirjoittaa testitkin kun ei tule koko muuta roskaa mukana. Ja jos haluaa sen default-toteutuksen sinne rajapintaan, niin sekin voisi olla vain kutsu tuohon staattiseen funktioon.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Kyseistä logiikkaa tarvitsee myös pluginin algoritmeissa, joissa käsitellään yhdyssanojen palasia, mutta sen verran pieni se on myös monistaa, joten ehkä se on parempi vain ottaa pois tästä rajapinnasta.
throw new IllegalStateException("Base form parts empty"); | ||
|
||
String result = baseFormParts[0]; | ||
baseFormParts = Arrays.copyOfRange(baseFormParts, 1, baseFormParts.length); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tää vähän sattuu muhun. Sen sijaan että allokoidaan ja kopioidaan, eikö voisi vain pitää indeksiä ensimmäiseen konsumoimattomaan baseFormiin. Eli olisi:
private int baseFormPartIndex = 0;
private @NotNull String popBaseForm() {
if (isConsumed())
throw new IllegalStateException("Base form parts empty");
return baseFormParts[baseFormPartIndex++];
}
private boolean isConsumed() {
return baseFormPartsIndex >= baseFormParts.length;
}
Tai jos ei halua noin matalan tason juttua, niin wrapata koko paska ArrayDeque
-luokkaan ja kutsua sille removeFirst:iä. Se tekee sisäisesti saman jutun, että manipuloi vain indeksejä eikä kopioi mitään.
|
||
private boolean isNotConsumed() { | ||
return !isConsumed(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mä en tekisi omaa not-metodiaan vain yhden käyttökerran takia. Kyllä se if (! currentStrongMorpheme.isConsumed())
olisi ihan tarpeeksi selkeä. Itse asiassa sanoisin että se on jopa selkeämpi, koska tässä koodissa tulee korostuu selkeämmin se että eka ja toinen if
-testaavat täsmälleen saman asian arvoja.
if (!currentStrongMorpheme.isConsumed()) {
currentPart.addBaseForm(currentStrongMorpheme.popBaseForm());
currentStrongMorpheme.addPart(currentPart.toWordPart());
if (currentStrongMorpheme.isConsumed()) {
wordParts.add(currentStrongMorpheme.toWordPart());
currentStrongMorpheme.reset();
}
}
a8119ad
to
bb1c76a
Compare
No description provided.