Istilah "Konteks" dalam pemrograman? [Tutup]


161

Saya telah pemrograman selama beberapa bulan sekarang dan kata yang sering digunakan adalah "konteks" di kelas. Seperti ServletContext(Java), Activity(Android), Service(Java, Android), NSManagedContext(Objective-C, iOS).

Dengan melihat di kamus saya melihat bahwa kata itu berarti: situasi, lingkungan, keadaan, dll. Namun, karena saya bukan penutur asli bahasa Inggris, saya tidak mengerti apa yang harus saya terjemahkan secara langsung. Sebagai contoh, jika saya menulis kelas yang dinamai SomeClassContext, atau metode yang memiliki parameter konteks, saya tidak akan mengerti kapan saya harus menamainya konteks karena saya tidak memahaminya.

Saya telah mencari konteks pada Stack Overflow, tetapi tidak ada pertanyaan / jawaban yang dapat membantu saya.

Saya akan sangat senang jika seseorang bisa memberi saya penjelasan.


6
Konteks mengatakan: area di mana objek ini bertindak.
Blundell

7
Konteks adalah keadaan suatu objek atau sistem, pada suatu titik waktu
Mat

Jawaban:


190

Katakanlah Anda pergi ke dokter gigi untuk mencabut gigi.

Ketika resepsionis menanyakan nama Anda, itulah informasi yang mereka butuhkan untuk memulai janji temu. Dalam contoh ini, nama Anda adalah informasi kontekstual . Jadi dalam konteks mengunjungi dokter gigi, Anda perlu memberikan nama Anda untuk menarik gigi Anda.

Sekarang katakanlah Anda berjalan ke bank.

Di bank, Anda meminta untuk menarik $ 100. Teller perlu membuat identitas Anda sebelum memberi Anda uang, jadi Anda mungkin harus menunjukkan kepada mereka SIM atau menggesek kartu ATM Anda dan memasukkan nomor PIN Anda. Apa pun yang Anda sediakan adalah konteks . Teller menggunakan informasi ini untuk memajukan transaksi. Mereka kemudian dapat menanyakan kepada Anda akun mana yang ingin Anda tarik. Ketika Anda menjawab, "Akun tabungan saya" , itu bahkan lebih konteks .

Semakin banyak konteks yang Anda berikan, semakin banyak pengetahuan yang dimiliki pihak lain untuk membantu menangani permintaan Anda. Terkadang konteks bersifat opsional (seperti mengetikkan lebih banyak kata ke dalam pencarian Google Anda untuk mendapatkan hasil yang lebih baik) dan terkadang diperlukan (seperti memberikan nomor PIN Anda di ATM). Apa pun itu, informasi yang biasanya membantu menyelesaikan pekerjaan.

Sekarang katakanlah Anda mengambil $ 100 dan membeli tiket pesawat untuk terbang ke suatu tempat yang hangat sementara mulut Anda sembuh.

Anda tiba di tujuan cerah yang bagus, tetapi tas Anda tidak berhasil. Itu hilang di suatu tempat di sistem bandara. Jadi, Anda membawa "tiket klaim bagasi" Anda (stiker dengan barcode di atasnya) ke "Kantor Bagasi Hilang". Hal pertama yang diminta orang di belakang meja adalah tiket dengan nomor bagasi Anda. Itu adalah contoh dari beberapa konteks yang diperlukan .

Tetapi orang bagasi meminta Anda informasi lebih lanjut tentang tas Anda sehingga mereka dapat menemukannya dengan lebih mudah. Mereka bertanya, " Apa warnanya? Berapa ukurannya? Apakah ada roda? Keras atau lunak? Meskipun mereka tidak selalu membutuhkan informasi itu, akan membantu mempersempitnya jika Anda menyediakannya. Ini mengurangi area masalah. Itu membuat pencarian lebih cepat. Itu konteks opsional .

Inilah bagian yang menarik: untuk banyak perangkat lunak dan API, konteks yang diperlukan biasanya berakhir sebagai parameter aktual dalam tanda tangan metode, dan konteks opsional pergi ke tempat lain, seperti peta nilai kunci fleksibel yang dapat berisi apa saja (dan mungkin kosong ) atau ke penyimpanan thread-lokal di mana ia dapat diakses jika diperlukan.

Contoh di atas berasal dari kehidupan nyata, tetapi Anda dapat dengan mudah memetakannya ke area dalam ilmu komputer. Misalnya, tajuk HTTP berisi informasi kontekstual. Setiap tajuk berhubungan dengan informasi tentang permintaan yang dibuat. Atau ketika Anda mengirim ID transaksi global sebagai bagian dari proses komitmen dua fase , ID transaksi itu adalah konteks. Ini membantu manajer transaksi mengoordinasikan pekerjaan karena informasi tentang tugas keseluruhan yang ada.

Semoga itu bisa membantu.


22
@ Brian: Dari posting Anda dan jawaban lain yang diberikan di sini saya pikir saya mungkin mulai memahaminya. Objek yang membawa informasi keadaan tentang suatu peristiwa, apakah objek "Konteks"? Apakah itu benar? Jadi objek RequestContext akan membawa informasi tentang permintaan tertentu, benar? Dan ketika permintaan lain datang informasi yang dilampirkan ke objek-RequestContext akan berubah. Apakah salah mengatakan bahwa konteks-objek sedikit mirip DTO (objek transfer data)? Namun konteks membawa informasi tentang "hal-hal" terkait yang berbeda sementara DTO membawa informasi tentang objek seperti seseorang? Terima kasih
user772058

9
Anda sudah berhasil, itu benar sekali. Sebuah RequestContext memang akan membawa informasi tentang permintaan yang sedang berlangsung (misalnya, lokal klien). Konteksnya mirip dengan DTO / VO tetapi biasanya tidak diketik dengan kuat. Tapi konsepnya baik-baik saja.
Brian Kelly

5
@ Brian: Satu lagi pertanyaan muncul di benak saya, ketika berbicara tentang konteks-menu, makna konteks yang saya pelajari dari jawaban ini tidak masuk akal di kepala saya. Seperti yang saya mengerti sekarang konteks (pendek) untuk membawa keadaan tentang sesuatu. Jadi, apa artinya saat menggunakan kata "konteks" dengan cara ini?
user772058

9
Pertanyaan bagus. Arti "konteks" dalam "menu konteks" adalah, "hal-hal yang akan Anda lihat pada menu bergantung pada tempat Anda mengklik, ketika Anda mengklik dan apa lagi yang terjadi dalam aplikasi Anda". Informasi tersebut (di mana / kapan / apa yang Anda klik) mewakili konteks dan akan dikirim ke kode GUI sehingga dapat memutuskan hal-hal apa yang ditawarkan pada menu.
Brian Kelly

2
Jadi, parameter metode adalah konteks. Apakah aku salah?
Bisakah Aydoğan

14

Konteks dapat dilihat sebagai ember untuk menyampaikan informasi. Ini biasanya digunakan untuk melewatkan hal-hal yang tidak selalu terkait langsung dengan pemanggilan metode, tetapi masih bisa relevan. Cara orang awam untuk menggambarkannya mungkin "hal yang mungkin Anda pedulikan".

Misalnya, jika Anda menulis layanan untuk memperbarui nilai dalam db, Anda mungkin akan melewatkan id rekaman, dan nilai baru.

Jika Anda ingin antarmuka generik, Anda juga dapat menentukan konteks untuk berlalu, sehingga layanan dapat melakukan logika bisnis yang sewenang-wenang. Jadi Anda dapat memasukkan otentikasi pengguna, status sesi pengguna, dll ... dalam konteks, karena layanan dapat melakukan logika tambahan tergantung pada nilai-nilai ini.


7
Cara lain yang berguna untuk memikirkannya adalah "informasi tentang apa yang terjadi". Atau lebih akademis, itu "informasi meta". Itu ungkapan yang cukup akademis, tapi itu akurat. Dalam konteks ini.
Brian Kelly

4
ini pada dasarnya keadaan pada suatu titik waktu, tidak lebih kompleks dari itu
Matt

13

Ini tahun 2015 - mungkin bertahun-tahun setelah utas ini dimulai.

Meskipun demikian, saya memposting pesan ini untuk membantu siapa pun di luar sana seperti saya yang Berjuang untuk memahami "Konteks"

Tidak berarti saya mengklaim telah menggunakan Konteks dalam program Java - jadi sepenuhnya terserah Anda untuk menulis Konteks dalam pengkodean keras Jadi begini:

"Konteks konseptual" adalah sama "dengan memberi tahu saya lebih banyak" Ketika klien membuat permintaan ke server - untuk melakukan permintaan, server mengatakan "berikan saya beberapa info lagi sehingga saya dapat membantu Anda". Dengan demikian, bersamaan dengan permintaan tersebut, klien memberikan sekumpulan detail. Server mengambil dan memilih dari bundel semua informasi yang diperlukan untuk melayani permintaan. Bundel ini adalah apa yang disebut "Konteks"

Misalnya

Pasien pergi ke dokter dan mengatakan treat_me ("Saya sakit kepala") Kantor dokter memberi pasien formulir untuk diisi. Pasien mengisi formulir. Formulir ini digunakan oleh dokter untuk melakukan permintaan "treat_me".

Beginilah tampilan permintaan sekarang:

treat_me ( "i have a headache", filled_form_num_23321 ) 

Berikut ini filled_form_num_23321 tampilannya:

Q. Apa yang menyebabkan kondisi tersebut? A. 10 pasak Scotch rapi terakhir nite
Q. Nama pasien? A. Joe Bigdrinker
Q.Age? 98

Dalam transaksi ini filled_form_num_23321adalah "konteks".

Semoga ini bisa membantu dalam mengklarifikasi konsep "Konteks".


7

saya selalu menganggap konteks sebagai keadaan tertentu yang relevan dengan objek atau konstruksi yang saya kerjakan.

Misalnya, ketika Anda menggunakan drawRect dalam tampilan (di mana semua gambar harus dilakukan untuk tampilan), Anda harus selalu mendapatkan currentGraphicsContext di mana Anda akan mengeluarkan pernyataan grafis inti Anda. Konteks ini berisi hal-hal seperti batas tampilan, warna goresan, ketebalan goresan untuk menggambar garis, warna isian untuk mengisi Path tertutup dll. Konteks ini (seperti kebanyakan yang lain) hanyalah keadaan saat ini pada saat ini. jadi anggaplah konteks grafis dalam kasus ini hanya sebagai seperangkat keadaan seperti

kekentalan stroke adalah 1,5 piksel mengisi warna batas tampilan hitam adalah (155, 200) warna stroke adalah Merah

Pada dasarnya keadaan pada titik waktu saat ini ...


5

Untuk memberi contoh praktis. Katakanlah Anda memiliki halaman web tertentu untuk mengambil / merender beberapa informasi berdasarkan pengguna (yang masuk) dan bahasa browser. Logika mengambil informasi itu independen dari pengguna dan bahasa. Halaman Anda akan menerima pengguna dan bahasa ... untuk logika itu tidak masalah apakah itu saya atau Anda atau bahasa Inggris atau Spanyol.

Beberapa kode semu:

class FooPage
{
    void handleRequest(RequestContext context)
    {
        User user = context.getUser();
        Locale locale = context.getLocale();

        … do some logic based on the context
    }
}

Ini tidak terlalu sulit, tetapi perlu waktu untuk memahami konsepnya


5

Konteks mengacu pada konteks eksekusi , yang merupakan simbol yang dapat dijangkau dari titik tertentu dalam kode, dan nilai simbol tersebut dalam eksekusi tertentu.

Konteks adalah konsep penting karena:

  1. Unit yang dapat dieksekusi (fungsi, prosedur, instruksi) dapat menghasilkan hasil yang berbeda atau berperilaku berbeda dalam konteks yang berbeda.
  2. Semakin besar atau semakin kompleks konteksnya, semakin sulit untuk memahami apa yang dilakukan sepotong kode (itu sebabnya variabel global dijauhi).

Anda tidak harus menulis kelas konteks atau melewati parameter konteks . Setiap parameter yang diteruskan ke fungsi / metode menjadi bagian dari konteks eksekusi ketika dipanggil.

Meskipun Anda bukan penutur bahasa Inggris, saya sarankan Anda membaca salinan Kode Lengkap untuk pengenalan konsep yang lembut namun menyeluruh seperti konteks , modularitas , penggandaan , kohesi , dan sebagainya.


Saya melihat ada edisi kedua. Dapatkah saya membaca menemukannya di sana juga?
user772058

Saya melihat-lihat edisi kedua di toko buku, dan memutuskan untuk tetap menggunakan yang asli. Saya tidak ingat mengapa.
Apalala

2

Konteks dalam kasus Anda adalah lingkungan tempat aplikasi Anda berjalan.

Ini memberikan informasi / layanan / kemampuan yang dibutuhkan aplikasi Anda agar dapat berjalan dengan baik.

HTH


0

Terlalu sering penulis menganggap pembaca memiliki pemahaman terperinci tentang konteks tempat kata "konteks" digunakan.

Bagaimana mendefinisikan konteks dalam kalimat berikut "The? Runtime menciptakan konteks di mana nilai yang mungkin untuk injeksi dapat disimpan. Konteks ini dapat dimodifikasi, misalnya aplikasi dan kerangka kerja dapat menambahkan elemen ke konteks.

Tampaknya penulis menggunakan konteks yang berarti semacam wadah, mungkin tumpukan, yang menyimpan konteks sesuatu. Itu telah menjadi kata buzz yang mengambil banyak makna dan hal-hal membingungkan. Apakah itu elemen yang merupakan konteks dan sedang disimpan dalam suatu konteks. Untuk mengurangi kebingungan konteks bahwa kata konteks digunakan, dapat dikatakan bahwa "runtime menciptakan wadah untuk menyimpan konteks dalam bentuk elemen." Lebih baik lagi "runtime membuat wadah untuk menyimpan keadaan dalam bentuk elemen dan wadah ini dengan keadaan itu disebut CONTEXT."


0

3 tahun kemudian jadi mungkin sedikit terlambat, tapi, mungkin utas ini akan membantu Anda. Ini menggambarkan bahwa kata "konteks" memiliki makna teknis dalam pemrograman (bukan sekadar makna bahasa Inggris).

Bahasa pemrograman apa yang bebas konteks?

Tidak yakin apakah Anda dapat menggunakannya sebagai contoh dan menarik beberapa informasi darinya atau tidak. Saya juga ingin mendengar penjelasan agnostik bahasa dari istilah pemrograman "konteks"

Sunting: Atau setidaknya menunjukkan bahwa istilah "konteks" dapat diterapkan dalam konteks pemrograman teknis (tidak ada punn yang dimaksudkan). Mungkin dalam lebih dari satu aplikasi konkret dari istilah tersebut.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.