स्ट्रिंग प्रक्षेप

From alpha
Jump to navigation Jump to search

कंप्यूटर प्रोग्रामिंग में, स्ट्रिंग इंटरपोलेशन (या वेरिएबल इंटरपोलेशन, वेरिएबल प्रतिस्थापन, या वेरिएबल विस्तार) एक या अधिक फॉर्म (दस्तावेज़)#प्लेसहोल्डर्स वाले स्ट्रिंग अक्षर का मूल्यांकन करने की प्रक्रिया है, जिससे परिणाम मिलता है जिसमें प्लेसहोल्डर्स को उनके संबंधित मानों से बदल दिया जाता है . यह सरल Template प्रोसेसर का एक रूप है[1] या, औपचारिक शब्दों में, अर्ध-उद्धरण (या तर्क प्रतिस्थापन (तर्क) व्याख्या) का एक रूप। प्लेसहोल्डर एक परिवर्तनीय नाम हो सकता है, या कुछ भाषाओं में एक मनमाना अभिव्यक्ति हो सकता है, किसी भी मामले में वर्तमान स्कोप (कंप्यूटर विज्ञान) में मूल्यांकन किया जाता है।

स्ट्रिंग इंटरपोलेशन, संयोजन के माध्यम से स्ट्रिंग बनाने का एक विकल्प है, जिसके लिए बार-बार उद्धरण और अनउद्धरण की आवश्यकता होती है;[2] या प्रिंटफ प्रारूप स्ट्रिंग में प्रतिस्थापित करना, जहां वेरिएबल उस स्थान से बहुत दूर है जहां इसका उपयोग किया जाता है। तुलना करना:

apples = 4
puts "I have #{apples} apples." # string interpolation
puts "I have " + String(apples) + " apples." # string concatenation
puts "I have %d apples." % apples # format string

आम तौर पर दो प्रकार की शाब्दिक अभिव्यक्ति की पेशकश की जाती है: एक इंटरपोलेशन सक्षम के साथ, दूसरा बिना। गैर-इंटरपोलेटेड स्ट्रिंग भी अनुक्रमों से बच सकती हैं, जिस स्थिति में उन्हें कच्ची स्ट्रिंग कहा जाता है, हालांकि अन्य मामलों में यह अलग है, कच्ची स्ट्रिंग के तीन वर्ग उत्पन्न करती है, गैर-इंटरपोलेटेड (लेकिन बच गईकच्ची डोरी, इंटरपोलेटेड (और बच गई) स्ट्रिंग। उदाहरण के लिए, यूनिक्स शैल में, एकल-उद्धृत तार कच्चे होते हैं, जबकि दोहरे-उद्धृत तार प्रक्षेपित होते हैं। प्लेसहोल्डर्स को आम तौर पर एक नंगे या नामित सिगिल (कंप्यूटर प्रोग्रामिंग) द्वारा दर्शाया जाता है (आमतौर पर)। $ या %), उदा. $apples या %apples, या ब्रेसिज़ के साथ, उदा. {apples}, कभी-कभी दोनों, उदा. ${apples}. कुछ मामलों में अतिरिक्त स्वरूपण विनिर्देशकों का उपयोग किया जा सकता है (जैसे कि प्रिंटफ में), उदाहरण के लिए {apples:3}, और कुछ मामलों में स्वरूपण विनिर्देशकों को स्वयं प्रक्षेपित किया जा सकता है, उदाहरण के लिए {apples:width}. स्ट्रिंग का विस्तार आमतौर पर रन टाइम (प्रोग्राम जीवनचक्र चरण) पर होता है।

स्ट्रिंग इंटरपोलेशन के लिए भाषा समर्थन व्यापक रूप से भिन्न होता है। कुछ भाषाएँ स्ट्रिंग इंटरपोलेशन की पेशकश नहीं करती हैं, इसके बजाय कॉन्सटेनेशन, सरल फ़ॉर्मेटिंग फ़ंक्शंस या टेम्पलेट लाइब्रेरीज़ का उपयोग करती हैं। स्ट्रिंग इंटरपोलेशन कई प्रोग्रामिंग भाषाओं में आम है जो डेटा के स्ट्रिंग (कंप्यूटर विज्ञान) प्रतिनिधित्व का भारी उपयोग करते हैं, जैसे ग्रूवी (प्रोग्रामिंग भाषा), जूलिया (प्रोग्रामिंग भाषा), कोटलिन (प्रोग्रामिंग भाषा), पर्ल, पीएचपी, पायथन (प्रोग्रामिंग भाषा) ), रूबी (प्रोग्रामिंग भाषा), स्काला (प्रोग्रामिंग भाषा), स्विफ्ट (प्रोग्रामिंग भाषा), टी.सी.एल और अधिकांश यूनिक्स शैल

एल्गोरिदम

परिवर्तनीय प्रक्षेप के लिए चर-विस्तार एल्गोरिदम के दो मुख्य प्रकार हैं:[3]

  1. प्लेसहोल्डर्स को बदलें और विस्तारित करें: फाइंड-रिप्लेस ऑपरेशंस द्वारा मूल स्ट्रिंग से एक नई स्ट्रिंग बनाना। वेरिएबल संदर्भ (प्लेसहोल्डर) ढूंढें, इसे इसके वेरिएबल मान से बदलें। यह एल्गोरिथम कोई कैश रणनीति प्रदान नहीं करता है.
  2. स्ट्रिंग को विभाजित करें और जोड़ें: स्ट्रिंग को एक सरणी में विभाजित करना, इसे मानों की संबंधित सरणी के साथ विलय करना, फिर संयोजन द्वारा आइटमों को जोड़ना। विभाजित स्ट्रिंग को पुन: उपयोग के लिए कैश किया जा सकता है।

सुरक्षा मुद्दे

स्ट्रिंग अंतर्वेशन, स्ट्रिंग संयोजन की तरह, सुरक्षा समस्याओं का कारण बन सकता है। यदि उपयोगकर्ता इनपुट डेटा अनुचित तरीके से बच गया है या फ़िल्टर किया गया है, तो सिस्टम SQL इंजेक्शन, स्क्रिप्ट इंजेक्शन, XML बाहरी इकाई हमले | XML बाहरी इकाई (XXE) इंजेक्शन, और क्रॉस साइट स्क्रिप्टिंग (XSS) हमलों के संपर्क में आ जाएगा।[4] एक SQL इंजेक्शन उदाहरण:

क्वेरी =SELECT x, y, z FROM Table WHERE id='$id'

अगर$idसे प्रतिस्थापित कर दिया गया है'; DELETE FROM Table; SELECT * FROM Table WHERE id=', इस क्वेरी को निष्पादित करने से इसमें मौजूद सारा डेटा मिट जाएगा Table.

उदाहरण

एबीएपी

DATA(apples) = 4.
WRITE |I have { apples } apples|.

आउटपुट होगा:

I have 4 apples


बैश

apples=4
echo "I have $apples apples"
# or
echo "I have ${apples} apples"

आउटपुट होगा:

I have 4 apples


बू

apples = 4
print("I have $(apples) apples")
# or
print("I have {0} apples" % apples)

आउटपुट होगा:

I have 4 apples


सी#

var apples = 4;
var bananas = 3;

Console.WriteLine($"I have {apples} apples");
Console.WriteLine($"I have {apples + bananas} fruits");

[5]

आउटपुट होगा:

I have 4 apples
I have 7 fruits


कोल्डफ्यूजन मार्कअप लैंग्वेज

कोल्डफ्यूजन मार्कअप लैंग्वेज (सीएफएमएल) स्क्रिप्ट सिंटैक्स:

apples = 4;
writeOutput("I have #apples# apples");

टैग सिंटैक्स:

<cfset apples = 4>
<cfoutput>I have #apples# apples</cfoutput>

आउटपुट होगा: I have 4 apples

कॉफ़ीस्क्रिप्ट

apples = 4
console.log "I have #{apples} apples"

आउटपुट होगा:

I have 4 apples


डार्ट

int apples = 4, bananas = 3;
print('I have $apples apples.');
print('I have ${apples+bananas} fruits.');

आउटपुट होगा:

I have 4 apples.
I have 7 fruits.


जाओ

As of 2022, गो में स्ट्रिंग इंटरपोलेशन नहीं है। भाषा के अगले संस्करण, गो 2 में स्ट्रिंग इंटरपोलेशन के लिए कुछ प्रस्ताव आए हैं।[6][7] इसके बजाय, गो इसमें प्रिंटफ प्रारूप स्ट्रिंग का उपयोग करता है fmt.Sprintf फ़ंक्शन, स्ट्रिंग कॉन्सटेनेशन, या टेम्पलेट लाइब्रेरीज़ जैसे text/template.

ग्रूवी

ग्रूवी में, इंटरपोलेटेड स्ट्रिंग्स को जीस्ट्रिंग्स के रूप में जाना जाता है:[8]

def quality = "superhero"
final age = 52
def sentence = "A developer is a $quality if he is ${age <= 42 ? 'young' : 'seasoned'}"
println sentence

आउटपुट होगा:

A developer is a superhero if he is seasoned


मिश्रित

var apples = 4;
var bananas = 3;
trace('I have $apples apples.');
trace('I have ${apples+bananas} fruits.');

आउटपुट होगा:[9]

I have 4 apples.
I have 7 fruits.


जावा

As of 2022, जावा में इंटरपोलेटेड स्ट्रिंग्स नहीं हैं, और इसके बजाय प्रारूप फ़ंक्शंस का उपयोग करता है, विशेष रूप से MessageFormat क्लास (जावा संस्करण 1.1 और ऊपर) और स्थिर विधि String.format (जावा संस्करण 5 और ऊपर)। एक प्रस्ताव है जावा भाषा में स्ट्रिंग इंटरपोलेशन जोड़ने का। इस प्रस्ताव का उद्देश्य सुरक्षित स्ट्रिंग इंटरपोलेशन करना है, जिससे इंजेक्शन हमलों को रोकना आसान हो जाएगा।

जावास्क्रिप्ट

जावास्क्रिप्ट, ECMAScript 2015 (ES6) मानक के अनुसार, बैकटिक्स का उपयोग करके स्ट्रिंग इंटरपोलेशन का समर्थन करता है ``. इस सुविधा को टेम्प्लेट लिटरल्स कहा जाता है.[10] यहाँ एक उदाहरण है:

const apples = 4;
const bananas = 3;
console.log(`I have ${apples} apples`);
console.log(`I have ${apples + bananas} fruits`);

आउटपुट होगा:

I have 4 apples
I have 7 fruits

टेम्प्लेट शाब्दिक का उपयोग मल्टी-लाइन स्ट्रिंग्स के लिए भी किया जा सकता है:

console.log(`This is the first line of text.
This is the second line of text.`);

आउटपुट होगा:

This is the first line of text.
This is the second line of text.


जूलिया

apples = 4
bananas = 3
print("I have $apples apples and $bananas bananas, making $(apples + bananas) pieces of fruit in total.")

आउटपुट होगा:

I have 4 apples and 3 bananas, making 7 pieces of fruit in total.


कोटलिन

val quality = "superhero"
val apples = 4
val bananas = 3
val sentence = "A developer is a $quality. I have ${apples + bananas} fruits"
println(sentence)

आउटपुट होगा:

A developer is a superhero. I have 7 fruits


नेमर्ले

def apples = 4;
def bananas = 3;
Console.WriteLine($"I have $apples apples.");
Console.WriteLine($"I have $(apples + bananas) fruit.");

यह उन्नत स्वरूपण सुविधाओं का भी समर्थन करता है, जैसे:

def fruit = ["apple", "banana"];
Console.WriteLine($<#I have ..$(fruit; "\n"; f => f + "s")#>);

आउटपुट होगा:

apples
bananas


पहले

निम स्ट्रुटिल्स मॉड्यूल के माध्यम से स्ट्रिंग इंटरपोलेशन प्रदान करता है। पायथन एफ-स्ट्रिंग से प्रेरित स्वरूपित स्ट्रिंग अक्षर स्ट्रेफ़ॉर्मेट मॉड्यूल के माध्यम से प्रदान किए जाते हैं, स्ट्रेफ़ॉर्मेट मैक्रो सत्यापित करता है कि प्रारूप स्ट्रिंग अच्छी तरह से बनाई गई है और अच्छी तरह से टाइप की गई है, और फिर संकलन-समय पर निम स्रोत कोड में विस्तारित किया जाता है।

import strutils, strformat
var apples = 4
var bananas = 3
echo "I have $1 apples".format(apples)
echo fmt"I have {apples} apples"
echo fmt"I have {apples + bananas} fruits"

# Multi-line
echo fmt"""
I have 
{apples} apples"""

# Debug the formatting
echo fmt"I have {apples=} apples"

# Custom openChar and closeChar characters
echo fmt("I have (apples) {apples}", '(', ')')

# Backslash inside the formatted string literal
echo fmt"""{ "yep\nope" }"""

आउटपुट होगा:

I have 4 apples
I have 4 apples
I have 7 fruits
I have
4 apples
I have apples=4 apples
I have 4 {apples}
yep
ope


निक्स

let numberOfApples = "4";
in "I have ${numberOfApples} apples"

आउटपुट होगा:

I have 4 apples


परसाइल

const Apples := 4
const Bananas := 3
Println ("I have `(Apples) apples.\n")
Println ("I have `(Apples+Bananas) fruits.\n")

आउटपुट होगा:

I have 4 apples.
I have 7 fruits.


पर्ल

my $apples = 4;
my $bananas = 3;
print "I have $apples apples.\n";
print "I have @{[$apples+$bananas]} fruit.\n";  # Uses the Perl array (@) interpolation.

आउटपुट होगा:

I have 4 apples.
I have 7 fruit.


पीएचपी

<?php
$apples = 5;
$bananas = 3;
echo "There are $apples apples and $bananas bananas.\n";
echo "I have {$apples} apples and {$bananas} bananas.";

आउटपुट होगा:

There are 5 apples and 3 bananas.
I have 5 apples and 3 bananas.


पायथन

पायथन संस्करण 3.6 के अनुसार स्ट्रिंग इंटरपोलेशन का समर्थन करता है, जिसे कहा जाता है

स्वरूपित स्ट्रिंग शाब्दिक।[11][12][13] ऐसा शाब्दिक आरंभ एक से होता है f या F प्रारंभिक उद्धरण से पहले, और प्लेसहोल्डर्स के लिए ब्रेसिज़ का उपयोग करता है:
apples = 4
bananas = 3
print(f'I have {apples} apples and {bananas} bananas')

आउटपुट होगा:

I have 4 apples and 3 bananas


रूबी / क्रिस्टल

apples = 4
puts "I have #{apples} apples"
# Format string applications for comparison:
puts "I have %s apples" % apples
puts "I have %{a} apples" % {a: apples}

आउटपुट होगा:

I have 4 apples


जंग

रस्ट में सामान्य स्ट्रिंग इंटरपोलेशन नहीं है, लेकिन मैक्रोज़ के माध्यम से समान कार्यक्षमता प्रदान करता है, जिसे प्रारूप स्ट्रिंग्स में कैप्चर किए गए पहचानकर्ता के रूप में जाना जाता है, संस्करण 1.58.0 में पेश किया गया, 2022-01-13 को जारी किया गया।[14] रस्ट std::fmt मॉड्यूल के माध्यम से फ़ॉर्मेटिंग प्रदान करता है, जो कि विभिन्न मैक्रोज़ जैसे कि [1] के माध्यम से इंटरफ़ेस किया जाता है। .org/stable/std/macro.format.html प्रारूप!], लिखें!, और rust-lang.org/stable/std/macro.print.html प्रिंट!। ये मैक्रोज़ संकलन-समय पर रस्ट स्रोत कोड में परिवर्तित हो जाते हैं, जिससे प्रत्येक तर्क फ़ॉर्मेटर के साथ इंटरैक्ट करता है। फ़ॉर्मेटर स्थितीय पैरामीटर, का समर्थन करता है नामित पैरामीटर नामित पैरामीटर, तर्क प्रकार, विभिन्न को परिभाषित करते हुए /std/fmt/#formatting-traits स्वरूपण लक्षण, और पर्यावरण से पहचानकर्ताओं को कैप्चर करना।

let (apples, bananas) = (4, 3);
// println! captures the identifiers when formatting: the string itself isn't interpolated by Rust.
println!("There are {apples} apples and {bananas} bananas.");

आउटपुट होगा:

There are 4 apples and 3 bananas.


स्काला

स्काला (प्रोग्रामिंग भाषा) 2.10+ एक स्ट्रिंग शाब्दिक के मनमाने ढंग से प्रसंस्करण की अनुमति देने के लिए एक सामान्य सुविधा प्रदान करता है, और शामिल का उपयोग करके स्ट्रिंग इंटरपोलेशन का समर्थन करता है s और f स्ट्रिंग इंटरपोलेटर. कस्टम लिखना या मानक को ओवरराइड करना भी संभव है। f ई> इंटरपोलेटर एक कंपाइलर मैक्रो है जो स्ट्रिंग.फॉर्मेट के आह्वान के रूप में एम्बेडेड अभिव्यक्तियों के साथ एक प्रारूप स्ट्रिंग को फिर से लिखता है। यह सत्यापित करता है कि प्रारूप स्ट्रिंग अच्छी तरह से बनाई गई है और अच्छी तरह से टाइप की गई है।

मानक प्रक्षेपक

स्काला 2.10+ का स्ट्रिंग इंटरपोलेशन, संसाधित स्ट्रिंग शाब्दिक में सीधे चर संदर्भों को एम्बेड करने की अनुमति देता है। यहाँ एक उदाहरण है:

val apples = 4
val bananas = 3
//before Scala 2.10
printf("I have %d apples\n", apples)
println("I have %d apples" format apples)
//Scala 2.10+
println(s"I have $apples apples")
println(s"I have ${apples + bananas} fruits")
println(f"I have $apples%d apples")

आउटपुट होगा:

I have 4 apples


स्किटर (टिस्क्रिप्ट)

स्किटर में $ से शुरू होने वाले नाम वाले किसी भी फ़ंक्शन को इंटरपोलिंग फ़ंक्शन माना जाता है और इसलिए इंटरपोलेशन अनुकूलन योग्य और संदर्भ संवेदनशील है:

var apples = 4
var bananas = 3
var domElement = ...;

domElement.$content(<p>I have {apples} apples</p>);
domElement.$append(<p>I have {apples + bananas} fruits</p>);

कहाँ

domElement.$content(<p>I have {apples} apples</p>);

इस पर संकलित हो जाता है:

domElement.html = "<p>I have " + apples.toHtmlString() + " apples</p>";


स्नोबोल

   apples = 4 ; bananas = 3
   Output = "I have " apples " apples."
   Output = "I have "  (apples + bananas) " fruits."

आउटपुट होगा:

I have 4 apples.
I have 7 fruits.


स्विफ्ट

स्विफ्ट (प्रोग्रामिंग भाषा) में, एक स्ट्रिंग अक्षर के अंदर उनके मूल्यों को शामिल करके स्थिरांक, चर, अक्षर और अभिव्यक्तियों के मिश्रण से एक नया स्ट्रिंग मान बनाया जा सकता है।[15] स्ट्रिंग अक्षरशः में डाला गया प्रत्येक आइटम बैकस्लैश द्वारा उपसर्ग किए गए कोष्ठकों की एक जोड़ी में लपेटा गया है।

let apples = 4
print("I have \(apples) apples")

आउटपुट होगा:

I have 4 apples


टीसीएल

टूल कमांड लैंग्वेज ने हमेशा सभी उद्धरण-सीमांकित स्ट्रिंग्स में स्ट्रिंग इंटरपोलेशन का समर्थन किया है।

set apples 4
puts "I have $apples apples."

आउटपुट होगा:

I have 4 apples.

वास्तव में मूल्यों को प्रारूपित करने के लिए - और न केवल प्रतिस्थापित करने के लिए, एक स्वरूपण फ़ंक्शन है।

set apples 4
puts [format "I have %d apples." $apples]


टाइपस्क्रिप्ट

संस्करण 1.4 के अनुसार, टाइपप्रति बैकटिक्स का उपयोग करके स्ट्रिंग इंटरपोलेशन का समर्थन करता है ``. यहाँ एक उदाहरण है:

var apples: number = 4;
console.log(`I have ${apples} apples`);

आउटपुट होगा:

I have 4 apples
console.log e> फ़ंक्शन का उपयोग एक के रूप में किया जा सकता है printf समारोह। उपरोक्त उदाहरण को इस प्रकार फिर से लिखा जा सकता है:
var apples: number = 4;
console.log("I have %d apples", apples);

आउटपुट वही रहता है.

विजुअल बेसिक

विज़ुअल बेसिक 14 के अनुसार, विज़ुअल बेसिक में स्ट्रिंग इंटरपोलेशन समर्थित है।[16]

name = "Tom"
Console.WriteLine($"Hello, {name}")

आउटपुट होगा:

Hello, Tom

यह भी देखें

टिप्पणियाँ

  1. "Enforcing Strict Model-View Separation in Template Engines", T. Parr (2004), WWW2004 conference.
  2. "पर्ल में अंतर्वेशन". This is much tidier than repeat uses of the '.' concatenation operator.
  3. "smallest-template-system/Simplest algorithms", an online tutorial for placeholder-template-systems.
  4. "सुरक्षित स्ट्रिंग इंटरपोलेशन". google-caja.googlecode.com. Archived from the original on 2012-10-19.
  5. "Strings - C# Programming Guide".
  6. "proposal: Go 2: string interpolation #34174". GitHub.
  7. "proposal: Go 2: string interpolation evaluating to string and list of expressions #50554". GitHub.
  8. "अपाचे ग्रूवी प्रोग्रामिंग भाषा - सिंटेक्स". groovy-lang.org. Retrieved 2021-06-20.
  9. "हैक्स - मैनुअल - स्ट्रिंग इंटरपोलेशन". Haxe - The Cross-platform Toolkit. Retrieved 2017-09-12.
  10. "Template literals (Template strings) - JavaScript | MDN".
  11. "The Python Tutorial: 7.1.1. Formatted String Literals".
  12. "The Python Language Reference: 2.4.3. Formatted string literals".
  13. "PEP 498 -- Literal String Interpolation".
  14. "Announcing Rust 1.58.0: Captured identifiers in format strings". 2022-01-13.
  15. "Strings and Characters — The Swift Programming Language (Swift 5.5)". docs.swift.org. Retrieved 2021-06-20.
  16. KathleenDollard. "इंटरपोलेटेड स्ट्रिंग्स - विज़ुअल बेसिक". docs.microsoft.com. Retrieved 2021-06-20.

[Category:Variable (computer scienc