JavaRush /جاوا بلاگ /Random-UR /جاوا میں برانچنگ

جاوا میں برانچنگ

گروپ میں شائع ہوا۔
اس مضمون میں ہم عام طور پر کمپیوٹر پروگراموں اور جاوا میں لکھے گئے پروگراموں میں برانچنگ کے تصور کو دیکھیں گے۔ آئیے کنٹرول ڈھانچے کے بارے میں بات کرتے ہیں جیسے:
  • if-then(یا if)
  • if-then-else(یا if-else)
  • switch-case
جاوا میں برانچنگ - 1

برانچنگ

آئیے بنیادی تصورات سے شروع کریں۔ کوئی بھی پروگرام کمپیوٹر کے ذریعے عمل میں آنے والی کمانڈز کا مجموعہ ہوتا ہے۔ اکثر، حکموں کو ایک کے بعد ایک ترتیب وار عمل میں لایا جاتا ہے۔ تھوڑا کم اکثر (لیکن اب بھی اکثر) ایسے حالات پیدا ہوتے ہیں جب آپ کو پروگرام کمانڈز کے ترتیب وار بہاؤ کو تبدیل کرنے کی ضرورت ہوتی ہے۔ بعض اوقات، بعض شرائط پر منحصر ہے، یہ ضروری ہو سکتا ہے کہ حکموں کے ایک بلاک کو دوسرے کے بجائے عمل میں لایا جائے۔ اور جب یہ حالات بدل جائیں تو اس کے برعکس کریں۔ مثال کے طور پر، ایسی متعدد سائٹس ہیں جن پر 18 سال سے کم عمر کے افراد کے لیے جانا ممنوع ہے۔ عام طور پر، جب پہلی بار ایسے وسائل پر جاتے ہیں، تو صارف کو کسی نہ کسی شکل میں خوش آمدید کہا جاتا ہے جس میں صارف کو عمر کی حد کے بارے میں متنبہ کیا جاتا ہے اور اس کی تاریخ پیدائش درج کرنے کو کہا جاتا ہے۔ پھر، صارف کے داخل کردہ ڈیٹا پر منحصر ہے، اسے یا تو وسائل میں داخل ہونے کی اجازت ہوگی یا نہیں۔ یہ فعالیت اس کے ذریعہ فراہم کی جاتی ہے جسے عام طور پر برانچنگ کہا جاتا ہے۔ آئیے ایک اور تشبیہ دیتے ہیں۔ آئیے اپنے آپ کو سات سڑکوں کے سنگم پر تصور کریں۔ ہمیں ایک انتخاب کا سامنا ہے: بائیں یا دائیں مڑیں، یا سیدھے جائیں۔ ہمارا انتخاب کچھ شرائط پر مبنی ہے۔ ہمیں بیک وقت کئی سڑکیں لینے کا موقع بھی نہیں ملتا۔ وہ. کچھ شرائط پر منحصر ہے، ہمیں ایک سڑک کا انتخاب کرنا پڑے گا۔ برانچنگ پر بھی یہی اصول لاگو ہوتا ہے۔ اب برانچنگ کی تعریف دینے کی کوشش کرتے ہیں۔ برانچنگ ایک الگورتھمک تعمیر ہے جس میں، کسی حالت کی سچائی پر منحصر ہے، اعمال کے کئی سلسلے میں سے ایک انجام دیا جاتا ہے۔ برانچنگ کو بالکل تمام پروگرامنگ زبانوں میں لاگو کیا جاتا ہے (زیادہ تر امکان ہے)۔ جاوا پروگرامنگ زبان میں کئی نام نہاد کنٹرول تعمیرات ہیں جو آپ کو اپنے پروگرام میں برانچنگ کو لاگو کرنے کی اجازت دیتی ہیں۔ پروگرامنگ زبان میں اس طرح کی 3 تعمیرات ہیں:
  • آپریٹرif-then
  • آپریٹرif-then-else
  • ٹرنری آپریٹر? :
if-elseاس مضمون میں ہم اور آپریٹرز کو دیکھیں گے switch-case۔

پھر اگر

آپریٹر if-then، یا ifشاید سب سے عام آپریٹر۔ اظہار "ہاں، لکھیں 1 اگر" پہلے ہی مقبول ہو چکا ہے۔ آپریٹر ifکا مندرجہ ذیل ڈھانچہ ہے:
if (bool_condition) {
	statement
}
اس ڈیزائن میں:
  • bool_conditionایک بولین اظہار ہے جو درست یا غلط کا اندازہ کرتا ہے۔ اس اظہار کو شرط کہتے ہیں۔
  • statement- ایک حکم (ایک سے زیادہ ہو سکتا ہے) جس پر عمل کیا جانا چاہیے اگر شرط درست ہے ( bool_statement==true)
اس تعمیر کو اس طرح پڑھا جا سکتا ہے:

Если (bool_condition), то {statement}
یہاں کچھ مثالیں ہیں:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    }
}
اس پروگرام میں صارف سے کہا جاتا ہے کہ وہ اپنے اسمارٹ فون پر بیٹری چارج ہونے کا فیصد درج کرے۔ اگر 10 فیصد سے کم چارج رہ جاتا ہے، تو پروگرام صارف کو اسمارٹ فون کو چارج کرنے کی ضرورت کے بارے میں خبردار کرے گا۔ یہ سادہ ترین ڈیزائن کی ایک مثال ہے if۔ یہ بات قابل غور ہے کہ اگر متغیر `a` 10 سے بڑا یا اس کے برابر ہے، تو کچھ نہیں ہوگا۔ پروگرام اس کوڈ پر عمل درآمد جاری رکھے گا جو اس کی پیروی کرتا ہے if۔ یہ بھی نوٹ کریں کہ اس معاملے میں، کنسٹرکٹ میں ifعمل کرنے کے لیے صرف ایک ہی ترتیب ہے: ٹیکسٹ پرنٹ کریں، یا کچھ نہ کریں۔ یہ ایک "شاخ" کے ساتھ برانچنگ کی تبدیلی ہے۔ یہ کبھی کبھی ضروری ہوتا ہے۔ مثال کے طور پر، جب ہم خود کو غلط اقدار سے بچانا چاہتے ہیں۔ مثال کے طور پر، اگر سٹرنگ ہے تو ہم اسٹرنگ میں حروف کی تعداد نہیں جان سکتے null۔ ذیل کی مثالیں:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    }
}
مرکزی طریقہ پر عمل کرنے کے نتیجے میں، کنسول میں درج ذیل آؤٹ پٹ ہوں گے:

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
اسے چیک کرنے کی بدولت string != null، ہم پروگرام میں غلطیوں سے بچنے کے قابل ہو گئے۔ اور ایسی صورتوں میں کچھ نہ کریں جہاں متغیر stringبرابر تھا null۔

اگر-تو-اور

اگر معمول کے معاملے میں ifپروگرام کا انتخاب ہوتا ہے: "کچھ کرو یا کچھ نہ کرو"، تو پھر if-elseکسی پروگرام کو منتخب کرنے میں یہ "ایک کام یا دوسرا کرنا" پر آتا ہے۔ "کچھ نہ کریں" کا آپشن غائب ہو جاتا ہے۔ اس قسم کی برانچنگ کے ساتھ عملدرآمد کی دو یا زیادہ اقسام (یا شاخوں کی تعداد) ہیں۔ آئیے اس معاملے پر غور کریں جب دو آپشن ہوں۔ پھر کنٹرول ڈھانچہ مندرجہ ذیل شکل رکھتا ہے:
if (bool_condition) {
	statement1
} else {
	statement2
}
یہاں:
  • bool_statementایک بولین اظہار ہے جو درست یا غلط کا اندازہ کرتا ہے۔ اس اظہار کو شرط کہتے ہیں۔
  • statement1- ایک حکم (ایک سے زیادہ ہو سکتا ہے) جس پر عمل کیا جانا چاہیے اگر شرط درست ہے ( bool_statement==true)
  • statement2- ایک حکم (ایک سے زیادہ ہو سکتا ہے) جس پر عمل کرنا ضروری ہے اگر شرط غلط ہے ( bool_statement==false)
اس تعمیر کو اس طرح پڑھا جا سکتا ہے:

Если (bool_condition), то {statement1}
Иначе {statement2}
یہاں ایک مثال ہے:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    } else {
        System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
    }
}
اسمارٹ فون پر بیٹری کی سطح کے بارے میں ایک ہی مثال۔ صرف اس صورت میں جب پچھلی بار پروگرام نے صرف اسمارٹ فون کو چارج کرنے کی ضرورت کے بارے میں خبردار کیا تھا، اس بار ہمارے پاس ایک اضافی اطلاع ہے۔ آئیے اس کو دیکھتے ہیں if:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
اگر a < 10درست ہے (بیٹری لیول 10 سے کم) تو پروگرام ایک متن پرنٹ کرے گا۔ دوسری صورت میں، اگر شرط a < 10پوری نہیں ہوتی ہے، تو پروگرام بالکل مختلف متن کو آؤٹ پٹ کرے گا۔ آئیے اپنی دوسری مثال کو بھی حتمی شکل دیں، جس میں ہم نے ایک لائن میں حروف کی تعداد ظاہر کی۔ پچھلی بار پروگرام نے کچھ آؤٹ پٹ نہیں کیا تھا اگر پاس کردہ سٹرنگ کے برابر تھی null۔ آئیے عام کو ifاس میں تبدیل کرکے اسے ٹھیک کرتے ہیں if-else:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    } else {
        System.out.println("Ошибка! Переданная строка равна null!");
    }
}
طریقہ کار میں ، ہم نے printStringSizeتعمیر میں ifایک بلاک شامل کیا else۔ اب، اگر ہم پروگرام چلاتے ہیں، تو یہ کنسول میں 2 لائنوں پر نہیں بلکہ 4 پر آؤٹ پٹ کرے گا، حالانکہ ان پٹ (طریقہ main) پچھلی بار کی طرح ہی رہتا ہے۔ متن جو پروگرام آؤٹ پٹ کرے گا:

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
حالات اس وقت قابل قبول ہوتے ہیں جب elseان پر عمل درآمد کے حکموں سے نہیں، بلکہ کسی اور کے ذریعے کیا جاتا ہے if۔ پھر تعمیر مندرجہ ذیل شکل لیتا ہے:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
اس ڈیزائن میں کئی شرائط ہیں:
  • bool_condition1
  • bool_condition2
  • bool_conditionN
ایسی شرائط کی تعداد محدود نہیں ہے۔ ہر حالت کے اپنے احکام ہیں:
  • بیان 1
  • بیان 2
  • بیان این
ہر ایک statementمیں کوڈ کی 1 یا زیادہ لائنیں ہوسکتی ہیں۔ حالات کو ایک ایک کرکے چیک کیا جاتا ہے۔ ایک بار پہلی حقیقی حالت کا تعین ہو جانے کے بعد، حقیقی حالت کے ساتھ "بندھے" حکموں کا ایک سلسلہ عمل میں لایا جائے گا۔ ان کمانڈز پر عمل درآمد کرنے کے بعد، پروگرام بلاک سے باہر نکل جائے گا if، چاہے آگے مزید جانچ پڑتال ہو۔ اگر اوپر بیان کردہ شرائط میں سے کوئی بھی درست نہیں ہے تو "StatementN+1" کا اظہار عمل میں لایا جائے گا۔ اس تعمیر کو اس طرح پڑھا جا سکتا ہے:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
اس معاملے میں آخری لائن اختیاری ہے۔ آپ آخری تنہا کے بغیر بھی کر سکتے ہیں else۔ اور پھر ڈیزائن مندرجہ ذیل شکل لے گا:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
اور یہ اس طرح پڑھے گا:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
اس کے مطابق، اگر ان میں سے کوئی بھی شرط صحیح نہیں ہے، تو پھر کوئی حکم نافذ نہیں کیا جائے گا۔ آئیے مثالوں کی طرف چلتے ہیں۔ آئیے اسمارٹ فون پر چارج لیول کے ساتھ صورتحال پر واپس آتے ہیں۔ آئیے ایک پروگرام لکھتے ہیں جو مالک کو اس کے آلے کے چارج لیول کے بارے میں مزید تفصیل سے مطلع کرے گا:
public static void main(String[] args) {
    String alert5 = "Я скоро отключусь, но помни меня бодрым";
    String alert10 = "Я так скучаю по напряжению в моих жилах";
    String alert20 = "Пора вспоминать, где лежит зарядка";
    String alert30 = "Псс, пришло время экономить";
    String alert50 = "Хм, больше половины израсходовали";
    String alert75 = "Всё в порядке, заряда больше половины";
    String alert100 = "Я готов к приключениям, если что..";
    String illegalValue = "Такс, кто-то ввел некорректное meaning";

    Scanner scanner = new Scanner(System.in);
    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a <= 0 || a > 100) {
        System.out.println(illegalValue);
    } else if (a < 5) {
        System.out.println(alert5);
    } else if (a < 10) {
        System.out.println(alert10);
    } else if (a < 20) {
        System.out.println(alert20);
    } else if (a < 30) {
        System.out.println(alert30);
    } else if (a < 50) {
        System.out.println(alert50);
    } else if (a < 75) {
        System.out.println(alert75);
    } else if (a <= 100) {
        System.out.println(alert100);
    }
}
مثال کے طور پر، اس صورت میں، اگر صارف 15 میں داخل ہوتا ہے، تو پروگرام اسکرین پر ظاہر ہوگا: "یہ یاد رکھنے کا وقت ہے کہ چارجر کہاں ہے۔" اس حقیقت کے باوجود کہ 15 کم ہے اور 30 ​​اور 50 اور 75 اور 100، اسکرین پر آؤٹ پٹ صرف 1 ہوگا۔ آئیے ایک اور ایپلی کیشن لکھتے ہیں جو کنسول پر پرنٹ کرے گا کہ ہفتے کا کون سا دن ہے:
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    if (dayOfWeek == DayOfWeek.SUNDAY) {
        System.out.println("Сегодня воскресенье");
    } else if (dayOfWeek == DayOfWeek.MONDAY) {
        System.out.println("Сегодня понедельник");
    } else if (dayOfWeek == DayOfWeek.TUESDAY) {
        System.out.println("Сегодня вторник");
    } else if (dayOfWeek == DayOfWeek.WEDNESDAY) {
        System.out.println("Сегодня среда");
    } else if (dayOfWeek == DayOfWeek.THURSDAY) {
        System.out.println("Сегодня четверг");
    } else if (dayOfWeek == DayOfWeek.FRIDAY) {
        System.out.println("Сегодня пятница");
    } else if (dayOfWeek == DayOfWeek.SATURDAY) {
        System.out.println("Сегодня суббота");
    }
}
یقیناً یہ آسان ہے، لیکن نیرس متن کی کثرت آپ کی آنکھوں کو ہلکا کرتی ہے۔ ایسے حالات میں جہاں ہمارے پاس اختیارات کی ایک بڑی تعداد ہے، آپریٹر کا استعمال کرنا بہتر ہے، جس پر ذیل میں بات کی جائے گی۔

سوئچ کیس

بہت سی شاخوں کے ساتھ بولڈ کا متبادل ifآپریٹر ہے switch-case۔ ایسا لگتا ہے کہ یہ آپریٹر کہتا ہے "لہذا، ہمارے پاس یہ متغیر ہے۔ دیکھو، اگر اس کی قیمت `x` کے برابر ہے، تو ہم یہ کرتے ہیں اور وہ، اگر اس کی قدر `y` کے برابر ہے، تو ہم اسے مختلف طریقے سے کرتے ہیں، اور اگر یہ مذکورہ بالا میں سے کسی کے برابر نہیں ہے، تو ہم صرف کرتے ہیں۔ یہ اس طرح... ” اس آپریٹر کا ڈھانچہ درج ذیل ہے۔
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
آئیے اس ڈھانچے کو مزید تفصیل سے دیکھیں۔ argument ایک متغیر ہے جس کی قدر کا ہم فرضی مختلف اختیارات کے ساتھ موازنہ کریں گے۔ متغیر ہونا ضروری ہے final۔ یہ کہنا بھی قابل ہے کہ آپریٹر switchدلیل کے طور پر کسی بھی ڈیٹا کی قسم کی حمایت نہیں کرتا ہے۔ درست اقسام ذیل میں درج ہیں:
  • بائٹ اور بائٹ
  • مختصر اور مختصر
  • int اور Integer
  • چار اور کردار
  • enum
  • تار
case value1 (value2, valueN)- یہ قدریں ہیں، مخصوص مستقل جن کے ساتھ ہم متغیر کی قدر کا موازنہ کرتے ہیں argument۔ نیز، ہر کیس کمانڈز کے ایک سیٹ کی وضاحت کرتا ہے جس پر عمل درآمد کی ضرورت ہے۔ statement1, statement2, statementNکمانڈز ہیں جن پر عمل درآمد کرنے کی ضرورت ہوگی اگر argumentیہ ان میں سے کسی ایک کے برابر نکلے value۔ مثال کے طور پر، اگر argumentیہ برابر ہے value2، تو پروگرام عمل میں آئے گا statement2۔ defaultاور default_statement"پہلے سے طے شدہ اقدار" ہیں۔ اگر argumentیہ پیش کردہ کسی کے برابر نہیں ہے valueتو شاخ کو متحرک کیا جائے گا defaultاور کمانڈ پر عمل درآمد کیا جائے گا default_statement۔ defaultاور default_statementآپریٹر کی اختیاری صفات ہیں switch-case۔ break- آپ دیکھ سکتے ہیں کہ ہر کیس بلاک کے آخر میں ایک بیان ہوتا ہے break۔ یہ آپریٹر اختیاری بھی ہے اور مختلف کیسز کے کوڈ کو الگ کرنے کا کام کرتا ہے۔ بعض اوقات مختلف معاملات میں ایک جیسے اعمال انجام دینے کی ضرورت ہوتی ہے: پھر ان معاملات کو یکجا کیا جاسکتا ہے۔ اس صورت میں، کلیدی لفظ کو breakچھوڑ دیا جاتا ہے، اور آپریٹر کی ساخت switch-caseاس طرح نظر آئے گی:
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
یہ بات قابل غور ہے کہ `case valueX:` اور `case valueY:` کے درمیان کوئی آپریٹر نہیں ہے break۔ یہاں، اگر argumentاس کے برابر ہے value1، تو اسے پھانسی دی جائے گی statement1۔ اور اگر دلیل valueXدونوں کے برابر ہے valueYتو statementXY. آئیے سمجھنے میں مشکل نظریہ کو سمجھنے میں آسان پریکٹس میں تبدیل کریں۔ آئیے آپریٹر کا استعمال کرتے ہوئے مثال کو ہفتے کے دنوں کے ساتھ دوبارہ لکھتے ہیں switch-case۔
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
            System.out.println("Сегодня воскресенье");
            break;
        case MONDAY:
            System.out.println("Сегодня понедельник");
            break;
        case TUESDAY:
            System.out.println("Сегодня вторник");
            break;
        case WEDNESDAY:
            System.out.println("Сегодня среда");
            break;
        case THURSDAY:
            System.out.println("Сегодня четверг");
            break;
        case FRIDAY:
            System.out.println("Сегодня пятница");
            break;
        case SATURDAY:
            System.out.println("Сегодня суббота");
            break;
    }
}
اب ایک ایسا پروگرام لکھتے ہیں جو آپریٹر کا استعمال کرتے ہوئے دکھاتا ہے کہ آج کا دن ہفتے کا دن ہے یا ویک اینڈ switch-case۔
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
        case SATURDAY:
            System.out.println("Сегодня выходной");
            break;
        case FRIDAY:
            System.out.println("Завтра выходной");
            break;
        default:
            System.out.println("Сегодня рабочий день");
            break;

    }
}
میں تھوڑی وضاحت کرتا ہوں۔ اس پروگرام میں ہمیں ملتا ہے enum DayOfWeek، جو ہفتے کے موجودہ دن کو ظاہر کرتا ہے۔ اگلا، ہم یہ دیکھتے ہیں کہ آیا ہمارے متغیر کی قدر دونوں میں سے کسی ایک dayOfWeekکی قدر کے برابر ہے یا نہیں ۔ اگر ایسا ہے تو، پروگرام "آج چھٹی ہے" دکھاتا ہے۔ اگر نہیں، تو ہم چیک کرتے ہیں کہ آیا متغیر کی قدر کی قدر کے برابر ہے ۔ اگر ایسا ہے تو، پروگرام دکھاتا ہے "کل ایک دن کی چھٹی ہے۔" اگر اس صورت میں کوئی نہیں ہے، تو ہمارے پاس کچھ اختیارات ہیں، کوئی بھی باقی دن ایک ہفتے کا دن ہے، لہذا پہلے سے طے شدہ طور پر، اگر آج جمعہ نہیں، ہفتہ اور اتوار نہیں، تو پروگرام "آج کام کا دن ہے" دکھائے گا۔ SUNDAYSATURDAYdayOfWeekFRIDAY

نتیجہ

تو، اس مضمون میں ہم نے دیکھا کہ کمپیوٹر پروگرام میں برانچنگ کیا ہے۔ ہم نے یہ بھی معلوم کیا کہ جاوا میں برانچنگ کو لاگو کرنے کے لیے کون سے کنٹرول ڈھانچے استعمال کیے جاتے ہیں۔ ہم نے اس طرح کے ڈیزائن پر تبادلہ خیال کیا:
  • if-then
  • if-then-else
  • switch-case
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION