Temelde yerleşik bir işlevi yeniden adlandıran bir işlev oluşturmak için tavsiye edilmez mi?


40

Bazı bağlamlarda min ve max işlevleri konusunda kafam karışıyor.

Bir bağlamda, iki değerden daha büyük veya daha azını almak için işlevleri kullanırken, sorun yoktur. Örneğin,

//how many autographed CD's can I give out?
int howManyAutographs(int CDs, int Cases, int Pens)
{
    //if no pens, then I cannot sign any autographs
    if (Pens == 0)
        return 0;

    //I cannot give away a CD without a case or a case without a CD
    return min(CDs, Cases);
}

Kolay. Ama başka bir bağlamda kafam karıştı. Bir maksimum veya minimum ayarlamaya çalışıyorsam, geriye doğru alıyorum.

//return the sum, with a maximum of 255
int cappedSumWRONG(int x, int y)
{
    return max(x + y, 255); //nope, this is wrong
}

//return the sum, with a maximum of 255
int cappedSumCORRECT(int x, int y)
{
    return min(x + y, 255); //much better, but counter-intuitive to my mind
}

Kendi işlevlerimi yapmam aşağıdaki gibi olmaz mı?

//return x, with a maximum of max
int maximize(int x, int max)
{
    return min(x, max);
}

//return x, with a minimum of min
int minimize(int x, int min)
{
    return max(x, min)
}

Açıkçası, yerleşikleri kullanmak daha hızlı olacak ama bu bana gereksiz bir mikro-optimizasyon gibi görünüyor. Bunun tavsiye edilemez olmasının başka bir nedeni var mı? Peki ya bir grup projesinde?


72
Min ve max okunabilirliğinize zarar veriyorsa, normal "if" ler için değiş tokuş yapmayı deneyin. Bazen daha iyi okunabilmesi için biraz daha kod yazmak faydalı olabilir.
T. Sar - Monica,

23
Kısa bir mesajla “temiz kodlama” kavramının tamamını yok ettiniz. Sizi selamlıyorum efendim!
Ewan

21
Belki C ++ 11 std::clampişlevini veya benzer bir şeyi düşünebilirsiniz .
rwong

15
Belki daha iyi isimler up_to(için min) ve at_least(için max) olur? Sanırım anlamı, daha iyi ifade minimizeediyorlardı. Neden değişmeli olduklarının farkına varmak biraz zaman alabilir.
Warbo

59
minve maxayrıca minimizeve maximizeyazmak istediğiniz işlevler için tamamen yanlış adlardır. Varsayılan minve maxçok daha mantıklı. Aslında ALMOST fonksiyon isimlerini doğru yaptınız. Bu işleme sıkıştırma veya kapatma denir ve iki kapatma işlevi yazdınız. Öneririm capUpperBoundve capLowBound. Hangisinin ne yaptığını kimseye açıklamak zorunda değilim, çok açık.
slebetman

Yanıtlar:


120

Başkalarının daha önce de söylediği gibi: yerleşik, standart kütüphane veya genel olarak kullanılan bir fonksiyona benzer bir isme sahip bir fonksiyon yaratmayın, ancak davranışını değiştirin. İlk bakışta size pek mantıklı gelmese bile bir adlandırma kuralına alışmak mümkündür, ancak aynı şeyi yapan ancak diğer işlevleri yerine getirdikten sonra kodunuzun işleyişini düşünmek imkansız olacaktır. isimleri değiştirildi.

Standart kütüphane tarafından kullanılan isimleri "aşırı yüklemek" yerine, tam olarak ne demek istediğinizi ileten yeni isimler kullanın. Senin durumunda, “asgari” bir şeyle gerçekten ilgilenmiyorsun. Aksine, bir değeri sınırlamak istersiniz . Matematiksel olarak, bu aynı işlemdir ancak anlamsal olarak, tam değildir. Öyleyse neden sadece bir işlev değil

int cap(int value, int limit) { return (value > limit) ? limit : value; }

ihtiyaç duyulan şeyi yapar ve ismini söyler. (Ayrıca uygulamak capaçısından mingösterildiği gibi timster 'ın cevabı ).

Sık kullanılan başka bir işlev ismi de clamp. Üç argüman alır ve verilen bir değeri diğer iki değer tarafından tanımlanan aralığa “kelepçeler”.

int clamp(int value, int lower, int upper) {
    assert(lower <= upper);  // precondition check
    if (value < lower) return lower;
    else if (value > upper) return upper;
    else return value;
}

Böyle genel olarak bilinen bir işlev adı kullanıyorsanız, ekibinize katılan herhangi bir yeni kişi (bir süre sonra tekrar koda döneceğiniz gelecek de dahil olmak üzere), sizi kırıp karıştırarak sizi şaşırttığı için küfretmek yerine ne olduğunu hızla anlayacaktır. bildiklerini düşündükleri fonksiyon isimleri hakkında beklentiler.


2
Ayrıca bu doğru yaklaşım olduğunu ve fonksiyon satır içine yerleştirilmiş olacak iyi bir derleyici ile ve elde edilen makine kodu yerleşik ins kullanarak tamamen aynı olacak onu getValueNotBiggerThan (x, sınırı) sayabilirim
Falco

20
@Falco “kapak” ın “değerden daha büyük değil” elde etmekle neredeyse eş anlamlı olduğunu söyleyebilirim, ancak bugün o bisikleti döken boyamayacağım. ;-)
5gon12eder

1
clampHer türlü sinyal işleme ve benzeri işlemlerde (görüntü işleme vb.) yaygın olarak kullanılır, bu yüzden kesinlikle ben de bununla gideceğim. Her ne kadar üst ve alt sınırlar gerektirdiğini söylemesem de: Sadece bir yön için de oldukça sık gördüm.
Voo

1
O da bahsetti clamp. Doğru yazılırsa, yalnızca bir şekilde bağlanmasını istediğiniz zaman için sonsuz / negatif sonsuz sınırını kullanabilirsiniz. Örneğin, bir sayının 255'ten büyük olmamasını (ancak daha düşük bir sınırın olmamasını) sağlamak için kullanırsınız clamp(myNumber, -Infinity, 255).
Kat

115

Böyle bir işlevi 10minimize(4, 10) döndüren bir işlev yaparsanız , bunun tavsiye edilemez olduğunu söylerim çünkü programcı arkadaşlarınız sizi boğabilir.

(Tamam, belki de tam anlamıyla seni ölümüne boğmayacaklar, ama cidden ... Bunu yapma.)


2
Ayrıca tamamen mümkün, bu kod üzerinde birkaç yıl içinde çalışmaya geri döndüğünüzde, kendiniz en aza indirgendiğinde rakamlarınızın neden yanlış olduğunu bulmak için birkaç saat harcayacaksınız ...
Paddy

Aww ... bu cevabı çok güzel (ve oldukça oy verildi) bir yorum için kullanılır. (Ayrıca, mizahi akışa yardımcı olan cevaba ilişkin ilk
yorumdu

Zımba kartlarını alıp DO NOT("İMAL ETMEYİN, Katlamanız veya Susturmak" dışında) üzerinden geçmek istiyorum . Böyle bir şey uygulayan biri bir kart alır.
Clockwork-Muse,

26

Bir işlevin diğer adı aynıdır, ancak mevcut terimlerin anlamlarını değiştirmeye çalışmayın.

İşlevin bir takma adı oluşturmak tamamdır - ortak kütüphaneler bunu her zaman yapar .

Bununla birlikte, terimleri genel kullanıma aykırı bir şekilde kullanmak, örneğin aklınıza maksimum ve minimumun çevrilmesi gereken örnek gibi kötü bir fikirdir. Diğer programcılar için kafa karıştırıcıdır ve bu terimleri standart dışı bir şekilde yorumlamaya devam etmek için kendinizi eğiterek kendinize bir kötülük yapacaksınız.

Bu yüzden, sizin durumunuzda, kafa karıştırıcı bulduğunuz ve anlaması kolay kodunuzu yarattığınız "mininum / maximum" parlance öğesinden vazgeçmeyin.

Örneğinizi yeniden düzenleme:

int apply_upper_bound(int x, int y)
{
    return min(x, y);
}


int apply_lower_bound(int x, int y)
{
    return max(x, y)
}

Ek bir bonus olarak, bu koda her baktığınızda, programlama dilinizde en az ve en çok nasıl kullanıldığını kendinize hatırlatacaksınız . Sonunda, kafanda mantıklı gelecektir.


4
Bence OP’in uygulamasını yanlış anladınız minve maxhangisini karıştırdınız. Belirli minbir değere sabit bir üst sınır koymak için kullanıldığında . get_lower_valueBu uygulamada aynı derecede sezgisel olur. Bu işlem için alternatif bir isim seçersem, bunun yerine supremum derim , ancak kaç programcının bunu hemen anlayacağından emin değilim.
leftaroundabout,

3
@leftaroundabout: {1, 2} kümesinin üstünlüğü 2, bu nedenle sadece çağırmak için yukarıda tanımlanmış supremumfonksiyonun adını kullanmayın . Bir sonraki programcıya tam olarak aynı soruyu verir . Aramanı öneririm ama bunun mükemmel olduğundan emin değilim. Hala garip çünkü etrafınızdaki parametreleri hangi şekilde koyacağınızla aynı şekilde çalışıyor, ancak isim parametrelerden birinin "değer" ve diğerinin "sınır" olduğunu ve bir şekilde farklı olduklarını ima ediyor. get_lower_valueminmaximiseapply_upper_bound
Steve Jessop

1
Bence asıl olarak okuyucunun supremum kelimesine aşina olmamaya güvendiğinizi ve bu nedenle İngilizce anlamından ziyade anlamınızı aldıklarını düşünüyorum. Kodunuzda yerel bir jargon tanımlamakta fayda var, ancak sorunun ne tür bir soru olduğunu doğrudan sormak istediğiniz tanıdık bir anlamla çelişiyorsa ne yapmanız gerektiğidir. "STEM" in yalnızca STEM konularını inceleyenlerle ilgili bazı versiyonları)
Steve Jessop

3
Bu fonksiyon, "Bir fonksiyonun takma adı iyidir, fakat mevcut terimlerin anlamlarını değiştirmeye çalışmayın" politikası mükemmel ve güzel bir şekilde ifade edilir. İkincisi, yerleşik işlevlerle ilgili olarak kafa karıştırıcı bir şekilde yeniden adlandırmamanız gerektiği fikri (ve: yerleşik işlevler kötü adlandırılmış / aptal / kafa karıştırıcı olsa bile ) mükemmel bir fikirdir. Bu sayfada ortaya çıkan max / dak örneği , tamamen karışıklıktır.
Fattie

1
Tamam, hem OP'nin gerekçesine uyan hem de aşırı terminolojiden kaçınan "application_upper_bound" kullanmak için cevabı değiştirdim. Ayrıntı bir problem değildir. Buraya mükemmel bir yöntem adı yazmak için hazırlanmıyorum, takma adların adlandırılması için bazı temel kurallar koyuyorum. OP, en net ve özlü bulduğu şeyi düzenleyebilir.
Tim Grant,

12

Bu soruyu seviyorum. Gerçi onu kıralım.

1: Tek bir kod satırı kaydırmanız gerekir mi?

Evet, bunu yapabileceğiniz birçok örnek düşünebilirim. Belki de yazılan parametreleri uyguluyorsunuz veya bir arayüzün arkasında somut bir uygulamayı gizliyorsunuz. Örneğinizde, aslında statik bir yöntem çağrısı gizliyorsunuz.

Ek olarak, bugünlerde tek bir satırda birçok şey yapabilirsiniz.

2: 'Min' ve 'Max' isimleri kafa karıştırıcı mı

Evet! Onlar kesinlikle! Temiz bir kodlama gurusu, onları "FunctionWhichReturnsTheLargestOfItsParameters" veya başka bir şey olarak değiştirir. Neyse ki bizim belgelerimiz var (eğer şanslıysanız) IntelliSense ve bize yardım edecek yorumlar, böylece isimlerle karıştıran herkes ne yapması gerektiğini okuyabilir.

3: Bunları başka bir şeye yeniden adlandırmanız gerekir.

Evet, onun için git. Örneğin, şunları yapabilirdiniz:

class Employee
{
    int NumberOfHolidayDaysIShouldHave(int daysInLue, int maxAllowableHolidayDays)
    {
         // Return the number of days in lue, but keep the value under the max allowable holiday days!
         // Don't use max, you fool!!
         return Math.Max(daysInLue, maxAllowableHolidayDays)
    }
}

Anlam ekler ve arayan kişi değeri nasıl hesaplayacağını bilmek istemez.

4: "min" i "maksimize" olarak yeniden adlandırmanız gerekiyorsa

Hayır!! sen deli misin?! Fakat evet, soru, farklı insanların fonksiyon ve nesne adlarına farklı anlamlar okuduklarının altını çiziyor. Bir kişinin net ve geleneksel bir şey bulduğu şey opak ve kafa karıştırıcı bulur. Bu yüzden yorumlarımız var. Bunun yerine şunu yazmalısınız:

// Add x and y, but don't let it go over 255
s = min(x + y, 255);

Sonra biri okuduğunda

// Add x and y, but don't let it go over 255
s = max(x + y, 255);

senin bir hata yaptığını biliyorlar.


6
Komik! Örneğinizde, op’un ilgilendiği kesin hatayı yaptınız: tatil sayısının maxHolidaysAllowed’den daha büyük olmamasını istiyorsunuz, böylece en az (a, b)
Falco

14
Eğer temiz kod gerçekten de gülünç isimlerin FunctionWhichReturnsTheLargestOfItsParametersiyi bir şey olduğunu gösteriyorsa, onun bir parçası olmasını istemiyorum.
David Hammen

1
@ Foco lol ayyır !!!
Ewan

4
@DavidHammen: Gerçekten değil, çünkü gerçek bir programlama stili siğilleri FunctionWhichReturnsher işlevin önüne koyar (bu bir istisna atmaz veya sonlandırmaz). Sen sahip olabileceklerini getMinimum, getLarger(ya da getLargest(a) saf fonksiyonları ve / veya "getters" siğil kullanması gerektiğini çizgisinde gerçek tavsiye takip ederek, 2'den fazla girişli) olsa get, (b) İngilizce kelimeler kısaltılmış edilmemelidir isimler. Açıkçası, bu tür fonksiyonları çağırmaya karar verenler için çok ayrıntılı max.
Steve Jessop,

1
evet, @ falco adlı kullanıcının yorumuna bakın. ondan sonra gerçekten düzeltemedim!
Ewan

4

Hayır . Yerleşik işlevlere çok benzeyen adlara sahip işlevler yapmayın, ancak bunun tersini yapar . Sizin için sezgisel görünebilir, ancak daha fazla deneyime sahip olduğunuz zaman gelecekte diğer geliştiricilere ve hatta kendinize bile biraz kafa karıştırıcı olacak.

Anlamı max"maksimum", ama "sezgisel" anlayışınız "maksimum" gibi bir şey. Ama bu sadece bir yanlış fonksiyonun anlaşılması ve adını değişiyor maxiçin maximum, farklı bir yorumunu iletişim kurmaz. Dil tasarımcılarının bir hata yaptıklarına şiddetle inanıyor olsanız bile, böyle bir şey yapmayın.

Ancak, söylendiği cap(x, limit)gibi söylenecek olan ismi değiştirmek iyi olacaktır, çünkü niyeti açıkça sarsa bile, açıkça ifade eder min.


3

Kafanızı karıştıracak olan, ya fonksiyon adınızdaki Capped'i kullanmak ya da kapağın ne anlama geldiğini anlamaktır. Bu bir sınırlayıcıdır ve maksimum bir şey gerektirmez.

En düşük, en küçük veya en erken istenirse, Max'in uygun işlev olduğunu düşünüyor musunuz?

Min ve max'i yalnız bırakın. Testleri yaz, böylece en azından ikinci seferinde düzeltebilirsin.

Bu işlevleri projenizde çok fazla kullanmanız gerekirse, hangisini kullanacağınızı netleştirmenize yardımcı olacak bir ipucu bulursunuz. <Veya> gibi sırala, ağzın geniş kısmı daha büyük değere bakar.


1
Temel bir problem olarak muhtemel terminoloji karmaşası için +1. Sanırım kargaşanın "toplamı en fazla 255 ile geri ver" yorumunda başladığını , bu yüzden maxişlevin daha uygun olduğunu düşünüyor , ama mantıklı minolduğu aslında aradığı şey.
Revenant

2

Sorunuzu cevaplamak için: Bunun tavsiye edilemez olmasının başka bir nedeni var mı? Peki ya bir grup projesinde? Sorun değil kendi fonksiyonlarını istediğin anlaşılıyor. Sadece kendi yardımcı sınıfınızda olduklarından ve içe aktarmadıkları sürece başkaları için kolayca aranamadığından emin olun. (Joes.Utilities.)

Ama senin problemine tekrar bakmak için, temelde onun yerine düşünürdüm:

return (input >= 255) ? 255 : input;

Kafanız karışıyor, çünkü beyin mantığınızı bu min / maks işlevlerine uygulamaya çalışıyorsunuz. Bunun yerine sadece İngilizce konuşun. olduğunu aksi .ifinputgreater than or equal to 255 then return 255returninput

Hangisi:

if (input >= 255) {
   255 
} else {
   input
}

Benim fikrim. Max \ min işlevlerine yanlış nedenlerle gidiyorsunuz, bu şeylerin hızı ihmal edilebilir. Mantıklı olanı yap.


1
Üst düzey çalışma arkadaşlarımdan biri her zaman "Bilgisayarın sizin için düşünceyi yapmasına izin verin" derdi.

1

Sorunu anlasam da, bunu yapmak konusunda isteksizdim. Sadece kafatasına, min () ve max () yaptıklarını delmek daha iyi olur.

Çoğu programcı, min () ve max () işlevlerinin ne yaptığını bilir - sizin gibi, bazen herhangi bir zamanda kullanılacak olan sezgileri ile mücadele etseler bile. Bir programı okuyup maksimum (x, y) görüyorsam, ne yaptığını hemen biliyorum. Kendi "diğer ad" işlevinizi oluşturursanız, kodunuzu okuyan başka biri bu diğer adın ne yaptığını bilmez. İşlevini bulmak zorundalar. Gereksiz yere okuma akışını keser ve okuyucuyu, programınızı anlaması için fazladan bir düşünme yapmaya zorlar.

Bir noktada hangisini kullanacağınızı bulmakta sorun yaşıyorsanız, bunu açıklayan bir yorum ekleyelim. Öyleyse, gelecekteki bir okuyucunun benzer şekilde kafası karışırsa, yorumunuz açıklığa kavuşmalıdır. Ya da yanlış yaparsanız ancak yorum ne yapmaya çalıştığınızı açıklarsa, hata ayıklamaya çalışan kişi bir ipucuna sahip olacaktır.

Bir işlevi takma ad kullandığınızda, adınız sezginizle çakıştığı için ... sorunların olduğu tek durum bu mu? Yoksa diğer fonksiyonlara takma ad mı vereceksiniz? Belki "oku" ile kafanız karışır ve "kabul" olarak düşünmeyi daha kolay bulursunuz, "ekleme" yi "StringTogether" e, "yuvarlak" ı "DropDecimals" vb. İle değiştirirsiniz. ve programlarınız anlaşılmaz olacak.

Aslında, yıllar önce C'deki noktalama işaretlerini beğenmeyen bir programcı ile çalıştım. Bu yüzden "{" yerine "SON" yazıp "}" yerine "END-IF" yazmasına izin verecek bir sürü makro yazdı. ve düzinelerce başka tür ikameler. O zaman programlarını okumayı denediğinde, artık C'ye bile benzemiyordu, yepyeni bir dil öğrenmek zorundaydı. Şimdi "VE" nin "&" veya "&&" olarak çevrilip çevrilmediğini hatırlamıyorum - ve mesele bu. İnsanların dili ve kütüphaneyi öğrenmeye yaptığı yatırımları baltalıyorsunuz.

Bu, standart bir kütüphane işlevini çağırmak dışında hiçbir şey yapmayan bir işlevin mutlaka kötü olduğunu söylemem. İşlevinizin amacı bir takma ad oluşturmak değil, yalnızca tek bir işlev olan davranışı kapsıyorsa, bu iyi ve uygun olabilir. Demek istediğim, eğer mantıklı ve kaçınılmaz olarak, programın bu noktasında bir max yapmak zorundaysanız, o zaman doğrudan doğrudan max'i arayın. Ancak bugün bir maks için çağrı yapan, ancak gelecekte başka bir şey yapmak için değiştirilebilecek bir hesaplama yapmanız gerekiyorsa, bir ara işlev uygundur.


0

Yeni isimler kodunuzu çok net bir hale getirir ve hiç kimse tarafından anlaşılmayacaksa, yerleşik işlevlerin isimlerini değiştirmek sorun değildir. (C / C ++ kullanıyorsanız, ne olduğunu görmeyi zorlaştırdığı için #define kullanmayın.) Bir işlevin adı, çağıran kodun ne yaptığını ve neden ne yaptığını açıklayan bir yorum gibi davranmalıdır. .

Min ve max ile bu sorunu yaşayan tek kişi siz değilsiniz, ancak henüz tüm alanlarda çalışan iyi bir genel çözüm görmedim. Bence bu işlevlerin isimlendirilmesindeki bir problem, iki argümanın farklı mantıksal anlamlarına sahip olduğu, ancak aynı anlama geldiğidir.

Diliniz izin veriyorsa deneyebilirsiniz

return  calculatedDiscount.ButNoMoreThen(maxAllowedDiscount)

return  CDsInStocked.ButNoMoreThen(CasesInStock)

0

Hayır.

Paketleyicilerini yazmıyorsun. Bu paketleyicilerin isimleri çok önemli değil.

Yapmaya çalıştığın şey bir tür kod gizliliği. 2 amaca hizmet eden ekstra bir katman icat ediyorsunuz:

  1. Diğer insanlar kodunuzu anlayamıyor.
  2. Başkalarının kodunu anlamayı asla öğrenemezsin.

Rahat olmadığınız şeyleri gizleyerek, yalnızca kodunuzu şimdi ve kendiniz gelecekte yaralayacaksınız. Konfor bölgesinde kalarak büyüyemezsiniz. Ne gerek öğrenmek olduğunu minve maxçalışması.


-1

Tamam, ve Min ve Max'i yeniden dizginlemek ve aşmak için kullanmak pek de mantıklı değil. Bu da kullanılarak yapılır:

  • döşeme () ve tavan ()
  • Kelepçe, sınır, sınır
  • ve tabii ki yüksek dereceli kesmeli mod.

Bellenimde, bu genişletmeye dayanan modern 3D grafikleri daha önce belirleyen MMX'ten daha ileri uzanır.

Endüstri standardı bir fonksiyonu yerel olarak bile değiştirmek beni endişelendiriyor, türev bir isim daha iyi olabilirdi. C ++ öğrencileri belirsiz sınıfları için aşırı yüklenebilir.


Üzgünüm, MMX'te ne var?
Tobia Tesan

Sonucun sınırlandırıldığı “doymuş değerler” i düşünüyordum. Fikir, sınır ve taşma testleri içermesi gerekmiyorsa kod daha basit olabilirdi (bisiklete binmekten kaçınmak veya negatif sınırların ötesine giderek pozitifleşmeyi önlemek için grafiklerde). PSUBSB / PSUBSW. Mekanizma aynı olmayabilir, ancak fonksiyonun etkisi ve amacı kabul ediyorum.
mckenzm

-1

Bazı durumlarda sorun değil, ama değil : o kelimeye çok daha iyi yollar vardır, çünkü örnekte
saturate, clamp, clipvb


-1

'Sınırlı' adında genel bir işlev oluşturmayı tercih ederim

//Assumes lower_bound <= upper_bound
template <typename T>
T bounded(T value, T lower_bound, T upper_bound){
    if (value < lower_bound)
        return lower_bound;
    if (value > upper_bound)
        return upper_bound;
    return value;
}

//Checks an upper (by default) or lower bound
template <typename T>
T bounded(T value, T bound, bool is_upper_bound = true){
    if (is_upper_bound){
        if (value > bound)
            return bound;
    }
    else {
        if (value < bound)
            return bound;
    }
    return value;
}

veya 'min' ve 'max' kullanımıyla

//Assumes lower_bound <= upper_bound
template <typename T>
T bounded(T value, T lower_bound, T upper_bound){
    return max(min(value, upper_bound), lower_bound);
}

//Checks an upper (by default) or lower bound
template <typename T>
T bounded(T value, T bound, bool is_upper_bound = true){
    if (is_upper_bound)
        return min(value, bound);
    else
        return max(value, bound);
}

-1

İşlevlerinizi çağırmaya ne dersiniz:

atmost(x,255): en fazla x veya 255'in altını döndürür.

atleast(10,x): x'in en yükseğe veya en az 10 değerini döndürün.


-1

min(x+y, MAX_VALUE); çok daha fazla anlam taşıyacak myCustomFunction(x, y);

Yani cevabınız EVET, tavsiye edilemez . Sadece beyin dilinize bir takma ad olarak hizmet eder.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.