-
-
Notifications
You must be signed in to change notification settings - Fork 700
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
Adding approach for Bob #2861
Merged
Merged
Adding approach for Bob #2861
Changes from all commits
Commits
Show all changes
45 commits
Select commit
Hold shift + click to select a range
a58600a
Adding approach for Bob
jagdish-15 fa97c07
Fixing style errors
jagdish-15 f5f7680
Fixing style errors
jagdish-15 f6ae1f1
Fixing style errors
jagdish-15 4be572f
Adding uuid for new approach of bob exercise
jagdish-15 da71900
Fixing nameing issues
jagdish-15 51a8cd3
Adding snippet.txt
jagdish-15 3ddea06
FIxing formatting of config.josn for approach of bob
jagdish-15 64261e0
Adding approach for Bob
jagdish-15 b644b1c
Fixing style errors
jagdish-15 1dcbe19
Fixing style errors
jagdish-15 f06c782
Fixing style errors
jagdish-15 d0346c1
Adding uuid for new approach of bob exercise
jagdish-15 8f2ac6b
Fixing nameing issues
jagdish-15 0bf84b5
Adding snippet.txt
jagdish-15 e509381
FIxing formatting of config.josn for approach of bob
jagdish-15 f0543c3
Chnaging the introduction.md for consistancy
jagdish-15 e67fc43
Merge branch 'main' into add-approach-bob
jagdish-15 ad27bb2
Chnaging the introduction.md for consistancy
jagdish-15 6def244
Chnaging the introduction.md for fixing styling errors
jagdish-15 498ae46
Update exercises/practice/bob/.approaches/introduction.md
jagdish-15 ff35ee4
Update exercises/practice/bob/.approaches/method-based/content.md
jagdish-15 b017e6c
Merge branch 'main' into add-approach-bob
jagdish-15 e8da28d
Updating approach bob
jagdish-15 c3dcc96
Updating approach name
jagdish-15 173ce32
Updating content of if statements approach
jagdish-15 521160b
Updating content of if statements approach
jagdish-15 eaa5cdf
Updating content of if statements approach
jagdish-15 1802823
Merge branch 'main' into add-approach-bob
jagdish-15 fc74587
Merge branch 'main' into add-approach-bob
jagdish-15 2e6b670
Changing approach names
jagdish-15 1093c5b
Changing content titles for consistancy
jagdish-15 f73bf04
Merge branch 'main' into add-approach-bob
jagdish-15 c43db37
Update exercises/practice/bob/.approaches/introduction.md
jagdish-15 1b3feed
Merge branch 'main' into add-approach-bob
jagdish-15 b9bc033
Renaming a approach and some other fixes
jagdish-15 51bea83
Fixing lint issue
jagdish-15 7beebce
Changing the codeblock in intorduction to match with approach content
jagdish-15 3663467
Fixing consistnacy issues
jagdish-15 ad5c8e6
Adding caution in method-based-if-statement approach
jagdish-15 5c9fd46
Update exercises/practice/bob/.approaches/method-based-if-statements/…
jagdish-15 7761f47
Update exercises/practice/bob/.approaches/introduction.md
jagdish-15 017e1c7
Update exercises/practice/bob/.approaches/method-based-if-statements/…
jagdish-15 9f37095
Small formatting fixes
jagdish-15 c1c9bbd
Small formatting fixes
jagdish-15 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
99 changes: 99 additions & 0 deletions
99
exercises/practice/bob/.approaches/method-based-if-statements/content.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
# Method-Based `if` statements | ||
|
||
```java | ||
class Bob { | ||
String hey(String input) { | ||
var inputTrimmed = input.trim(); | ||
|
||
if (isSilent(inputTrimmed)) { | ||
return "Fine. Be that way!"; | ||
} | ||
if (isShouting(inputTrimmed) && isQuestioning(inputTrimmed)) { | ||
return "Calm down, I know what I'm doing!"; | ||
} | ||
if (isShouting(inputTrimmed)) { | ||
return "Whoa, chill out!"; | ||
} | ||
if (isQuestioning(inputTrimmed)) { | ||
return "Sure."; | ||
} | ||
|
||
return "Whatever."; | ||
} | ||
|
||
private boolean isShouting(String input) { | ||
return input.chars() | ||
.anyMatch(Character::isLetter) && | ||
input.chars() | ||
.filter(Character::isLetter) | ||
.allMatch(Character::isUpperCase); | ||
} | ||
|
||
private boolean isQuestioning(String input) { | ||
return input.endsWith("?"); | ||
} | ||
|
||
private boolean isSilent(String input) { | ||
return input.length() == 0; | ||
} | ||
} | ||
``` | ||
|
||
In this approach, the different conditions for Bob’s responses are separated into dedicated private methods within the `Bob` class. | ||
This method-based approach improves readability and modularity by organizing each condition check into its own method, making the main response method easier to understand and maintain. | ||
|
||
## Explanation | ||
|
||
This approach simplifies the main method `hey` by breaking down each response condition into helper methods: | ||
|
||
### Trimming the Input | ||
|
||
The `input` is trimmed using the `String` [`trim()`][trim] method to remove any leading or trailing whitespace. | ||
This helps to accurately detect if the input is empty and should prompt a `"Fine. Be that way!"` response. | ||
|
||
~~~~exercism/caution | ||
Note that a `null` `string` would be different from a `String` of all whitespace. | ||
A `null` `String` would throw a `NullPointerException` if `trim()` were applied to it. | ||
~~~~ | ||
|
||
### Delegating to Helper Methods | ||
|
||
Each condition is evaluated using the following helper methods: | ||
|
||
1. **`isSilent`**: Checks if the trimmed input has no characters. | ||
2. **`isShouting`**: Checks if the input is all uppercase and contains at least one alphabetic character, indicating shouting. | ||
3. **`isQuestioning`**: Verifies if the trimmed input ends with a question mark. | ||
|
||
This modular approach keeps each condition encapsulated, enhancing code clarity. | ||
|
||
### Order of Checks | ||
|
||
The order of checks within `hey` is important: | ||
|
||
1. Silence is evaluated first, as it requires an immediate response. | ||
2. Shouted questions take precedence over individual checks for shouting and questioning. | ||
3. Shouting comes next, requiring its response if not combined with a question. | ||
4. Questioning (a non-shouted question) is checked afterward. | ||
|
||
This ordering ensures that Bob’s response matches the expected behavior without redundancy. | ||
|
||
## Shortening | ||
|
||
When the body of an `if` statement is a single line, both the test expression and the body _could_ be put on the same line, like so: | ||
|
||
```java | ||
if (isSilent(inputTrimmed)) return "Fine. Be that way!"; | ||
``` | ||
|
||
or the body _could_ be put on a separate line without curly braces: | ||
|
||
```java | ||
if (isSilent(inputTrimmed)) | ||
return "Fine. Be that way!"; | ||
``` | ||
|
||
However, the [Java Coding Conventions][coding-conventions] advise always using curly braces for `if` statements, which helps to avoid errors. | ||
Your team may choose to overrule them at its own risk. | ||
|
||
[trim]: https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim() | ||
[coding-conventions]: https://www.oracle.com/java/technologies/javase/codeconventions-statements.html#449 |
8 changes: 8 additions & 0 deletions
8
exercises/practice/bob/.approaches/method-based-if-statements/snippet.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
if (isSilent(inputTrimmed)) | ||
return "Fine. Be that way!"; | ||
if (isShouting(inputTrimmed) && isQuestioning(inputTrimmed)) | ||
return "Calm down, I know what I'm doing!"; | ||
if (isShouting(inputTrimmed)) | ||
return "Whoa, chill out!"; | ||
if (isQuestioning(inputTrimmed)) | ||
return "Sure."; |
2 changes: 1 addition & 1 deletion
2
.../bob/.approaches/if-statements/content.md → ...s/variable-based-if-statements/content.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
# `if` statements | ||
# Variable-Based `if` statements | ||
|
||
```java | ||
import java.util.function.Predicate; | ||
|
File renamed without changes.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Reading this from top to bottom, I think seeing "method-based if statements" and then "if statements" is a little jarring (the first time, I thought "if statements" should come first because the heading "if statements" suggests it is a more general than "method-based if statements"). To improve the flow, I'd suggest either moving this "if statements" approach to appear before the "method-based if statements" or renaming this approach to something like "variables-based if statements".