You are on page 1of 8

16/03/2014 T duy v lp trnh hm: Suy ngh theo lp trnh hm, Phn 1

https://www.ibm.com/developerworks/vn/library/12/j-ft1/ 1/8
Gii thiu v lot bi ny
Lot bi ny nhm mc ch nh hng li
cch nhn ca bn i vi t duy v lp trnh
hm, gip bn xem xt cc vn chung
theo cc cch mi v tm mi cch ci
tin vic vit m hng ngy ca bn. Lot
bi ny khm ph cc khi nim, cc khung
cng tc lp trnh hm, cho php lp trnh
hm trong phm vi ngn ng Java, cc
ngn ng lp trnh hm chy trn JVM v
mt s khuynh hng pht trin trong
tng lai ca thit k ngn ng lp trnh.
Lot bi ny c nhm n cc nh pht
trin Java, nhng ngi bit v Java v
cch hot ng tru tng ca n nhng
c rt t hoc cha c cht kinh nghim no
v s dng mt ngn ng lp trnh hm.
Lp trnh hm gn y to ra mi quan tm ln khi t nhn l li t hn v nng sut cao hn. Nhng nhiu nh pht
trin th v khng hiu iu g lm cho cc ngn ng lp trnh hm hp dn i vi mt s kiu cng vic. Vic hc
c php ca mt ngn ng lp trnh mi l d dng, nhng vic hc suy ngh theo mt cch khc l kh. Trong bi
ng u tin ca lot bi trong mc T duy v lp trnh hm, Neal Ford gii thiu mt s khi nim lp trnh hm v tho
lun cch s dng chng c trong Java ln trong Groovy.
Neal Ford l mt kin trc s phn mm v Meme Wrangler ti Thought Works, mt vn phng t vn CNTT ton cu. ng cng thit k v
pht trin cc ng dng, ti liu hng dn, cc bi bo trn tp ch, hc liu v cc bi thuyt trnh video/DVD; v ng l tc gi hoc ngi
bin tp cc cun sch bao trm nhiu loi cng ngh, bao gm c cun sch gn y nht l The Productive Programmer. ng tp trung vo
vic thit k v xy dng ng dng doanh nghip c quy m ln. ng cng l mt din gi c quc t hoan nghnh ti hi ngh ca cc
nh pht trin trn ton th gii
22 06 2012
Chng ta hy tm thi ni rng bn l mt ngi n g. Bn c ru
tt nht trong rng, n gip cho bn tr thnh mt ngi n g
nng sut nht trong tri. Sau mt ngy, mt ai xut hin v
tn dng nhng u im ca mt mu hnh cht cy mi, l ci
ca xch. Anh chng bn hng y thuyt phc, v vy bn mua mt
ci ca xch, nhng bn khng bit n hot ng nh th no. Bn c
gng nhc n ln v c vo ci cy vi mt lc ln, l cch m
cc mu hnh cht cy khc ca bn lm vic. Bn s nhanh chng
kt lun rng ci ca xch mi l ny ch l mt mt nht thi v bn
quay tr li cht cy bng ru ca mnh. Sau , mt ai n v ch
cho bn thy cch cht cy bng ca xch.
Chc l bn cng c th lin quan n cu chuyn ny, nhng l vi
lp trnh hm thay cho ci ca xch. Vn vi mt mu hnh lp
trnh mi hon ton khng phi l vic hc mt ngn ng mi. Rt
cuc th c php ngn ng ch l cc chi tit. Phn nan gii l hc suy ngh theo mt cch khc. V ti vo
cuc tay chy ca xch v ngi lp trnh hm.
Cho mng bn n vi T duy v lp trnh hm. Lot bi ny khm ph ch v lp trnh hm, nhng
khng phi l duy nht v cc ngn ng lp trnh hm. Nh ti s minh ha, vic vit m theo mt cch "lp
trnh hm" chm n thit k, cc tha hip, cc khi xy dng c th s dng li khc nhau v mt lot
nhng hiu bit khc. Cng nhiu cng tt, ti s c gng trnh by cc khi nim lp trnh hm trong
Java (hoc cc ngn ng gn-vi-Java) v chuyn sang ngn ng khc chng minh cc kh nng cn
cha c trong ngn ng Java. Ti s khng b qua nn tng su v ni v nhng iu rt hin i nh
monads (xem Ti nguyn) ngay by gi (mc d chng ta cng s i ti ). Thay vo , dn dn ti s
cho bn thy mt cch suy ngh mi v cc vn (m bn p dng mt s ni bn ch cha nhn
developerWorks ting Vit Cc ch k thut Cng ngh Java Th vin K thut
T duy v lp trnh hm: Suy ngh theo lp trnh hm,
Phn 1
Hc cch suy ngh nh mt ngi lp trnh hm
16/03/2014 T duy v lp trnh hm: Suy ngh theo lp trnh hm, Phn 1
https://www.ibm.com/developerworks/vn/library/12/j-ft1/ 2/8
ra n thi).
Bi ng ny v hai bi tip theo coi nh mt chuyn du lch ngn v mt s ch lin quan n lp trnh
hm, bao gm cc khi nim ct li. Mt s cc khi nim s c quay tr li chi tit hn khi ti
xy dng thm nhiu bi cnh v sc thi hn trong sut lot bi ny. L mt im khi hnh cho chuyn
du lch, ti s bn xem xt hai cch trin khai thc hin khc nhau ca mt vn , mt cch c vit
c tnh cht mnh lnh v mt cch khc vi xu hng lp trnh hm hn.
Trnh phn loi s
ni v cc phong cch lp trnh khc nhau, bn phi c m so snh. V d u tin ca ti l mt
bin th ca bi ton vit m xut hin trong cun sch ca ti Nh lp trnh nng sut (xem Ti nguyn) v
trong "Thit k da vo kim tra, Phn 1" and "Thit k da vo kim tra, Phn 2" (hai bi ng trong lot
bi trc ca ti trn developerWorks Kin trc tin ha v thit k mi ni). Ti chn m ny t nht cng
mt phn v hai bi vit m t thit k m mt cch su sc. Khng c g sai vi thit k c tn
dng trong hai bi vit , nhng ti sp cung cp mt l l c bn cho mt thit k khc y.
Cc yu cu ni r rng, cho bt k s nguyn dng ln hn 1 no, bn phi phn loi n, l perfect
(hon ho), abundant (d tha) hay deficient (thiu). Mt s hon ho l mt s m cc tha s ca n
(khng bao gm chnh s ) cng dn li bng chnh n. Tng t nh vy, tng cc tha s ca s d
tha s ln hn s v tng cc tha s ca s thiu ht s nh chnh s .
Trnh phn loi s kiu mnh lnh
Mt lp kiu mnh lnh p ng cc yu cu ny xut hin trong Lit k 1:
Lit k 1. NumberClassifier, gii php kiu mnh lnh cho bi ton ny
public class Classifier6 {
private Set<Integer> _factors;
private int _number;
public Classifier6(int number) {
if (number < 1) throw new
InvalidNumberException("Can't classify negative numbers");
_number = number;
_factors = new HashSet<Integer>>();
_factors.add(1);
_factors.add(_number);
}
private boolean isFactor(int factor) {
return _number % factor == 0;
}
public Set<Integer> getFactors() {
return _factors;
}
private void calculateFactors() {
for (int i = 1; i <= sqrt(_number) + 1; i++)
if (isFactor(i)) addFactor(i);
}
private void addFactor(int factor) {
_factors.add(factor);
_factors.add(_number / factor);
}
private int sumOfFactors() {
calculateFactors();
int sum = 0;
for (int i : _factors) sum += i;
return sum;
}
public boolean isPerfect() {
return sumOfFactors() - _number == _number;
}
public boolean isAbundant() {
return sumOfFactors() - _number > _number;
}
public boolean isDeficient() {
return sumOfFactors() - _number < _number;
}
public static boolean isPerfect(int number) {
return new Classifier6(number).isPerfect();
}
}
Mt s th ng lu v on m ny:
16/03/2014 T duy v lp trnh hm: Suy ngh theo lp trnh hm, Phn 1
https://www.ibm.com/developerworks/vn/library/12/j-ft1/ 3/8
N cc bi kim tra n v c phm vi rng (mt phn l do ti vit n tho lun v pht trin da
vo kim tra).
Lp ny c cha mt s ln cc phng thc gn kt, l mt tc dng ph ca vic s dng pht trin
da vo kim tra trong khi xy dng n.
Mt s ti u ha hiu nng c nhng vo trong phng thc calculateFactors(). Phn ch yu
ca lp ny gm c vic thu thp cc tha s sau ti c th cng li v cui cng phn loi chng.
Cc tha s lun c th c thu gom theo tng cp. V d, nu s ang xt l 16, khi ti ly tha s 2
th ti cng c th ly 8 v 2 x 8 = 16. Nu ti thu gom cc tha s theo tng cp, ti ch cn kim tra cc
tha s cha vt qu cn bc hai ca s ch m thi, chnh xc l nhng g phng thc
calculateFactors() lm.
Trnh phn loi s kiu lp trnh hm (hn mt cht)
Vn s dng chnh cc k thut pht trin da vo kim tra, ti to ra mt phin bn thay th ca trnh
phn loi ny, hin th trong Lit k 2:
Lit k 2. Trnh phn loi s kiu lp trnh hm (hn mt cht)
public class NumberClassifier {
static public boolean isFactor(int number, int potential_factor) {
return number % potential_factor == 0;
}
static public Set<Integer> factors(int number) {
HashSet<Integer> factors = new HashSet<Integer>();
for (int i = 1; i <= sqrt(number); i++)
if (isFactor(number, i)) {
factors.add(i);
factors.add(number / i);
} return factors;
}
static public int sum(Set<Integer> factors) {
Iterator it = factors.iterator();
int sum = 0;
while (it.hasNext()) sum += (Integer) it.next();
return sum;
}
static public boolean isPerfect(int number) {
return sum(factors(number)) - number == number;
}
static public boolean isAbundant(int number) {
return sum(factors(number)) - number > number;
}
static public boolean isDeficient(int number) {
return sum(factors(number)) - number < number;
}
}
Cc khc bit gia hai phin bn ny ca trnh phn loi hi kh thy nhng quan trng. S khc bit chnh
l khng c trng thi chia s mt cch c ch ch trong Lit k 2. Vic loi b (hoc t nht gim i) trng
thi chia s l mt trong nhng tru tng ha a thch trong lp trnh hm. Thay v chia s trng thi
xuyn qua cc phng thc di dng cc kt qu trung gian (xem trng factors trong Lit k 1), ti
gi cc phng thc trc tip, loi b trng thi. T quan im thit k, n lm cho phng thc
factors() di hn, nhng n ngn khng cho trng factors () "thot ra" ngoi phng thc. Cng lu
rng phin bn ca Lit k 2 c th hon ton cha cc phng thc tnh. Khng tn ti kin thc chia
s no gia cc phng thc, v vy ti c t nhu cu ng gi hn theo phm vi. Tt c cc phng thc
lm vic hon ton tt nu bn cung cp cho chng cc kiu tham s u vo m chng mong i. (y l
mt v d v mt hm thun ty, mt khi nim ti s tip tc nghin cu trong mt bi ng sp ti).
Cc hm
Lp trnh hm l mt lnh vc rng, tri di trong khoa hc my tnh, chng kin mt s quan tm t
bin gn y. Cc ngn ng lp trnh hm mi trn JVM (v d nh Scala v Clojure) v cc khung cng
16/03/2014 T duy v lp trnh hm: Suy ngh theo lp trnh hm, Phn 1
https://www.ibm.com/developerworks/vn/library/12/j-ft1/ 4/8
tc (nh Akka v Functional Java) hin c (xem Ti nguyn), cng vi cc tuyn b t nhn l li t hn,
nng sut hn, trng p hn, kim tin nhiu hn v v.v.. Thay v c gng gii quyt ton b ch ca
lp trnh hm, ti s tp trung vo mt s khi nim then cht v lm theo mt s gi th v bt ngun t
cc khi nim .
Ct li ca lp trnh hm l hm, cng nh cc lp l tru tng ha chnh trong cc ngn ng hng i
tng. Cc hm to thnh cc khi xy dng x l v c nhng vi mt s tnh nng cha thy trong
cc ngn ng mnh lnh truyn thng.
Cc hm bc cao hn
Cc hm bc cao hn c th hoc nhn cc hm khc lm cc i s hoc tr chng v nh cc kt qu.
Chng ta khng c cu kin ny trong ngn ng Java. Ci gn nht m bn c th tin n l s dng mt
lp (thng l mt lp v danh) nh l mt "thng cha" (holder) ca mt phng thc m bn cn thc
hin. Java khng c cc hm (hoc cc phng thc) ng c lp, v vy chng khng th c tr v t
cc hm hoc c chuyn vo nh cc tham s.
Kh nng ny l quan trng trong cc ngn ng lp trnh hm t nht vi hai l do. u tin, cc hm bc
cao hn c ngha l bn c th gi nh v cc phn ngn ng ph hp vi nhau nh th no. V d, bn c
th loi b ton b cc loi phng thc trn mt h thng phn cp cc lp bng cch xy dng mt c
ch chung duyt qua cc danh sch v p dng mt (hoc nhiu) hm bc cao hn cho mi phn t. (Ti
s ch cho bn mt v d v cu kin ny ngay sau y). Th hai, bng cch cho php cc gi tr tr v l
cc hm, bn to ra c hi xy dng h thng rt nng ng, c tnh thch nghi cao.
Cc vn c th dn n gii php bng cch s dng cc hm bc cao hn khng phi l duy nht cho
cc ngn ng lp trnh hm. Tuy nhin, cch bn gii quyt cc vn s khc nhau khi bn ang suy ngh
theo lp trnh hm. Hy xem xt v d trong Lit k 3 (ly t mt c s m ln hn) ca mt phng thc
truy cp d liu c bo v:
Lit k 3. Khun mu m c kh nng s dng li tim nng
public void addOrderFrom(ShoppingCart cart,String userName, Order order)
throws Exception {
setupDataInfrastructure();
try {
add(order, userKeyBasedOn(userName));
addLineItemsFrom(cart, order.getOrderKey());
completeTransaction();
}
catch (Exception condition) {
rollbackTransaction();
throw condition;
}
finally { cleanUp(); }
}
M trong Lit k 3 thc hin khi to, thc hin mt s cng vic, hon tt giao dch nu tt c mi th
thnh cng, hy giao dch nu tri li, v cui cng l xa ti nguyn. R rng, c th s dng li phn son
sn ca m ny v chng ti thng lm nh vy trong cc ngn ng hng i tng bng cch to cu
trc. Trong trng hp ny, ti s kt hp hai trong Cc mu thit k ca B t (xem Ti nguyn): Cc
mu Lnh v Phng thc khun mu. Mu ca Phng thc khun mu (Template Method) gi rng ti
nn di chuyn m son sn ph bin ln h thng phn cp tha k, tr hon cc chi tit thut ton xung
cho cc lp con. Mu thit k Lnh (Command) a ra mt cch ng gi hnh vi trong mt lp vi cc
ng ngha thi hnh bit r. Lit k 4 cho thy kt qu ca vic p dng hai mu ny cho m trong Lit k
3:
Lit k 4. M lnh c cu trc li
16/03/2014 T duy v lp trnh hm: Suy ngh theo lp trnh hm, Phn 1
https://www.ibm.com/developerworks/vn/library/12/j-ft1/ 5/8
public void wrapInTransaction(Command c) throws Exception {
setupDataInfrastructure();
try {
c.execute();
completeTransaction();
}
catch (Exception condition) {
rollbackTransaction();
throw condition;
}
finally {
cleanUp();
}
}
public void addOrderFrom(final ShoppingCart cart, final String
userName, final Order order) throws Exception {
wrapInTransaction(new Command() {
public void execute() {
add(order, userKeyBasedOn(userName));
addLineItemsFrom(cart, order.getOrderKey());
}
});
}
Trong Lit k 4, ti trch ra cc phn chung nht ca m ny thnh phng thc wrapInTransaction()
(bn c th nhn ra cc ng ngha ca n n c bn l mt phin bn n gin ca
TransactionTemplate ca Spring), chp nhn mt i tng Command lm n v cng vic. Phng thc
addOrderFrom() thu li thnh nh ngha mt lp bn trong v danh, to ra lp Command, gi gn hai mc
cng vic.
Vic gi gn hnh vi m ti cn trong mt lp lnh ch l mt to phm ca thit k ca Java, m khng
bao gm bt k loi hnh vi ng c lp no. Tt c hnh vi trong Java phi lu tr bn trong mt lp.
Thm ch cc nh thit k ngn ng nhanh chng nhn thy khim khuyt trong thit k ny vi nhn
thc mun mng, tht kh ngy th khi ngh rng khng bao gi c th c hnh vi m khng gn lin vi
mt lp. JDK 1.1 sa cha khim khuyt ny bng cch thm vo cc lp bn trong v danh, m t
nht chng cung cp lp v c php to ra nhiu lp nh ch vi mt vi phng thc hon ton l
lp trnh hm, ch khng l cu trc. c mt bi lun cc k th v v hi hc v kha cnh ny ca
Java, hy xem bi "Thi hnh trong Vng quc ca cc danh t" ca Steve Yegge (xem Ti nguyn).
Java buc ti to ra mt c th ca mt lp Command, mc d mi th ti thc s cn l phng thc bn
trong lp . Chnh lp khng mang li li ch g: n c khng c trng no, khng c hm to no
(ngoi hm to c sinh ra t ng t Java) v khng c trng thi. N ch l mt trnh bao (wrapper) cho
hnh vi bn trong phng thc. Trong mt ngn ng lp trnh hm, vic ny thng c x l thng qua
mt hm bc cao hn thay th.
Nu ti sn sng ri khi ngn ng Java mt lt, v ng ngha, ti c th n gn l tng lp trnh hm
bng cch s dng cc bao ng (closure). Lit k 5 cho thy mt v d c cu trc li tng t, nhng
bng cch s dng Groovy (xem Ti nguyn) thay cho Java:
Lit k 5. S dng cc bao ng ca Groovy thay cho lp lnh
def wrapInTransaction(command) {
setupDataInfrastructure()
try { command() completeTransaction() }
catch (Exception ex) {
rollbackTransaction() throw ex
} finally { cleanUp() }
}

def addOrderFrom(cart, userName, order) {
wrapInTransaction {
add order, userKeyBasedOn(userName) addLineItemsFrom cart, order.getOrderKey()
}
}
Trong Groovy, bt c th g bn trong cc du ngoc m {} u l mt khi m v cc khi m c th
c chuyn giao lm cc tham s, bt chc mt hm bc cao hn. Sau hu trng, Groovy ang thc
16/03/2014 T duy v lp trnh hm: Suy ngh theo lp trnh hm, Phn 1
https://www.ibm.com/developerworks/vn/library/12/j-ft1/ 6/8
hin mu thit k Lnh (Command) cho bn. Mi khi bao ng trong Groovy thc s l mt c th kiu
bao ng ca Groovy, trong bao gm mt phng thc call() c t ng gi ra khi bn t mt
cp du ngoc rng sau bin ang lu gi c th bao ng. Groovy cho php mt s hnh vi ging nh
lp trnh hm bng cch xy dng cc cu trc d liu thch hp, vi v c php tng ng, a vo trong
chnh ngn ng . Nh ti s cho thy trong cc bi ng tng lai, Groovy cng bao gm cc kh nng
lp trnh hm khc nm ngoi Java. Ti cng s quay li mt s so snh th v gia cc bao ng v cc
hm bc cao hn trong mt bi ng sau.
Cc hm hng nht
Cc hm trong mt ngn ng lp trnh hm c coi l hng nht, c ngha l cc hm ny c th xut
hin bt c u m mt cu kin ngn ng lp trnh khc bt k (v d nh cc bin) c th xut hin. S
c mt ca hm hng nht cho php s dng cc hm theo nhng cch bt ng v buc suy ngh v cc
gii php mt cch khc i, v d nh p dng cc php ton chung chung (vi cc chi tit sc thi) cho cc
cu trc d liu tiu chun. iu ny, n lt n, li bc l r mt s chuyn dch cn bn trong t duy
theo cc ngn ng lp trnh hm: Hy tp trung vo cc kt qu, ch khng vo cc bc.
Trong cc ngn ng lp trnh mnh lnh, ti phi suy ngh v tng bc nguyn t trong thut ton ca
mnh. M trong Lit k 1 cho thy iu ny. gii quyt bi ton trnh phn loi s, ti phi vch ra
chnh xc cch thu thp cc tha s, iu ny li c ngha l ti phi vit m c th lp qua cc s
xc nh cc tha s. Tuy nhin khi lp qua cc danh sch, vic thc hin cc php ton trn mi phn
t, nghe ging nh mt vic ph bin thc s. Hy xem xt m lnh phn loi s c vit li, bng cch
s dng Khung cng tc Java lp trnh hm (Functional Java framework), xut hin trong Lit k 6:
Lit k 6. Trnh phn loi s kiu lp trnh hm
public class FNumberClassifier {
public boolean isFactor(int number, int potential_factor) {
return number % potential_factor == 0;
}
public List<Integer> factors(final int number) {
return range(1, number+1).filter(new F<Integer, Boolean>() {
public Boolean f(final Integer i) {
return isFactor(number, i);
}
});
}
public int sum(List<Integer> factors) {
return factors.foldLeft(fj.function.Integers.add, 0);
}
public boolean isPerfect(int number) {
return sum(factors(number)) - number == number;
}
public boolean isAbundant(int number) {
return sum(factors(number)) - number > number;
}
public boolean isDeficiend(int number) {
return sum(factors(number)) - number < number;
}
}
Cc khc bit chnh gia Lit k 6 v Lit k 2 nm trong hai phng thc: sum() v factors(). Phng
thc sum() li dng mt phng thc trn lp List (Danh sch) trong Functional Java l phng thc
foldLeft(). Phng thc ny l mt bin th c th da trn mt nim x l-danh sch c gi l mt
catamorphism, l mt s tng qut ha v gp danh sch. Trong trng hp ny, "fold left" (gp tri) c
ngha l:
1. Ly mt gi tr u v kt hp n qua mt php ton vi phn t u tin ca danh sch.
2. Ly kt qu v p dng php ton tng t nh th cho phn t tip theo.
3. Hy tip tc lm vic ny cho n khi danh sch c khai thc ht.
Lu rng y chnh l iu bn lm khi bn tnh tng cc s trong mt danh sch: bt u bng s khng,
16/03/2014 T duy v lp trnh hm: Suy ngh theo lp trnh hm, Phn 1
https://www.ibm.com/developerworks/vn/library/12/j-ft1/ 7/8
Ti nguyn
Hc tp
Nh lp trnh nng sut (Neal Ford, O'Reilly Media, 2008): Cun sch mi
nht ca Neal Ford m rng mt s cc ch trong lot bi ny.
Vng d liu trn
developerWorks
Khm ph cc bi vit xoay quanh
lnh vc d liu, Qun l h thng
thng tin
Vng m ngun m trn
cng vo phn t u tin, ly kt qu v cng n vo phn t th hai v tip tc cho n khi danh sch
c dng n ht. Functional Java cung cp hm bc cao hn (trong v d ny l kiu lit k
Integers.add) v chu trch nhim p dng n cho bn. (Tt nhin, Java khng thc s c cc hm bc
cao hn, nhng bn c th vit mt hm tng t thch hp nu bn hn ch n cho mt cu trc v kiu
d liu c bit).
Mt phng thc hp dn khc trong Lit k 6 l factors(), n minh ha li khuyn ca ti "hy tp trung
vo cc kt qu, ch khng vo cc bc". Bn cht ca vn pht hin cc tha s ca mt s l g?
Ni cch khc, cho mt danh sch tt c cc s c th, tng dn ln n mt s ch, lm th no ti
xc nh nhng s no l cc tha s ca s ? iu ny gi mt php lc Ti c th lc ton b
danh sch cc s, loi b nhng s no khng p ng tiu chun ca ti. V c bn phng thc ny
hiu ging nh m t sau: ly di s t 1 n s ca ti (di ny khng bao gm u mt, do +1); lc
danh sch da trn m trong phng thc f(), l cch ca Functional Java cho php bn to ra mt lp
c cc kiu d liu c th; v tr v cc gi tr.
M ny cng minh ha mt nim ln hn nhiu, nh l mt xu hng trong ngn ng lp trnh ni chung.
Trc y, cc nh pht trin phi x l tt c cc th phin nhiu nh cp pht b nh, thu gom rc v
cc con tr. Theo thi gian, cc ngn ng m nhn trch nhim nhiu hn. Khi cc my tnh c
nhiu sc mnh hn, chng ta chuyn giao cng ngy cng nhiu nhim v nhm chn (c th t ng
ha c) cho cc ngn ng v cc thi gian chy. L mt nh pht trin Java, ti kh quen vi vic
nhng li tt c cc vn b nh cho ngn ng lp trnh. Lp trnh hm ang m rng nhim v , bao
gm c cc chi tit c th hn. Ri thi gian tri qua, chng ta s dnh t thi gian lo lng v cc bc cn
thit gii quyt mt vn v suy ngh nhiu hn v cc qu trnh. Theo tin ca lot bi ny, ti s
ch ra rt nhiu v d v iu ny.
Kt lun
Lp trnh hm l mt quan nim hn l mt b cc cng c hoc cc ngn ng. Trong bi ng u tin
ny, ti bt u trnh by mt s ch v lp trnh hm, tri di t cc quyt nh thit k n gin
n mt vi t duy li vn y tham vng. Ti vit li mt lp Java n gin lm cho n mang phong
cch lp trnh hm nhiu hn, sau bt u i su vo mt s ch a lp trnh hm vt ra ngoi
vic s dng cc ngn ng mnh lnh truyn thng.
Hai khi nim di hn, quan trng u tin hin ra y. Trc tin, hy tp trung vo cc kt qu, ch
khng vo cc bc. Lp trnh hm s c gng trnh by cc bi ton khc i v bn c cc khi xy dng
khc nhau, thc y cc gii php. Xu hng th hai ti cn ch ra trong sut lot bi ny l chuyn giao
cc chi tit nhm chn cho cc ngn ng lp trnh v cc thi gian chy, cho php chng ta tp trung vo
cc kha cnh duy nht ca cc bi ton lp trnh ca chng ta. Trong bi ng tip theo, ti tip tc xem
xt cc kha cnh chung v lp trnh hm v n p dng cho vic pht trin phn mm hin nay nh th
no.
16/03/2014 T duy v lp trnh hm: Suy ngh theo lp trnh hm, Phn 1
https://www.ibm.com/developerworks/vn/library/12/j-ft1/ 8/8
Monads: Monads, ch kh ni ting trong cc ngn ng lp trnh hm, s
c trnh by trong mt bi ng tng lai ca lot bi ny.
Scala: Scala l mt ngn ng lp trnh hm hin i trn JVM.
Clojure: Clojure l mt Ngn ng lp trnh (Lisp) hm, hin i chy trn
JVM.
Podcast: Stuart Halloway trn Clojure: Tm hiu thm v Clojure v bit hai
l do chnh ti sao n c chp nhn nhanh chng v ang gia tng tc
ph bin.
Akka: Akka l mt khung cng tc cho Java, cho php xy ra ng thi da
trn tc nhn tinh vi.
Functional Java: Java lp trnh hm l mt khung cng tc b sung nhiu
cu kin ca ngn ng lp trnh hm cho Java.
Cc mu thit k: Cc phn t ca Phn mm hng i tng s dng li
c (Erich Gamma et al., Addison-Wesley, 1994): Tc phm kinh in ca
B t v cc mu thit k.
"Thi hnh trong Vng quc ca Cc danh t" (Steve Yegge, 03.2006): mt
bi cng iu th v v mt s kha cnh ca thit k ngn ng Java.
Duyt qua hiu sch cng ngh tm cc cun sch v cc ch k
thut ny v khc.
Vng cng ngh Java ca developerWorks: Tm hng trm bi vit v mi
kha cnh ca vic lp trnh Java.
Tho lun
Hy dnh tm tr cho cng ng developerWorks.
developerWorks
Xem cc bi vit v HTML, CSS,
JavaScript,...
in ton m my
Tm hiu v in ton m my

You might also like