"Hi, Amigo! Let's continue to talk about mistakes. This time, we'll explore mistakes that the compiler will not always help you with. Mag-ingat at may matutunan ka tungkol sa iyong sarili."
"Handa akong makinig, Diego. Sana hindi ito masyadong nakakahiya para sa akin."
Paghahambing ng mga bagay sa==
"Ang aming listahan ng mga nangungunang paboritong pagkakamali ng newbie programmer ay nagsisimula sa paghahambing ng mga bagay (lalo na ang mga string) gamit ang ==
operator"
Halimbawa:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1 == s2)
{
System.out.println("The strings are equal");
}
"Madalas kong ginawa iyon. Ngayon ay malinaw kong nakikita na ang code na ito ay hindi kailanman magpapakita ng "The strings are equal", dahil if
inihahambing ng statement ang mga reference sa dalawang magkaibang string object."
"Oo. Kaya ang tamang opsyon ay:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1.equals(s2))
{
System.out.println("The strings are equal");
}
Pagbabago ng isang String
bagay
"Madalas nakakalimutan ng mga newbie programmer na ang lahat ng object ng klase ay hindi nababago , at ang bawat paraan ng String
klase ay nagbabalik ng bagong object — hindi nagbabago ang kasalukuyang object."
"Hindi pa ganoon katagal natutunan ko kung ano ang ibig sabihin ng immutable , ngunit sa palagay ko nagawa ko na ito.
"Medyo sigurado ako dito. Halimbawa:
String s = "Hello";
s.toUpperCase (); // Convert to uppercase
"Ang code na ito ay halos kapareho sa tamang code, ngunit hindi ito gagana gaya ng inaasahan. Hindi toUpperCase()
binabago ng pamamaraan ang object kung saan ito tinawag. Ang tamang code ay magiging ganito:
String s = "Hello";
String result = s.toUpperCase(); // Convert to uppercase
"Eksakto. Nagawa ko na, pero hindi ko man lang naintindihan kung ano ang mali. Salamat sa paglilinaw!"
Nakakalimutang simulan ang mga bagay na elemento ng isang array
"Ang isa pang karaniwang pagkakamali ay ang kalimutang simulan ang isang array variable. Halimbawa:
int[] array;
array[0] = 1;
array[0] = 2;
"Hindi gagana ang code na ito: kailangan mong tahasang itakda ang array variable na katumbas ng isang reference sa container object na mag-iimbak ng mga elemento ng array. Tamang bersyon:
int[] array = new int[10];
array[0] = 1;
array[0] = 2;
Paggamit ng isang lokal na variable sa halip na isang instance variable.
"Ang mga baguhan ay hindi gustong makabuo ng mahaba at makabuluhang mga pangalan para sa mga variable."
"Napakatotoo niyan. Para mabilis magawa ang mga bagay-bagay, minsan ay nagbibigay ako ng mga variable na pangalan tulad ng a
, b
, at i
."
"Huwag gawin iyan. Iyan ay isang malupit na bagay na dapat gawin kapag ang code ay may ilang mga variable na tulad niyan:
Ilagay ang numero 99 sa 100 mga cell ng isang array |
---|
|
"Mas mahirap na magkamali sa code na may wastong mga pangalan. Ang tamang bersyon ay ganito:
Ilagay ang numero 99 sa 100 mga cell ng isang array |
---|
|
Pag-alis ng item sa koleksyon
"Nakatingin ka na ba sa mga koleksyon?"
"Literally sa isang mata lang."
"Kung hindi mo alam kung ano ang pinag-uusapan ko, pagkatapos ay gumawa ng isang tala sa iyong sarili upang tingnan sa hinaharap. Kadalasan mayroong mga sitwasyon kapag ang isang partikular na elemento ay kailangang alisin mula sa isang koleksyon. Ang code ay halos katulad ng ito:
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 0, -5, -7, -12, 5, 15);
for (Integer value: list)
if (value < 0)
list.remove(value);
"Hindi gagana ang code na ito, dahil hindi ka maaaring gumamit ng for-each
loop upang sabay-sabay na daanan ang mga elemento ng isang koleksyon at baguhin ang koleksyong iyon.
"Mayroong ilang mga solusyon. Una, maaari kang dumaan sa isang koleksyon at baguhin ang isa pa:
Solusyon 1 |
---|
|
"Pangalawa, mula noong Java 8, ang mga koleksyon ay may removeIf()
pamamaraan, kung saan maaari kang magpasa ng isang panuntunan (lambda function) na nagsasaad kung aling mga elemento ang aalisin. Halimbawa:
Solusyon 2 |
---|
|
Paglalagay ng ilang mga klase na may public
modifier sa isang file
"Maaaring magkaroon lamang ng isang pampublikong klase sa isang file. Higit pang mga klase ang maaaring ideklara sa isang file, ngunit dapat silang mga panloob na klase ng isang pampublikong klase, o walang modifier. public
Halimbawa:
Mga nilalaman ng Solution.java file | Tandaan |
---|---|
|
Hindi ito pinapayagan: dalawang pampublikong klase sa isang file. |
|
Ngunit magagawa mo ito. Ang Pangunahing klase ay hindi pampubliko |
|
At magagawa mo ito. Ang Main class ay isang nested class |
Ang pagtawag sa mga ordinaryong (non-static) na pamamaraan ng isang klase mula sa static main()
na pamamaraan
"Minsan sinusubukan ng mga newbie programmer na i-access ang mga non-static na variable at pamamaraan mula sa main()
pamamaraan o iba pang mga static na pamamaraan. Siyempre, hindi gagana ang naturang code.
public class Solution
{
public int n = 100;
public int[] createArray()
{
return new int[n];
}
public static void main(String[]args)
{
int[] array = createArray();
}
}
"Ang main
pamamaraan ay maaari lamang sumangguni sa mga static na pamamaraan/mga variable. Well, o dapat muna itong lumikha ng isang instance ng Solution
klase, at pagkatapos ay tumawag lamang ng mga non-static na pamamaraan ng bagay na iyon. Halimbawa:
Solusyon 1 | Solusyon 2 |
---|---|
|
|
Ang pagdedeklara ng isang constructor tulad ng isang pamamaraan
"Ang isa pang karaniwang pagkakamali ay ang maling pagdedeklara ng class constructor. Ang pangalan ng isang constructor ay dapat pareho sa pangalan ng class, at ang isang constructor ay walang uri ng resulta. Ang pinakakaraniwang pagkakamali ay ganito ang hitsura:
|
Hindi dapat magkaroon ng uri ng pagbabalik dito |
|
Di-wasto ang pangalan ng constructor. Dapat itong tumugma sa pangalan ng klase |
|
this ay nawawala. Ang value variable ay itatalaga sa sarili nito |
|
Tama lahat yan. |
Maling inheritance ng mga interface
"Sinubukan ng mga tagalikha ng Java na gawin itong napakalapit sa Ingles, kaya pumili sila ng iba't ibang mga keyword para sa ilang partikular na nauugnay na konsepto.
Kapag ang isang klase ay nagmana ng isang klase, kailangan mong gamitin ang extends
keyword:
class Pet
{
}
class Cat extends Pet
{
}
"Kapag ang isang klase ay nagmana ng isang interface, o, mas tiyak, ipinatupad ito, kailangan mong gamitin ang implements
keyword:
interface Meow
{
}
class Cat implements Meow
{
}
"Kapag ang isang interface ay nagmana ng isang interface, gamitin ang extends
keyword:
interface Meow
{
}
interface Voice extends Meov
{
}
Pag-alis break
sa isang switch
pahayag
"At ang huling pagkakamali para sa araw na ito, ngunit hindi ang huli para sa mga nagsisimula, ay ang hindi pagsasama ng isang break
pahayag sa isang switch
pahayag. Halimbawa:
mali | Tama |
---|---|
|
|
"Alam mo, Diego... Base sa set of errors na ipinakita mo dito, parang binabasa mo ang personal journal ko... O pinapanood mo akong mag-solve ng mga gawain."
"Ha! Huwag kang mag-alinlangan tungkol dito. Nabasa ko, nasubaybayan, at patuloy na ginagawa ito. Kaya't maging alerto!"
"???"
"Don't you worry. Nagbibiro lang ako. Be vigilant and make few stupid mistakes."
GO TO FULL VERSION