Skip to content

Commit

Permalink
Update 6.md
Browse files Browse the repository at this point in the history
Added some more example of Exception and How to find out where to use try-catch block.
  • Loading branch information
ashikuzzaman-ar committed Nov 2, 2016
1 parent 27dfd1c commit 8e6683a
Showing 1 changed file with 67 additions and 0 deletions.
67 changes: 67 additions & 0 deletions 6.md
Expand Up @@ -208,6 +208,73 @@ public void openFile() {

অর্থাৎ আমরা শুধুমাত্রে তখনি ফাইনালী ব্লক ব্যবহার করি যখন আমরা নো ম্যাটার হুয়াট, একটি কোড ব্লক সবসময়ই এক্সিকউট করতে চাই।

**Identifying Exception Point**

`try` , `catch` এব`finally` ব্লক ব্যাবহার করে এক্সেপশন হ্যান্ডেল করার সময় আমাদের যে বিষয়টির উপর বিশেষ গুরুত্ব দিতে হবে সেটি হল নির্দিষ্ট পয়েন্টেই কেবল`try` এবং `catch` ব্যাবহার করা । ঠিক যেখানে এক্সেপশন ঘটবে বা ঘটার সম্ভাবনা থাকবে সেখানেই কেবল আমাদের প্রপার এক্সেপশন হ্যান্ডেলিং থাকা জরুরী । অন্যথায় কোড রান করবে কিন্তু কাঙ্খিত ফলাফল পাওয়া যাবেনা ।

উদাহরন হিসাবে আমরা মনে করি আমাদের একটি মেথড লিখতে বলা হল যেটিতে একটি স্ট্রিং অ্যারে পাস করা হবে এবং সেই অ্যারে এর মাঝ থেকে যে স্ট্রিং গুলা ইন্টিজার নাম্বার রিপ্রেজেন্ট করে সেগুলার যোগফল রিটার্ন করতে হবে । আমরা যদি কোডটি এভাবে লিখিঃ

```java
public class Main {

public static void main(String[] args) {

String[] strings = {"1", "2", "3", "4", "5", "6"};
System.out.println(new Main().getSum(strings));
}

public int getSum(String[] strings){

int result = 0;

try {

for (String string : strings) {
result += (Integer.valueOf(string));
}
} catch (NumberFormatException e) {

System.err.println(e);
}

return result;
}
}
```

উপরের কোডটি 21 সংখ্যাটি প্রিন্ট করবে যেটি getSum নামক মেথটি রিটার্ন করছে । কিন্তু আমরা যদি ইনপুট স্ট্রিংটি একটু মডিফাই করে String[] strings = {"1", "2", "3", "four", "5", "6"}; করে দেই তাহলে প্রথমে প্রিন্ট করবে 6 এবং তারপর প্রিন্ট করবে `java.lang.NumberFormatException: For input string: "four` । কিন্তু প্রবলেম অনুযায়ী প্রিন্ট করা কথা ছিল 17 । কারন four বাদ দিলে বাকী যতগুলা স্ট্রিং ইন্টিজার নাম্বার রিপ্রেজেন্ট করে সেগুলার যোগফল । সেক্ষেত্রে আমরা যদি কোডটি একটু মডিফাই করে ঠিক যেখানে এক্সেপশন হওয়া সম্ভব সেখানেই `try` ব্লকটি ব্যাবহার করতাম তাহলে এই সমস্যা থেকে মুক্তি পাওয়া সম্ভব ছিল । কোডটি যদি এভাবে করিঃ

```java
public class Main {

public static void main(String[] args) {

String[] strings = {"1", "2", "3", "four", "5", "6"};
System.out.println(new Main().getSum(strings));
}

public int getSum(String[] strings) {

int result = 0;

for (String string : strings) {

try {

result += (Integer.valueOf(string));
} catch (NumberFormatException e) {

System.err.println(e);
}
}

return result;
}
}
```

এবার যদি আমরা String[] strings = {"1", "2", "3", "four", "5", "6"}; এই স্ট্রিংটি ইনপুট আকারে দেই তাহলে দেখবো একটা এক্সেপশন ঠিকই থ্রো করছে তবে রেজাল্ট হিসাবে আমরা যেটি চেয়েছিলাম সেটিও প্রিন্ট করছে । এভাবে আমরা ঠিক নির্দিষ্ট পয়েন্টে এক্সেপশন ডিটেক্ট করে হ্যান্ডেল করতে পারি । এতে করে ওভারঅল কোডের পার্ফরমেন্স যেমন বাড়বে তেমন কোড অনেক বেশি বাগফ্রী ও হবে ।


**Checked or Unchecked Exceptions**

Expand Down

0 comments on commit 8e6683a

Please sign in to comment.